Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(来自百度百科)。Docker是这两年比较热的东西,有人用来解决集群运维中问题,有人用来它做微服务的架构,总之,是个好东西。 

今天我写一点自己操作Docker的操作日记,一是给自己工作成果留个记录,二是也许也能惠及到别人。 我的大部分参考主要来自https://docker.github.io/上的文档。 

第一篇我来讲讲怎么安装Docker和运行一个Helloworld的docker,以及常用的一些命令。 

准备2台机器,一台取名为master, 另外一台取名为slave, 这两台机器都安装了CentOS 7 64bit。为了减少操作输入的麻烦,都是用root权限来操作的,如果正常的非root用户操作,就在命令之前加sudo 

1. 在安装之前,要确保删除机器上原有docker的安装版本,如果你重装docker,也可以安装下列步骤。如果你重来没有安装过docker的话,这步可以跳过。

    a. 停止docker服务(如果有的话)

        $ sudo systemctl stop docker

    b. 删除docker相关的安装包

  $ sudo yum -y remove docker docker-engine docker-common container-selinux docker-engine-selinux

        如果有相关包名match的话,会被删除。

    c. 你可以选择迁移旧的docker数据的目录(var/lib/docker),也可以保留下来(如果在后面的安装中没有冲突发生的话)

      $ sudo mv /var/lib/docker ./reserve_docker_data

 

2. 在清理完旧docker安装包之后,我们可以开始来安装docker来。

    a.  如果你是一台新的机器的话,你需要安装docker的仓库(repository),安装之后,以后你对docker的安装,更新或者下载,都是从这个仓库里来。

      i.  安装yum-utils包,因为这个包会提供一个 yum-config-manager工具

      $ sudo yum install -y yum-utils

      ii.  用yum-config-manager来安装docker 仓库

      $ sudo yum-config-manager \
                 --add-repo \
                https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo

      如果成功,返回log中会有 repo saved to /etc/yum.repos.d/docker.repo。             

      在docker.github的文档中还提到怎么测试这个仓库安装是否成功。 但是这个是可选项,如果没有特别返回值,我认为没有必要去做。

 

    b.  安装docker 

      i. 首先更新yun的下载包的索    

      $  sudo yum makecache fast

      ii.  然后直接安装最新版的docker包 (写文档时候,最新是docker1.13.1,如果你需要用到swarm模式的话,需要安装的是docker-engine,如果是安装docker,就不支持swarm模式)。

      $  sudo yum -y install docker-engine           

       安装完成之后,log会包含安装的版本:

        Installed:
        docker-engine.x86_64 0:1.13.1-1.el7.centos    Complete!

      在实际的操作中,我们可能需要在安装的时候就指定版本,而不是每次都下载最新版本,你可以用sudo yum list docker-enigne 来有哪些合适的docker-engine的安装包版本然后在安装过程中直接指定版本。 比如:

   $  sudo yum list docker-engine --showduplicates | sort --sort=version -r

   返回结果: 

docker-engine.x86_64               1.13.1-1.el7.centos               docker-main
docker-engine.x86_64               1.13.0-1.el7.centos               docker-main
docker-engine.x86_64               1.12.6-1.el7.centos               docker-main
docker-engine.x86_64               1.12.5-1.el7.centos               docker-main

   然后运行 $ sudo yum install -y docker-engine-1.13.1-1.el7.centos    安装就可以了。          

  iii. 启动docker service

     先设置docker service开机启动

     $ sudo systemctl enable docker

      然后启动docker service

     $ sudo systemctl start docker

       你可以跑一下docker命令,现在docker已经ready了

     $ sudo docker --help

       你能看到docker支持的各种命令,后面我们慢慢来讲怎么用它们。 

 

3. 下载一个helloworld的docker image然后启动第一个docker 实例

     先查看一下当前本地的docker image

     $ sudo docker images

     返回结果应该是空的:
     REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

   下载一个hello-world的image,默认是从公共的io.docker仓库. 下载过程可能连接超时,可以多试几次。

     $ sudo docker pull hello-world
                    Using default tag: latest
                    latest: Pulling from library/hello-world
                    78445dd45222: Pull complete
           Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
           Status: Downloaded newer image for hello-world:latest

     查看一下本地image,应该已经有hello-world这个image 

    $ sudo docker images
            REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
            hello-world         latest              48b5124b2768        5 weeks ago         1.84 kB
   

    运行hello-world的docker image 

     $ sudo docker run hello-world 

     Hello from Docker!   //第一个docker实例启动了

 

   4.  其他关于安装更新的说明:

            a. 需要更新docker的版本的话,如果安装上述方式安装的,只要重新yum install一个新的版本就可以了,不用删除重装新版本。 

            b. 如果你想下载RPM包到本地,然后去 https://yum.dockerproject.org/repo/main/centos/ 下载RPM,然后yum install -y /path/包名.rpm。 这种安装方式,需要更新的时候,用yum upgrade /path/新包名.rpm (而不用yum install).

    5.  关于docker 常用命令的说明

       - docker run  [OPTIONS] DOCKER_IMAGE [FIRST CMD]     //启动docker image,

      常用的进入一个容器的控制台

    sudo docker run -it -v HOST_FOLDER:CONTAILER_FOLDER -p HOST_PORT:CONTAINER_PORT  DOCKER_IMAGE /bin/bash

     -it: 允许控制台输出   -v是主机目录映射到容器内目录  -p 是容器侦听端口映射到主机端口

      - docker images    //查看本地的image 列表

      - docker pull  Repository/DOCKER_IMAGE  //从仓库里下载一个image, Repository没写的话,默认是io.docker

       sudo docker pull tomcat  //从公共io.docker仓库来下载一个tomcat image

- docker push Repository/DOCKER_IMAGE

        sudo docker push  myRepository/myapp:1.0  上传一个myapp:1.0到私有仓库myRepository

       - docker ps // 查看当前运行的docker 实例

        sudo docker ps -a //查看所有的运行过的实例,包括已经关闭的实例

        sudo docker ps --last n  //查看最近运行的n个实例,n 可以1,2,3..整数

       - docker commit CONTAINER_ID DOCKER_IMAGE //把某个运行的实例,保存为一个本地image,以便下次用docker run运行同样的实例。 CONTAINER_ID通常去前四位就可以了.

       $ sudo docker commit 2970 myhellworld

 

 最后在另外一台机器slaver也做同样的操作,确保两台机器上docker都安装完成。