日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker之容器数据卷

發(fā)布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker之容器数据卷 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

1.使用volume添加數(shù)據(jù)卷

2.dockerFile添加數(shù)據(jù)卷

3.數(shù)據(jù)卷容器

4.dockerFile解析

4.1dockerfile解析過程

4.2 dockerfile保留關鍵字


介紹docker數(shù)據(jù)卷之前,帶著幾個疑問?

  • 數(shù)據(jù)卷是什么
  • 數(shù)據(jù)卷能干什么
  • 數(shù)據(jù)卷
  • 數(shù)據(jù)卷容器

? ? ? ?比如在dcoker中跑的程序等需要將結果的保存下來,因為使用的是pc,不是服務器,不可能一直開機運行,就需要在docker關閉的時候就需要把這部分數(shù)據(jù)保存下來,此時就需要把這部分數(shù)據(jù)進行持久化操作,那保存在哪里呢。類似我們在內(nèi)存中數(shù)據(jù)有時需要寫入到硬盤或者數(shù)據(jù)庫中,那一斷電內(nèi)存中就沒有數(shù)據(jù),但是這樣就是將數(shù)據(jù)永久的保存下來了,那在docker中一樣,docker中就像是在內(nèi)存中的數(shù)據(jù),運行的時候在,關閉容器的就沒有了,此時就需要容器數(shù)據(jù)卷持久化保存。數(shù)據(jù)卷是一個可供一個或多個容器使用的特殊目錄,它繞過UFS,可以提供很多有用的特性:

- 數(shù)據(jù)卷可以在容器之間共享和重用

- 對數(shù)據(jù)卷的修改會立馬生效

- 對數(shù)據(jù)卷的更新,不會影響鏡像

- 數(shù)據(jù)卷默認會一直存在,即使容器被刪除。

1.使用volume添加數(shù)據(jù)卷

volumes:Docker管理宿主機文件系統(tǒng)的一部分,默認位于 /var/lib/docker/volumes 目錄中;

在宿主機中 [root@localhost /]# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var在容器中,當前有centos這個鏡像,啟動并進入到容器內(nèi) [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest c43a65faae57 2 days ago 667MB nginx latest 62d49f9bab67 4 weeks ago 133MB hello-world latest d1165f221234 2 months ago 13.3kB centos latest 300e315adb2f 5 months ago 209MB [root@localhost ~]# docker run -it centos /bin/bash [root@429cce9277be /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

文件如上所示,宿主機和容器內(nèi)均無myDataVolumes文件,因此新建一個文件,先了解下如下命令

docker run -it -v/宿主機絕對路徑目錄:容器內(nèi)目錄 鏡像名 [root@localhost /]# docker run -it -v /myDataVolume:/dataVolumeContainer centos /bin/bash

此時在宿主機和容器中分別生成了myDataVolume和dataVolumeContainer文件,這樣就實現(xiàn)了宿主機和容器之間的掛載。至于實現(xiàn)了數(shù)據(jù)的共享和對接,先用實驗驗證這樣才更有說服力;記錄docker id。

[root@localhost /]# docker inspect d0179cc8f199 ....."HostConfig": {"Binds": ["/myDataVolume:/dataVolumeContainer"], .....

?其中有一段描述如上所示.那容器和宿主之間的數(shù)據(jù)到底如何共享呢?

現(xiàn)在在主機中新建一個文件,接著如容器中查看

[root@localhost /]# cd myDataVolume/ [root@localhost myDataVolume]# ls [root@localhost myDataVolume]# touch host.txt [root@d0179cc8f199 /]# ls bin dataVolumeContainer dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@d0179cc8f199 /]# cd dataVolumeContainer/ [root@d0179cc8f199 dataVolumeContainer]# ls host.txt

發(fā)現(xiàn)容器中確實也新增了數(shù)據(jù),接著在容器的host.txt寫入數(shù)據(jù);同時在容器中新建一個文件

[root@d0179cc8f199 dataVolumeContainer]# vi host.txt [root@d0179cc8f199 dataVolumeContainer]# cat host.txt container update [root@d0179cc8f199 dataVolumeContainer]# touch container.txt [root@d0179cc8f199 dataVolumeContainer]# ls container.txt host.txt

現(xiàn)在在宿主機中進行查閱

container.txt host.txt [root@localhost myDataVolume]# cat host.txt container update

那如果容器退出后,修改宿主機修改數(shù)據(jù)是否能實現(xiàn)同步呢?

[root@d0179cc8f199 dataVolumeContainer]# exit exit 注意:CTRL+P+Q是臨時退出容器 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

在宿主機新增一個文件host02.txt,同時在host.txt做如下更新,新增一個host update,那此時容器中是否會同步更新呢,注意此時容器在上一步已經(jīng)退出了

[root@localhost myDataVolume]# touch host02.txt [root@localhost myDataVolume]# ls host02.txt host.txt [root@localhost myDataVolume]# vi host.txt [root@localhost myDataVolume]# cat host.txt container update host update

使用docker命令查看最近運行的容器,可以查看指定數(shù)量的容器,也可以查看上一次運行的容器

[root@localhost ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0179cc8f199 centos "/bin/bash" 21 minutes ago Exited (0) 4 minutes ago jovial_keldysh 1c381dfbf5b1 centos "/bin/bash" 21 minutes ago Exited (0) 21 minutes ago sad_mayer [root@localhost ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0179cc8f199 centos "/bin/bash" 21 minutes ago Exited (0) 5 minutes ago jovial_keldysh [root@localhost ~]#

這里獲取到上一次運行的容器的id信息

[root@localhost ~]# docker start d0179cc8f199 //啟動容器 d0179cc8f199 [root@localhost ~]# docker attach d0179cc8f199 //重新進入容器 [root@d0179cc8f199 /]# ls bin dataVolumeContainer dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@d0179cc8f199 /]# cd dataVolumeContainer/ [root@d0179cc8f199 dataVolumeContainer]# ls container.txt host.txt host02.txt [root@d0179cc8f199 dataVolumeContainer]# cat host.txt container update host update

發(fā)現(xiàn)只要實現(xiàn)了宿主機和容器之間實現(xiàn)了數(shù)據(jù)掛載,此時無論容器是否停止退出,數(shù)據(jù)都會同步

注意:對于使用docker inspect dockerID有 VolumesRW的,如果是false,這里是讀寫控制的,此時建立數(shù)據(jù)卷需要使用

docker run -it -v /宿主機絕對路徑:/容器絕對路徑 :ro? 鏡像名;一般這種情況是主機可以向共享數(shù)據(jù)讀寫,但是容器只能向共享數(shù)據(jù)進行讀操作。

2.dockerFile添加數(shù)據(jù)卷

dockerFile可以理解為鏡像這個模板的描述文件,如何理解呢?在dockerhub上

包含from openjdk..... makedir .... EXPOSE 8080等相關的描述信息,因此所謂的dockerFile就是按照自己的一套語法規(guī)則描述鏡像的一段“文字”。這里創(chuàng)建一個Dockerfile,加入如下內(nèi)容

[root@localhost mydocker]# vi Dockerfile [root@localhost mydocker]# cat Dockerfile # volume test FROM centos //類似extend繼承自哪里 VOLUME ["/dataVolumeContainer1","/dataVolumContainer2"] //類似上文中的-v 宿主機絕對路徑,但是使用命令的不支持這種[]的操作,因為其有遷移性 CMD echo "finished,..........success1" CMD /bin/bash

接下來使用創(chuàng)建的Dockerfile構建鏡像,構建的命令如下:

docker build -f Dockerfile文件的目錄? -t 指定命名空間/鏡像名稱?.

[root@localhost mydocker]# ls Dockerfile[root@localhost mydocker]# docker build -f /mydocker/Dockerfile -t rhz/centos . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos---> 300e315adb2f Step 2/4 : VOLUME ["/dataVolumeContainer1","/dataVolumContainer2"]---> Running in 58c7e0ad8386 Removing intermediate container 58c7e0ad8386---> 8885157a1c04 Step 3/4 : CMD echo "finished,..........success1"---> Running in ffb77e9d3f73 Removing intermediate container ffb77e9d3f73---> 8ea2c4f80712 Step 4/4 : CMD /bin/bash---> Running in 6d5f23182e9f Removing intermediate container 6d5f23182e9f---> 381549de3982 Successfully built 381549de3982 Successfully tagged rhz/centos:latest

一層一層的疊加,直到build成功

[root@localhost mydocker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE rhz/centos latest 381549de3982 2 minutes ago 209MB

運行創(chuàng)建的rhz/centos鏡像

[root@localhost mydocker]# docker run -it rhz/centos [root@ac6a8883a59f /]# ls bin dataVolumeContainer1 etc lib lost+found mnt proc run srv tmp var dataVolumContainer2 dev home lib64 media opt root sbin sys usr

發(fā)現(xiàn)這里一次性在容器內(nèi)創(chuàng)建了兩個文件-即創(chuàng)建了兩個目錄卷。所以Dockerfile可以創(chuàng)建多個文件,創(chuàng)建文件的目錄就是容器和宿主機進行數(shù)據(jù)的交互和同步的“位置”

[root@ac6a8883a59f /]# cd dataVolumeContainer1/ [root@ac6a8883a59f dataVolumeContainer1]# ls [root@ac6a8883a59f dataVolumeContainer1]# touch contain01.txt

在宿主機的一個dataVolumeContainer1創(chuàng)建文件,在使用命令創(chuàng)建的時候可以指定宿主機目錄,但是這里并沒有指定宿主機的目錄,這個如果不指定會有一個默認的目錄

[root@localhost ~]# docker inspect ac6a8883a59f ...."Mounts": [{"Type": "volume","Name": "66b75d5d855989cc49e63335918265609d0bb3fb3099a7e834a1fb513febe817","Source": "/var/lib/docker/volumes/66b75d5d855989cc49e63335918265609d0bb3fb3099a7e834a1fb513febe817/_data","Destination": "/dataVolumeContainer1","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "volume","Name": "36940f772f78dd2baa22c2be9a300516fc0bd6233ba7eb49b5dfb2cb3c74a8d1","Source": "/var/lib/docker/volumes/36940f772f78dd2baa22c2be9a300516fc0bd6233ba7eb49b5dfb2cb3c74a8d1/_data","Destination": "/dataVolumContainer2","Driver": "local","Mode": "","RW": true,"Propagation": ""}] ....

這里記錄了對應宿主機的目錄為/var/lib/docker/volumes....,其次這里的讀寫為true。進入到宿主機中在宿主機的目錄下發(fā)現(xiàn)也有container01.txt文件。

3.數(shù)據(jù)卷容器

? ? ? 剛才介紹了數(shù)據(jù)卷的如何實現(xiàn)容器和宿主機之間的進行的共享,那什么是數(shù)據(jù)卷容器呢?使用? --volume-fron

? ? ?命名的容器掛載數(shù)據(jù)卷,其他容器通過掛載這個(父容器)實現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,稱為數(shù)據(jù)卷容器。結合上一步創(chuàng)建的示例進行介紹

上一步 創(chuàng)建了一個命名空間為rhz鏡像為centos的鏡像

[root@localhost _data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE rhz/centos latest 381549de3982 8 hours ago 209MB

同時已經(jīng)創(chuàng)建了容器卷/dataVolumeContainer1和/dataVolumeContainer1

[root@139c5588384f /]# ls bin dataVolumeContainer1 etc lib lost+found mnt proc run srv tmp var dataVolumContainer2 dev home lib64 media opt root sbin sys usr

退出容器

[root@localhost _data]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost _data]# docker run -it --name dc01 rhz/centos //啟動容器,并使用--name設置一個指定名稱,類似于別名 [root@098a7d43b148 dataVolumContainer2]# touch dc01_add.txt //創(chuàng)建一個文件共后續(xù)使用 [root@098a7d43b148 dataVolumContainer2]# [root@localhost _data]# //按下cctrl+p+q暫時離開容器 [root@localhost _data]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 098a7d43b148 rhz/centos "/bin/sh -c /bin/bash" 4 minutes ago Up 3 minutes dc01 //容器進程中展示為的指定的名稱dc01,如果不指定名稱,則run容器的時候會任意生成一個名稱

將剛才創(chuàng)建的dc01作為父容器,是的dc02和dc03繼承于dc01

[root@localhost _data]# docker run -it --name dc02 --volumes-from dc01 rhz/centos [root@d0166e9209b9 /]# ls bin dataVolumeContainer1 etc lib lost+found mnt proc run srv tmp var dataVolumContainer2 dev home lib64 media opt root sbin sys usr

自然這里從容器dc01派生的dc02,文件,屬性和dc01一致,那dataVolumContainer2中年是否也會有上一步創(chuàng)建的文件dc01_add.txt呢?

[root@d0166e9209b9 /]# cd dataVolumContainer2/ [root@d0166e9209b9 dataVolumContainer2]# ls dc01_add.txt [root@d0166e9209b9 dataVolumContainer2]# touch dc02_add.txt

接著在宿主機查看當前運行的容器進程

[root@localhost volumes]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0166e9209b9 rhz/centos "/bin/sh -c /bin/bash" 3 minutes ago Up 3 minutes dc02 098a7d43b148 rhz/centos "/bin/sh -c /bin/bash" 11 minutes ago Up 10 minutes dc01

同樣創(chuàng)建一個繼承在dc01的容器dc03并在dc03的dataVolumContainer中新增一個文件

[root@localhost _data]# docker run -it --name dc03 --volumes-from dc01 rhz/centos [root@de8b2507ddf5 /]# cd dataVolumContainer2/ [root@de8b2507ddf5 dataVolumContainer2]# ls dc01_add.txt dc02_add.txt [root@de8b2507ddf5 dataVolumContainer2]# touch dc03_add.txt

同樣在宿主機查詢當前運行的容器進程

[root@localhost volumes]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES de8b2507ddf5 rhz/centos "/bin/sh -c /bin/bash" About a minute ago Up About a minute dc03 d0166e9209b9 rhz/centos "/bin/sh -c /bin/bash" 9 minutes ago Up 8 minutes dc02 098a7d43b148 rhz/centos "/bin/sh -c /bin/bash" 17 minutes ago Up 16 minutes dc01 [root@localhost volumes]# docker attach dc01 [root@098a7d43b148 dataVolumContainer2]# ls dc01_add.txt dc02_add.txt dc03_add.txt

這樣繼承的容器,實現(xiàn)了容器卷的共享和繼承功能。那如果刪除刪除了父容器dc01,那dc02和dc03還可以訪問嗎?

[root@localhost volumes]# docker rm -f dc01 dc01 [root@localhost volumes]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES de8b2507ddf5 rhz/centos "/bin/sh -c /bin/bash" 5 minutes ago Up 5 minutes dc03 d0166e9209b9 rhz/centos "/bin/sh -c /bin/bash" 13 minutes ago Up 13 minutes dc02 [root@localhost volumes]# docker attach dc02 [root@d0166e9209b9 dataVolumContainer2]# ls dc01_add.txt dc02_add.txt dc03_add.txt [root@d0166e9209b9 dataVolumContainer2]# touch dc02_update.txt

那dc03中是否有呢?

[root@localhost volumes]# docker attach dc03 [root@de8b2507ddf5 dataVolumContainer2]# ls dc01_add.txt dc02_add.txt dc02_update.txt dc03_add.txt

所以,容器之間配置信息的傳遞,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。

4.dockerFile解析

回顧下前面使用dockerFile流程

  • 按照dockerfile規(guī)則手動編寫dockerfile文件
  • docker build構建鏡像
  • run運行

但是上面介紹的很粗略,dcokerfile是用來構建docker鏡像的構建文件,是由一系列命令和參數(shù)構成的腳本文件。那構建的步驟就是上面介紹的,dockerfile編寫docker build ,docker run

那dockerfile到底是什么樣子的呢,結合centos介紹一下

[root@localhost /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE rhz/centos latest 381549de3982 9 hours ago 209MB centos latest 300e315adb2f 5 months ago 209MB

在hub.docker.com中,搜索centos

?

FROM scratch //所有鏡像的祖先,類似object類 ADD centos-7-x86_64-docker.tar.xz /LABEL \ //標簽org.label-schema.schema-version="1.0" \org.label-schema.name="CentOS Base Image" \org.label-schema.vendor="CentOS" \org.label-schema.license="GPLv2" \org.label-schema.build-date="20201113" \org.opencontainers.image.title="CentOS Base Image" \org.opencontainers.image.vendor="CentOS" \org.opencontainers.image.licenses="GPL-2.0-only" \org.opencontainers.image.created="2020-11-13 00:00:00+00:00"CMD ["/bin/bash"] //使用bin/bash執(zhí)行,所說在執(zhí)行centos的時候,加不加/bin/bash都可以,因為人家自帶了

4.1dockerfile解析過程

? ? ? 所謂docker解析過程就是類似java或python類中,先加載什么,接著加載什么的含義。依然先介紹下dockerfile的規(guī)則,上面的centos的dockerfile中看出

  • 每條保留指令都必須為大寫字母,且后面接著一條或者多條指令
  • 指令按照從上往下的順序執(zhí)行
  • #表示注釋
  • 每條指令都會創(chuàng)建一個新的鏡像層,并對鏡像進行提交

DockerFile的大致流程如下:

  • docker從基礎鏡像運行一個容器
  • 執(zhí)行一條指令并對容器進行修改
  • 執(zhí)行類似docekr commit命令的操作提交一個新的鏡像層
  • docker基于剛才提交的鏡像再創(chuàng)建一個新的容器
  • 執(zhí)行dockerfile中的下一條指令

4.2 dockerfile保留關鍵字

? ? ? ? ? 目前主要的關鍵字如下所示:

FROM //基礎鏡像,當前新的鏡像是基于哪個鏡像“派生”的 MAINTAINER //鏡像維護者的姓名和郵箱 RUN //容器構建的時候運行的命令 EXPOSE //暴露鏡像對外的端口,如果tomcat中的 8080 WORKDIR //指定在創(chuàng)建容器后,終端默認登錄進入的目錄,類似進入登錄進入linux中的~目錄 ENV //用來在構建過程中設置環(huán)境變量 ADD //新增一個包并且解壓縮 COPY //拷貝一個包 VOLUME //容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化 CMD //指定容器啟動時運行的命令 ,只有最后一個生效,如果文件中有多個cmd命令,則最后一個生效 ENTRYPOINT //指定容器啟動時運行的命令,類似命令追加,多條都生效 ONBUILD //當構建一個被繼承的dockerfile時運行命令,父鏡像在被子鏡像繼承后父鏡像的onbuild會被觸發(fā),比如一個鏡像images_father,另一個鏡像在dockerfile中FROM images_father,此時在build的時候就會觸發(fā)

結合上述的關鍵字運行實際示例介紹下。

對于常見的 FROM SCRATCH,Docker Hub中99%的鏡像都是通過在base鏡像中安裝和配置需要的軟件構建出來的

[root@localhost /]# docker rm -f $(docker ps -q)

刪除了所有docker容器,這里再次啟動容器

[root@localhost /]# docker run -it centos /bin/bash [root@88bebcdce99d /]# vim rhx.txt bash: vim: command not found [root@88bebcdce99d /]# ifconfig bash: ifconfig: command not found

這里發(fā)現(xiàn)進入的目錄為容器的/目錄,這個centos是從阿里云上拉取的,只有幾百M,但是因為只有基礎的功能,導致沒有很多命令不支持,因此這里想構建一個支持這些命令的鏡像。

[root@localhost mydocker]# vim Dockerfile2 [root@localhost mydocker]# ls Dockerfile Dockerfile2

同時在Dockerfile2中新增如下內(nèi)容

[root@localhost mydocker]# cat Dockerfile2FROM centosmaintainer rhx<rhx@123.com> //作者郵箱ENV MYPATH /usr/local //設置環(huán)境變量 WORKDIR $MYPATHRUN yum -y install vim RUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATH CMD echo "success------ok" CMD /bin/bash

接著構建包含如上命令的centos鏡像

[root@localhost mydocker]# docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .//-t 給鏡像加一個tag //docker build -t ImageName:TagName dir,其中Dockerfile所在目錄,這里.表示當前目錄 //-f :指定要使用的Dockerfile路徑

這里展示部分構建的信息

Complete! Removing intermediate container 3a2dda1457bc---> 864561d93c2d Step 7/10 : EXPOSE 80---> Running in 58a04c6e7115 Removing intermediate container 58a04c6e7115---> 4ade6abc039a Step 8/10 : CMD echo $MYPATH---> Running in 448013640f1b Removing intermediate container 448013640f1b---> 3b9c6cca3540 Step 9/10 : CMD echo "success------ok"---> Running in 489d5d540d09 Removing intermediate container 489d5d540d09---> e3ed1f7c28b8 Step 10/10 : CMD /bin/bash---> Running in d3af2ecd7cf9 Removing intermediate container d3af2ecd7cf9---> 4c74332b0082 Successfully built 4c74332b0082 Successfully tagged mycentos:1.3

查看一下鏡像信息

[root@localhost mydocker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mycentos 1.3 4c74332b0082 About a minute ago 291MB

以剛才創(chuàng)建的鏡像生成容器

[root@localhost mydocker]# docker run -it mycentos:1.3 [root@ed61d42abbcc local]# pwd //進入到指定的/usr/local目錄 /usr/local [root@ed61d42abbcc local]# vim abc.txt

mycentos生成歷史也可以查閱

[root@localhost mydocker]# docker history mycentos:1.3 IMAGE CREATED CREATED BY SIZE COMMENT 4c74332b0082 7 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B e3ed1f7c28b8 7 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B 3b9c6cca3540 7 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B 4ade6abc039a 7 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B 864561d93c2d 7 minutes ago /bin/sh -c yum -y install net-tools 23.4MB cb6e60a02fab 7 minutes ago /bin/sh -c yum -y install vim 58.1MB 5374a0be7483 9 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B ecddfdced96f 9 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B 97d07ae4d2be 9 minutes ago /bin/sh -c #(nop) MAINTAINER rhx<rhx@123.co… 0B 300e315adb2f 5 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 5 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 5 months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB

接著介紹一下所謂CMD命令覆蓋和NETRYPOINT追加的含義,Docker run之后的命令會被當做參數(shù)傳遞給ENTRYPOINT,形成新的命令組合。在mydocker下創(chuàng)建一個Dockerfile2文件

[root@localhost mydocker]# cat Dockerfile3 FROM centos RUN yum install -y curl CMD ['curl','-s','https://ip.cn'] [root@localhost mydocker]# docker build -f /mydocker/Dockerfile3 -t myip .

使用Myip鏡像創(chuàng)建一個容器

[root@localhost mydocker]# docker run -it myip

此時如果希望顯示http頭信息,就需要加上-i參數(shù)

[root@localhost mydocker]# docker run myip -i docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "-i": executable file not found in $PATH: unknown. ERRO[0002] error waiting for container: context canceled

但由于Dockerfile3中命令后如果加上-i

CMD curl -s https://ip.cn CMD -i

此時只有-i命令生效。所以解決該問題可以使用ENTRYPOINT,將Dockerfile3中的最后一行CMD curl -s https://ip.cn中替換為ENTRYPOINT ...即可解決。

FROM centos RUN yum install -y curl ENTRYPOINT ['curl','-s','https://ip.cn']

?

?

總結

以上是生活随笔為你收集整理的docker之容器数据卷的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。