溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker鏡像的使用方法

發(fā)布時(shí)間:2021-11-04 17:45:44 來源:億速云 閱讀:109 作者:柒染 欄目:建站服務(wù)器

這篇文章將為大家詳細(xì)講解有關(guān)Docker鏡像的使用方法,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

當(dāng)運(yùn)行容器時(shí),使用的鏡像如果在本地中不存在,docker 就會(huì)自動(dòng)從 docker 鏡像倉庫中下載,默認(rèn)是從 Docker Hub 公共鏡像源下載。
下面我們來學(xué)習(xí):
1、管理和使用本地 Docker 主機(jī)鏡像
2、創(chuàng)建鏡像


列出鏡像列表
我們可以使用 docker images 來列出本地主機(jī)上的鏡像。
[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 ~]# 


各個(gè)選項(xiàng)說明:
REPOSITORY:表示鏡像的倉庫源
TAG:鏡像的標(biāo)簽
IMAGE ID:鏡像ID
CREATED:鏡像創(chuàng)建時(shí)間
SIZE:鏡像大小
同一倉庫源可以有多個(gè) TAG,代表這個(gè)倉庫源的不同個(gè)版本,如ubuntu倉庫源里,有15.10、14.04等多個(gè)不同的版本,我們使用 REPOSITORY:TAG 來定義不同的鏡像。
所以,我們?nèi)绻褂冒姹緸?5.10的ubuntu系統(tǒng)鏡像來運(yùn)行容器時(shí),命令如下:
[root@huixuan ~]# docker run -t -i ubuntu:15.10 /bin/bash 
root@38a4ad967a4a:/# 


如果要使用版本為14.04的ubuntu系統(tǒng)鏡像來運(yùn)行容器時(shí),命令如下:
[root@huixuan ~]# docker run -t -i ubuntu:14.04 /bin/bash 


如果你不指定一個(gè)鏡像的版本標(biāo)簽,例如你只使用 ubuntu,docker 將默認(rèn)使用 ubuntu:latest 鏡像。


獲取一個(gè)新的鏡像
當(dāng)我們?cè)诒镜刂鳈C(jī)上使用一個(gè)不存在的鏡像時(shí) Docker 就會(huì)自動(dòng)下載這個(gè)鏡像。如果我們想預(yù)先下載這個(gè)鏡像,我們可以使用 docker pull 命令來下載它。
[root@huixuan ~]# docker pull ubuntu:13.10


下載完成后,我們可以直接使用這個(gè)鏡像來運(yùn)行容器。


查找鏡像
我們可以從 Docker Hub 網(wǎng)站來搜索鏡像,Docker Hub 網(wǎng)址為: https://hub.docker.com/
我們也可以使用 docker search 命令來搜索鏡像。比如我們需要一個(gè)httpd的鏡像來作為我們的web服務(wù)。我們可以通過 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官方發(fā)布


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


下載完成后,我們就可以使用這個(gè)鏡像了。
[root@huixuan ~]# docker run httpd


創(chuàng)建鏡像
當(dāng)我們從docker鏡像倉庫中下載的鏡像不能滿足我們的需求時(shí),我們可以通過以下兩種方式對(duì)鏡像進(jìn)行更改。
1.從已經(jīng)創(chuàng)建的容器中更新鏡像,并且提交這個(gè)鏡像
2.使用 Dockerfile 指令來創(chuàng)建一個(gè)新的鏡像


更新鏡像
更新鏡像之前,我們需要使用鏡像來創(chuàng)建一個(gè)容器。
[root@huixuan ~]# docker run -t -i ubuntu:15.10 /bin/bash
root@493da1af5d63:/# 


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


各個(gè)參數(shù)說明:
-m:提交的描述信息
-a:指定鏡像作者
493da1af5d63:容器ID
tonykorn97/ubuntu:v2:指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名
我們可以使用 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 來啟動(dòng)一個(gè)容器
[root@huixuan ~]# docker run -t -i tonykorn97/ubuntu:v2 /bin/bash
root@694ecac26845:/# 


構(gòu)建鏡像
我們使用命令 docker build , 從零開始來創(chuàng)建一個(gè)新的鏡像。為此,我們需要?jiǎng)?chuàng)建一個(gè) Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構(gòu)建我們的鏡像。
[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 ~]# 


每一個(gè)指令都會(huì)在鏡像上創(chuàng)建一個(gè)新的層,每一個(gè)指令的前綴都必須是大寫的。
第一條FROM,指定使用哪個(gè)鏡像源
RUN 指令告訴docker 在鏡像內(nèi)執(zhí)行命令,安裝了什么。。。
然后,我們使用 Dockerfile 文件,通過 docker build 命令來構(gòu)建一個(gè)鏡像。


[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 ~]# 

參數(shù)說明:
-t :指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名
. :Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對(duì)路徑
使用docker images 查看創(chuàng)建的鏡像已經(jīng)在列表中存在,鏡像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 ~]# 

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

從上面看到新鏡像已經(jīng)包含我們創(chuàng)建的用戶tonykorn97

設(shè)置鏡像標(biāo)簽
我們可以使用 docker tag 命令,為鏡像添加一個(gè)新的標(biāo)簽。
[root@huixuan ~]# docker tag 3a42651974ec tonykorn97/centos:dev


docker tag 鏡像ID,這里是 3a42651974ec ,用戶名稱、鏡像源名(repository name)和新的標(biāo)簽名(tag)。
使用 docker images 命令可以看到,ID為860c279d2fec的鏡像多一個(gè)標(biāo)簽。


[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 ~]# 

關(guān)于Docker鏡像的使用方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI