Docker學習次日

CentOS 系列安裝 Docker

Docker 支持 CentOS6 及之後的版本。linux

CentOS6

對於 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

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 鏡像

鏡像是 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

在列出信息中,能夠看到幾個字段信息

  • 來自於哪一個倉庫,好比 ubuntu
  • 鏡像的標記,好比 12.04
  • 它的 ID 號(惟一)
  • 建立時間
  • 鏡像大小

其中鏡像的 ID 惟一標識了鏡像,注意到 ubuntu:12.04 和 ubuntu:02.09 具備相同的鏡像 ID,說明它們其實是同一鏡像。

TAG 信息用來標記來自同一個倉庫的不一樣鏡像。例如 ubuntu 倉庫中有多個鏡像,經過 TAG 信息來區分發行版本,例如 10.0412.0412.1013.0414.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 
相關文章
相關標籤/搜索