Docker 支持 CentOS6 及之後的版本。linux
對於 CentOS6,可使用 EPEL 庫安裝 Docker,命令以下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 系統 CentOS-Extras
庫中已帶 Docker,能夠直接安裝:ubuntu
$ sudo yum install docker
安裝以後啓動 Docker 服務,並讓它隨系統啓動自動加載。centos
[root@MSJTVL-MJSP-A35 opt]# service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
[root@MSJTVL-MJSP-A35 opt]# chkconfig docker on
鏡像是 Docker 的三大組件之一bash
Docker 運行容器前須要本地存在對應的鏡像,若是鏡像不存在本地,Docker 會從鏡像倉庫下載(默認是 Docker Hub 公共註冊服務器中的倉庫)。服務器
下面介紹:oop
可使用 docker pull
命令來從倉庫獲取所須要的鏡像。ui
下面的例子將從 Docker Hub 倉庫下載一個 Ubuntu 12.04 操做系統的鏡像。centos7
[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
下載過程當中,會輸出獲取鏡像的每一層信息。spa
該命令實際上至關於 $ 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
在列出信息中,能夠看到幾個字段信息
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