CentOS 系列安装 Docker
Docker 支持 CentOS6 及以后的版本。
CentOS6
对于 CentOS6,可以使用 EPEL 库安装 Docker,命令如下
[root@MSJTVL-MJSP-A35 opt]# yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm Loaded plugins: fastestmirror, security Setting up Install Process epel-release-6-8.noarch.rpm | 14 kB 00:00 Examining /var/tmp/yum-root-dp2p3m/epel-release-6-8.noarch.rpm: epel-release-6-8.noarch /var/tmp/yum-root-dp2p3m/epel-release-6-8.noarch.rpm: does not update installed package. Error: Nothing to do [root@MSJTVL-MJSP-A35 opt]# yum install docker-io
CentOS7
CentOS7 系统 CentOS-Extras
库中已带 Docker,可以直接安装:
$ sudo yum install docker
安装之后启动 Docker 服务,并让它随系统启动自动加载。
[root@MSJTVL-MJSP-A35 opt]# service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
[root@MSJTVL-MJSP-A35 opt]# chkconfig docker on
Docker 镜像
镜像是 Docker 的三大组件之一
Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库)。
下面介绍:
- 从仓库获取镜像;
- 管理本地主机上的镜像;
- 介绍镜像实现的基本原理。
获取镜像
可以使用 docker pull
命令来从仓库获取所需要的镜像。
下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。
[root@MSJTVL-MJSP-A35 docker]# docker pull ubuntu:12.04 12.04: Pulling from ubuntu 191c4e1e4400: Pull complete fd04a9dc157f: Pull complete be08d59fa177: Pull complete ecf8c2069900: Pull complete 8ea067ad7a27: Pull complete 8ea067ad7a27: Pulling fs layer Digest: sha256:57a83f4b4f43f2d008c8ceaa9663a6f7ecd061fefa80da8f32e0f22c7b923390 Status: Downloaded newer image for ubuntu:12.04
下载过程中,会输出获取镜像的每一层信息。
该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04
命令,即从注册服务器registry.hub.docker.com
中的 ubuntu
仓库来下载标记为 12.04
的镜像。
为了方便在后续工作中使用这个镜像,还可以使用docker tag 命令为本地镜像添加新的标签,例如:
[root@MSJTVL-MJSP-A35 docker]# docker tag ubuntu:12.04 unbutn:02.09 [root@MSJTVL-MJSP-A35 docker]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 12.04 8ea067ad7a27 7 weeks ago 103.6 MB unbutn 02.09 8ea067ad7a27 7 weeks ago 103.6 MB
列出本地镜像
使用 docker images
显示本地已有的镜像。
[root@MSJTVL-MJSP-A35 docker]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 12.04 8ea067ad7a27 7 weeks ago 103.6 MB unbutn 02.09 8ea067ad7a27 7 weeks ago 103.6 MB
在列出信息中,可以看到几个字段信息
- 来自于哪个仓库,比如 ubuntu
- 镜像的标记,比如 12.04
- 它的
ID
号(唯一) - 创建时间
- 镜像大小
其中镜像的 ID
唯一标识了镜像,注意到 ubuntu:12.04
和 ubuntu:02.09
具有相同的镜像 ID
,说明它们实际上是同一镜像。
TAG
信息用来标记来自同一个仓库的不同镜像。例如 ubuntu
仓库中有多个镜像,通过 TAG
信息来区分发行版本,例如 10.04
、12.04
、12.10
、13.04
、14.04
等。例如下面的命令指定使用镜像 ubuntu:12.04
来启动一个容器。
[root@MSJTVL-MJSP-A35 docker]# docker run -t -i ubuntu:12.04 /bin/bash root@d67d32057f1c:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var root@d67d32057f1c:/# pwd / root@d67d32057f1c:/# id uid=0(root) gid=0(root) groups=0(root) root@d67d32057f1c:/# ip a 4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:01 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global eth0 inet6 fe80::42:acff:fe11:1/64 scope link valid_lft forever preferred_lft forever 6: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever root@d67d32057f1c:/# exit
如果不指定具体的标记,则默认使用latest标记信息。
创建镜像
创建镜像的方法有三种:基于已有镜像的容器创建,基于本地模板导入,基于Dockerfile创建
接下来重点介绍前两种,最后一种基于Dockerfile创建的方法将在后续的专门详细介绍
基于已有镜像的容器创建
该方法主要使用docker commit命令,其命令格式为docker commit[OPTIONS]CONTAINER[REPOSUTORY[:TAG]] 主要选项包括:
·-a,--author="作者信息"
·-m,--message="提交信息"
·-p,--pause=true提交时暂停容器运行
下面演示如何使用命令创建新的镜像。
首先启动一个镜像,并在其中进行修改操作,例如创建一个test文件,之后退出:
[root@MSJTVL-MJSP-A35 docker]# docker run -t -i ubuntu:12.04 /bin/bash
root@5b098fe766ca:/# touch test
root@5b098fe766ca:/# exit
exit
[root@MSJTVL-MJSP-A35 docker]#
注:记住容器的ID:5b098fe766ca。
此时该容器跟原Ubuntu:12.04镜像相比,已经发生了改变,可以使用docker commit命令来提交一个新的镜像。提交时可以使用ID或者名称来指定容器
[root@MSJTVL-MJSP-A35 docker]# docker commit -m "Added a new file" -a "Docker Tian" 5b098fe766ca test 1a67c55ea39412ca5f64b9b56050683dd5d269ef0c6c037412d1a20b033d6c3d [root@MSJTVL-MJSP-A35 docker]#
此时查看本地镜像列表,即可看到先创建的镜像:
[root@MSJTVL-MJSP-A35 docker]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE test latest 1a67c55ea394 About a minute ago 103.6 MB ubuntu 12.04 8ea067ad7a27 7 weeks ago 103.6 MB unbutn 02.09 8ea067ad7a27 7 weeks ago 103.6 MB
基于本地模板导入
也可以直接从一个操作系统模板文件导入一个镜像。在这里,推荐使用Open VZ提供的模板创建。在OPENVZ模板的下载地址为:https://openvz.org/Download/template/precreated
比如,笔者现在一个下载一个centos的模板压缩包后,可以使用以下的命令导入,并且查看新导入的镜像,已经在本地存在了:
[root@MSJTVL-MJSP-A35 docker]# cat centos-6-x86-minimal.tar.gz |docker import - centos:14.04 2197ed1032f71381bf4746f2423aea5b22f9dacd7407c1794ea36d0b6a70a84e [root@MSJTVL-MJSP-A35 docker]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos 14.04 2197ed1032f7 6 minutes ago 512.1 MB test latest 1a67c55ea394 2 hours ago 103.6 MB ubuntu 12.04 8ea067ad7a27 7 weeks ago 103.6 MB unbutn 02.09 8ea067ad7a27 7 weeks ago 103.6 MB
存出和载入镜像
可以使用docker save 和docker load命令来存出和载入镜像。
存出镜像
如果要存出镜像到本地文件,可以使用docker save命令。例如ubuntu:12.04镜像为文件ubuntu_12.04.tar
[root@MSJTVL-MJSP-A35 docker]# docker save -o ubuntu_12.04.tar ubuntu:12.04 [root@MSJTVL-MJSP-A35 docker]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos 14.04 2197ed1032f7 41 minutes ago 512.1 MB test latest 1a67c55ea394 2 hours ago 103.6 MB ubuntu 12.04 8ea067ad7a27 7 weeks ago 103.6 MB unbutn 02.09 8ea067ad7a27 7 weeks ago 103.6 MB <none> <none> 511136ea3c5a 3 years ago 0 B [root@MSJTVL-MJSP-A35 docker]# ll total 312636 -rw-r--r-- 1 root root 210291971 Feb 9 13:40 centos-6-x86-minimal.tar.gz -rw-r--r-- 1 root root 109515264 Feb 9 14:00 ubuntu_12.04.tar [root@MSJTVL-MJSP-A35 docker]#
导入镜像
可以使用docker load从存出的本地文件中再导入到本地镜像库,例如从文件ubuntu_12.04.tar到入镜像到本地镜像列表,如下所示:
[root@MSJTVL-MJSP-A35 docker]# docker load --input ubuntu_12.04.tar