docker之容器数据卷
目錄
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.txtmycentos生成歷史也可以查閱
[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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kubernetes组件介绍
- 下一篇: centos7下使用kubeadm安装k