编程笔记Fabric程序员

Docker 学习笔记

2016-08-31  本文已影响601人  老瓦在霸都

Docker 技术风靡一时, 到底它有什么绝代的风华可以倾倒众生呢?

翻阅了几本书和网上的资料, 总算弄懂了个大概, 从安装到使用, 做点笔记.

Paste_Image.png

Docker 发展太快了, 它的安装方式也提升很快

Docker 需要 64 位的 Linux 系统 , 内核版本在3.10 以上, 默认只能安装在 Linux 上, 在windows 和 mac 上要安装一个虚拟机环境

�首先在我的 mac book 上装一个docker toolbox, 其实就是脱胎于以前的 boot2docker

安装篇

Docket toolbox

  1. Use docker on mac osx
  2. Install docker toolbox on mac)
Paste_Image.png

安装完后可以看一下当前运行的 docker machine

$ docker-machine regenerate-certs default
$ docker-machine restart default
$ eval $(docker-machine env default)
$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.11.2

要想卸载的话, 可以

  1. docker-machine rm default
  2. 从 “Applications” 中删除 Docker Quickstart Terminal and Kitematic
  3. Remove the docker, docker-compose, and docker-machine
$ rm /usr/local/bin/docker
$ rm /usr/local/bin/docker-compose
$ rm /usr/local/bin/docker-machine

Docker for MAC

Paste_Image.png
$ env | grep DOCKER
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_MACHINE_NAME=default
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/Users/.../.docker/machine/machines/default

$ unset DOCKER_TLS_VERIFY 
$ unset DOCKER_CERT_PATH 
$ unset DOCKER_MACHINE_NAME 
$ unset DOCKER_HOST

然后从 https://docs.docker.com/docker-for-mac/ 下载 Docker.dmg 安装即可,
点击 Docker.app 会在导向栏中出现一个docker 图标

Paste_Image.png

快速�验证一下

docker version
docker run hello-world
docker ps -a
Paste_Image.png

上述命令就是让 docker 运行一个镜像, 如果本地没有这个镜像的话, 就从远程下载

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

快速上手

docker 的命令很多, 可以用 docker help command 来获取详细帮助

操作 用法 例子 解释
拉取 docker 镜像 docker pull [options] image_name[:tag] docker pull ubuntu:latest
运行docker 实例 docker run [options] image_name [command] [args...] docker run -i -t --name mydocker ubuntu:latest /bin/bash -i 使用交互模式,保持输入流打开
-t 分配一个伪终端
--name 为运行的容器指定一个名字
-c 为容器所分配的cpu
-m 为容器所分配的 memory
-v [host_dir]:[container_dir] 挂载本地目录到容器中
-p [host_port]:[container_port] 映射本地端口到容器中的端口
获取 docker 镜像 docker images [options] image_name docker images
Docker 实例更名 docker rename <old_container_name> <new_container_name> docker rename tomcat tomcat7
Docker 中命令的执行 docker exec [OPTIONS] CONTAINER COMMAND [ARG...] docker exec -it tomcat /bin/bash
拷贝文件到 Docker 中 docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH docker cp ./examples/guestbook/target/guestbook.war tomcat:/usr/local/tomcat/webapps

理论篇

先解释一下相关概念, docker 容器技术架构如下

Paste_Image.png

Docker machine

Docker Machine 是一个工具 , 让你安装 Docker 引擎在你的虚拟主机上, 并可以用 docker-machine 命令进行管理.

使用 docker-machine , 可以 start, inspect, stop, and restart 一个被管理的 host, 升级 docker client and daemon, 并配置 Docker client 与你的主机交互

    $ docker-machine stop default
    $ docker-machine start default  
    $ docker-machine ip default
    192.168.99.100

Docker image

先试着运行一下 HelloWorld

docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

这样会启动一个匿名的 docker 容器, 基于的镜像是 hello-world, 本地如果没有这个 image, 会到 github 上拉取

docker container 基于 image 启动, 镜像 Image 是由文件系统叠加起来的, 最底层是bootfs
当一个容器启动后, 它将会被移到内存中, 随即会 unmount bootfs

第二层是rootfs, 它可以是多种操作系统, unbuntu or centos, rootfs是只读状态的

docker 利用 union mount 技术会在 rootfs 上加载更多的只读文件系统, 各层文件系统叠加到一起, 最终的文件系统看起来象一个文件系统, 最终的文件系统叠加到一起, 最终的文件系统会包含所有的底层的文件和目录, 这样的文件系统就是 image

当容器启动时, 初始的读写层是空的, 当文件系统发生变化时, 该文件会从只读层复制读写层 (copy on write)

    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              693bce725149        9 days ago          967 B
    centos              latest              904d6c400333        2 weeks ago         196.8 MB
    nginx               latest              0d409d33b27e        2 weeks ago         182.8 MB
    busybox             latest              47bcc53f74dc        3 months ago        1.113 MB
docker image
docker pull jenkins
docker run -t -i --name my_jenkins jenkins /bin/bash
docker search jenkins
docker commit <container_id> <new_image_name>
docker rmi <image_name>

用 Dockerfile 构建image

    FROM centos:6.7
    MAINTAINER Walter Fan "walter.fan@gmail.com"    
        RUN yum update
    RUN yum install -y nginx
    RUN echo "<html><body>Hello World</body></html>" > /usr/share/nginx/html/index.html
    EXPOSE 80
docker build -t="walterfan/hfkb:v1" .

Docker Hub

docker hub 类似于 maven 仓库, 持有各种 docker image
https://hub.docker.com 上创建 docker hub 帐号, 然后就可以上传自己的 Image 了

Paste_Image.png

Docker Container

镜像是静态的文件系统, 容器是动态的运行实例

# -i open standard input
# -t open pseudo tty
# -d dameon 在后台运行
docker create -it centos
docker inspect <container_name>
docker ps -a
docker run -it centos:latest /bin/bash
docker stop <container_id>
docker attach <container_id>
docker exec -it <container_id> /bin/bash
 docker start <container_id> 
 docker attache <container_id> 
docker run --name <container_id>  -d centos 
docker stop wf_container
docker top <container_id> 
docker ps <container_id> 
 docker inspect <container_id> 
 docker exec -d <container_id>  touch /opt/rh/readme.md
docker exec -t -i <container_id>  /bin/bash     

删除一个容器

docker rm <container_id> 
# -f 强制终止并删除
# -l 删除容器的连接
# -v 删除所挂载的数据卷
docker rm <container_id> 

docker export <container_id> > xxx.tar
cat xxx.tar|docker import - <container_name>/centos:v1.0

Docker data volume

docker run -idt -P --name ccp -v /Users/walter/Documents/workspace:/opt/workspace centos

docker exec -it <container_id> /bin/bash

yum install -y gcc-c++
yum install -y make
yum install -y automake

Tips

运行 docker centos 容器

docker run -idt -P --name ccp -v /Users/walter/Documents/workspace:/opt/workspace centos
docker attache ccp

在 shell 环境中可以安装所需软件

$ yum install vim 

如果 exit 退出则停止了 docker container, 可以用 docker start cpp 再启动起来

运行 docker busybox 容器 并执行 ‘echo’ command.

$ docker run busybox echo hello world

运行 docker nginx 容器, 映射容器内部端口80到外部 host 端口8000

$ docker run -d -p 8000:80 nginx

参考资料

上一篇 下一篇

猜你喜欢

热点阅读