docker學習4:Docker 映象使用

tonykorn97發表於2018-05-01


參考:http://www.runoob.com/docker/docker-image-usage.html




當執行容器時,使用的映象如果在本地中不存在,docker 就會自動從 docker 映象倉庫中下載,預設是從 Docker Hub 公共映象源下載。
下面我們來學習:
1、管理和使用本地 Docker 主機映象
2、建立映象


列出映象列表
我們可以使用 docker images 來列出本地主機上的映象。
[root@huixuan ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world       latest              e38bc07ac18e        2 weeks ago         1.85 kB
docker.io/ubuntu            15.10               9b9cb95443b5        21 months ago       137 MB
docker.io/training/webapp   latest              6fae60ef3446        2 years ago         349 MB
[root@huixuan ~]# 


各個選項說明:
REPOSITORY:表示映象的倉庫源
TAG:映象的標籤
IMAGE ID:映象ID
CREATED:映象建立時間
SIZE:映象大小
同一倉庫源可以有多個 TAG,代表這個倉庫源的不同個版本,如ubuntu倉庫源裡,有15.10、14.04等多個不同的版本,我們使用 REPOSITORY:TAG 來定義不同的映象。
所以,我們如果要使用版本為15.10的ubuntu系統映象來執行容器時,命令如下:
[root@huixuan ~]# docker run -t -i ubuntu:15.10 /bin/bash 
root@38a4ad967a4a:/# 


如果要使用版本為14.04的ubuntu系統映象來執行容器時,命令如下:
[root@huixuan ~]# docker run -t -i ubuntu:14.04 /bin/bash 


如果你不指定一個映象的版本標籤,例如你只使用 ubuntu,docker 將預設使用 ubuntu:latest 映象。


獲取一個新的映象
當我們在本地主機上使用一個不存在的映象時 Docker 就會自動下載這個映象。如果我們想預先下載這個映象,我們可以使用 docker pull 命令來下載它。
[root@huixuan ~]# docker pull ubuntu:13.10


下載完成後,我們可以直接使用這個映象來執行容器。


查詢映象
我們可以從 Docker Hub 網站來搜尋映象,Docker Hub 網址為:
我們也可以使用 docker search 命令來搜尋映象。比如我們需要一個httpd的映象來作為我們的web服務。我們可以透過 docker search 命令搜尋 httpd 來尋找適合我們的映象。


[root@huixuan ~]# docker search httpd
INDEX       NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/httpd                                   The Apache HTTP Server Project                  1668      [OK]       
docker.io   docker.io/hypriot/rpi-busybox-httpd               Raspberry Pi compatible Docker Image with ...   40                   
docker.io   docker.io/centos/httpd                                                                            17                   [OK]
docker.io   docker.io/centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or b...   12                   
docker.io   docker.io/armhf/httpd                             The Apache HTTP Server Project                  8                    
docker.io   docker.io/macadmins/netboot-httpd                 use in combination with bruienne/bsdpy          5                    [OK]
docker.io   docker.io/lolhens/httpd                           Apache httpd 2 Server                           2                    [OK]
docker.io   docker.io/salim1983hoop/httpd24                   Dockerfile running apache config                2                    [OK]
docker.io   docker.io/epflidevelop/os-wp-httpd                WP httpd                                        1                    [OK]
docker.io   docker.io/fboaventura/dckr-httpd                  Small footprint http server to use with ot...   1                    [OK]
docker.io   docker.io/lead4good/httpd-fpm                     httpd server which connects via fcgi proxy...   1                    [OK]
docker.io   docker.io/rgielen/httpd-image-simple              Docker image for simple Apache httpd based...   1                    [OK]
docker.io   docker.io/tplatform/aws-linux-httpd24-php71-fpm   aws-linux-httpd24-php71-fpm                     1                    [OK]
docker.io   docker.io/buzzardev/httpd                         Based on the official httpd image               0                    [OK]
docker.io   docker.io/cilium/demo-httpd                                                                       0                    
docker.io   docker.io/dockerpinata/httpd                                                                      0                    
docker.io   docker.io/fintaffy/fintaffy-httpd                                                                 0                    
docker.io   docker.io/interlutions/httpd                      httpd docker image with debian-based confi...   0                    [OK]
docker.io   docker.io/manageiq/httpd                          Container with httpd, built on CentOS for ...   0                    [OK]
docker.io   docker.io/manasip/httpd                                                                           0                    
docker.io   docker.io/ppc64le/httpd                           The Apache HTTP Server Project                  0                    
docker.io   docker.io/publici/httpd                           httpd:latest                                    0                    [OK]
docker.io   docker.io/tplatform/aws-linux-httpd24-php70       aws-linux-httpd24-php70                         0                    [OK]
docker.io   docker.io/tplatform/aws-linux-httpd24-php71       aws-linux-httpd24-php71                         0                    [OK]
docker.io   docker.io/trollin/httpd                                                                           0                    
[root@huixuan ~]# 


NAME:映象倉庫源的名稱
DESCRIPTION:映象的描述
OFFICIAL:是否docker官方釋出




拖取映象
我們決定使用上圖中的httpd 官方版本的映象,使用命令 docker pull 來下載映象。
[root@huixuan ~]# docker pull httpd


下載完成後,我們就可以使用這個映象了。
[root@huixuan ~]# docker run httpd


建立映象
當我們從docker映象倉庫中下載的映象不能滿足我們的需求時,我們可以透過以下兩種方式對映象進行更改。
1.從已經建立的容器中更新映象,並且提交這個映象
2.使用 Dockerfile 指令來建立一個新的映象




更新映象
更新映象之前,我們需要使用映象來建立一個容器。
[root@huixuan ~]# docker run -t -i ubuntu:15.10 /bin/bash
root@493da1af5d63:/# 


在執行的容器內使用 apt-get update 命令進行更新。
在完成操作之後,輸入 exit命令來退出這個容器。
此時ID為493da1af5d63的容器,是按我們的需求更改的容器。我們可以透過命令 docker commit來提交容器副本。
[root@huixuan ~]# docker commit -m="has update" -a="tonykorn97" 493da1af5d63 tonykorn97/ubuntu:v2
sha256:6bb0f7a6d1e68fa93197761f3fa86a18397b1dfff563a0405e48cc833d0b3112


各個引數說明:
-m:提交的描述資訊
-a:指定映象作者
493da1af5d63:容器ID
tonykorn97/ubuntu:v2:指定要建立的目標映象名
我們可以使用 docker images 命令來檢視我們的新映象 tonykorn97/ubuntu:v2:


[root@huixuan ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED              SIZE
tonykorn97/ubuntu           v2                  6bb0f7a6d1e6        2 seconds ago        137 MB
<none>                      <none>              3248dea71f18        About a minute ago   137 MB
docker.io/ubuntu            14.04               8cef1fa16c77        3 days ago           223 MB
docker.io/hello-world       latest              e38bc07ac18e        2 weeks ago          1.85 kB
docker.io/ubuntu            15.10               9b9cb95443b5        21 months ago        137 MB
docker.io/training/webapp   latest              6fae60ef3446        2 years ago          349 MB
[root@huixuan ~]# 




使用我們的新映象 tonykorn97/ubuntu 來啟動一個容器
[root@huixuan ~]# docker run -t -i tonykorn97/ubuntu:v2 /bin/bash
root@694ecac26845:/# 


構建映象
我們使用命令 docker build , 從零開始來建立一個新的映象。為此,我們需要建立一個 Dockerfile 檔案,其中包含一組指令來告訴 Docker 如何構建我們的映象。
[root@huixuan ~]# cat Dockerfile 
FROM    centos
MAINTAINER      Fisher "tonykorn97@sudops.com"


RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd tonykorn97
RUN     /bin/echo 'tonykorn97:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
[root@huixuan ~]# 




每一個指令都會在映象上建立一個新的層,每一個指令的字首都必須是大寫的。
第一條FROM,指定使用哪個映象源
RUN 指令告訴docker 在映象內執行命令,安裝了什麼。。。
然後,我們使用 Dockerfile 檔案,透過 docker build 命令來構建一個映象。


[root@huixuan ~]# docker build -t docker.io/centos .
Sending build context to Docker daemon  42.5 kB
Step 1/9 : FROM centos
 ---> e934aafc2206
Step 2/9 : MAINTAINER Fisher "tonykorn97@sudops.com"
 ---> Running in e8fba274a04f
 ---> a957802c0f10
Removing intermediate container e8fba274a04f
Step 3/9 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Running in 9b6d82512651


 ---> 91895d25b7ca
Removing intermediate container 9b6d82512651
Step 4/9 : RUN useradd tonykorn97
 ---> Running in ca2a783aa01f


 ---> da8e8eb44cb9
Removing intermediate container ca2a783aa01f
Step 5/9 : RUN /bin/echo 'tonykorn97:123456' |chpasswd
 ---> Running in bcfd276a69cc


 ---> e9bef27837e4
Removing intermediate container bcfd276a69cc
Step 6/9 : RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
 ---> Running in fb07b34deefd


 ---> b34b2ad1c65b
Removing intermediate container fb07b34deefd
Step 7/9 : EXPOSE 22
 ---> Running in a580e3c0df37
 ---> ae38f15b66c3
Removing intermediate container a580e3c0df37
Step 8/9 : EXPOSE 80
 ---> Running in b3e04bf32806
 ---> 8964d002a4a9
Removing intermediate container b3e04bf32806
Step 9/9 : CMD /usr/sbin/sshd -D
 ---> Running in 804574e55fdc
 ---> 3a42651974ec
Removing intermediate container 804574e55fdc
Successfully built 3a42651974ec
[root@huixuan ~]# 






引數說明:
-t :指定要建立的目標映象名
. :Dockerfile 檔案所在目錄,可以指定Dockerfile 的絕對路徑
使用docker images 檢視建立的映象已經在列表中存在,映象ID為3a42651974ec
[root@huixuan ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos            latest              3a42651974ec        42 seconds ago      199 MB
tonykorn97/ubuntu           v2                  6bb0f7a6d1e6        27 minutes ago      137 MB
<none>                      <none>              3248dea71f18        29 minutes ago      137 MB
docker.io/ubuntu            14.04               8cef1fa16c77        3 days ago          223 MB
docker.io/hello-world       latest              e38bc07ac18e        2 weeks ago         1.85 kB
docker.io/centos            <none>              e934aafc2206        3 weeks ago         199 MB
docker.io/ubuntu            15.10               9b9cb95443b5        21 months ago       137 MB
docker.io/training/webapp   latest              6fae60ef3446        2 years ago         349 MB
[root@huixuan ~]# 




我們可以使用新的映象來建立容器
[root@huixuan ~]# docker run -t -i centos /bin/bash
[root@6263f2eb5f6c /]# id tonykorn97
uid=1000(tonykorn97) gid=1000(tonykorn97) groups=1000(tonykorn97)
[root@6263f2eb5f6c /]# 


從上面看到新映象已經包含我們建立的使用者tonykorn97




設定映象標籤
我們可以使用 docker tag 命令,為映象新增一個新的標籤。
[root@huixuan ~]# docker tag 3a42651974ec tonykorn97/centos:dev


docker tag 映象ID,這裡是 3a42651974ec ,使用者名稱稱、映象源名(repository name)和新的標籤名(tag)。
使用 docker images 命令可以看到,ID為860c279d2fec的映象多一個標籤。


[root@huixuan ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos            latest              3a42651974ec        3 minutes ago       199 MB
tonykorn97/centos           dev                 3a42651974ec        3 minutes ago       199 MB
tonykorn97/ubuntu           v2                  6bb0f7a6d1e6        30 minutes ago      137 MB
<none>                      <none>              3248dea71f18        32 minutes ago      137 MB
docker.io/ubuntu            14.04               8cef1fa16c77        3 days ago          223 MB
docker.io/hello-world       latest              e38bc07ac18e        2 weeks ago         1.85 kB
docker.io/centos            <none>              e934aafc2206        3 weeks ago         199 MB
docker.io/ubuntu            15.10               9b9cb95443b5        21 months ago       137 MB
docker.io/training/webapp   latest              6fae60ef3446        2 years ago         349 MB
[root@huixuan ~]# 




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-2153590/,如需轉載,請註明出處,否則將追究法律責任。

相關文章