上一篇:Docker(6)—安裝mysql
使用dockerfile
自定義鏡像文件最好配合Docker(5)—數據卷查看保留字指令;
或者直接看下圖:
以構建一個自己的centos
鏡像包爲例:
#分別執行以下命令:
cd /home
mkdir docker_volume
vi dockerfile
然後在 dockerfile中輸入以下命令
#設置基礎鏡像
FROM centos
#設置鏡像包作者和郵箱
MAINTAINER magic<[email protected]>
#設置環境變量(MYPATH是自定義的一個名字,有點像key:value結構中的key值)
ENV MYPATH /usr/local
#設置工作空間;使用$符號獲取到MYPATH對應的地址(即/usr/local),進入該鏡像容器中的時候就會到/ur/local目錄下
WORKDIR $MYPATH
#RUN:容器構建時需要執行的命令,這裏使用yum方式下載 vim ,net-tools等常用指令庫
RUN yum -y install vim
RUN yum -y install net-tools
#暴露端口
EXPORE 80
#容器啓動的時候需要執行的命令
CMD echo $MYPATH
CMD echo "-------------build end----------------"
CMD /bin/bash
然後再進行鏡像構建:
[root@iZ2zearkb2a36wkifspfmkZ docker_volume]# docker build -f dockerfile -t mycentos:1.0 .
使用docker images
命令查看新構建的鏡像:mycentos:1.0
[root@privateCloud /home/docker_volume ]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 1.0 8a4517a9ef80 5 seconds ago 237MB
tomcat latest 1b6b1fe7261e 2 weeks ago 647MB
nginx latest 9beeba249f3e 2 weeks ago 127MB
mysql latest a0d4d95e478f 2 weeks ago 541MB
elasticsearch 7.6.2 f29a1ee41030 2 months ago 791MB
centos latest 470671670cac 4 months ago 237MB
啓動自定義的centos鏡像:
[root@privateCloud /home/docker_volume ]# docker run -it 8a4517a9ef80
發現在自定義的centos
鏡像的根目錄中(輸入:“cd / ” 命令可以查看到這兩個文件)
多了兩個文件:volume01
和volume02
,這是在自定義的dockerfile
中設置的數據掛載文件;
退出mycentos01
鏡像容器:ctrl+p+(容器不停止退出)
因爲前面的dockerfile
中設置掛載文件的時候是匿名掛載(隨着容器建立而建立,隨着容器消亡而消亡,所以只存儲無關痛癢的數據)
查看mycentos01
鏡像容器的掛載設置:
[root@privateCloud /home/docker_volume ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c604dcc93dc6 8a4517a9ef80 "/bin/sh -c /bin/bash" 4 minutes ago Up 4 minutes gallant_carson
[root@privateCloud /home/docker_volume ]# docker inspect 8a4517a9ef80
然後找到Mounts
信息
"Mounts": [
{
"Type": "volume",
"Name": "d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6",
"Source": "/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data",
"Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "8e9b32abcb82abd7602a02e3c08ac159384e5fdfef38f0bebcb5b1799af8067a",
"Source": "/var/lib/docker/volumes/8e9b32abcb82abd7602a02e3c08ac159384e5fdfef38f0bebcb5b1799af8067a/_data",
"Destination": "volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
從以上這段信息中可以看到與volume01
進行數據共享的是/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data
文件,與volume02
進行數據共享的是/var/lib/docker/volumes/8e9b32abcb82abd7602a02e3c08ac159384e5fdfef38f0bebcb5b1799af8067a/_data
文件。可以通過小測試進行驗證:
在宿主機中的/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data
目錄中創建一個新的文本文件:
[root@privateCloud /home/docker_volume ]# cd /var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data
[root@privateCloud /var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data ]# touch file01.txt
[root@privateCloud /var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data ]# ll
total 0
-rw-r--r-- 1 root root 0 Jun 1 11:26 file01.txt
[root@privateCloud /var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data ]#
然後再進入mycentos
容器:
[root@privateCloud / ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3476abbbc14a 9bbf7f944441 "/bin/bash" 45 minutes ago Up 45 minutes naughty_wilson
[root@privateCloud / ]#
[root@privateCloud / ]#
[root@privateCloud / ]# docker exec -it 3476abbbc14a /bin/bash
[root@3476abbbc14a /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
[root@3476abbbc14a /]# cd volume01
[root@3476abbbc14a volume01]# ls
file01.txt
[root@3476abbbc14a volume01]#
發現容器內的volume01
文件夾中也有file01
文件,說明之前在宿主機的/var/lib/docker/volumes/d1b800a2c4c72dedfb30d70453e74a4263bf6fe8086d9b26c3b3e979f5fcf8d6/_data
中創建的文件與容器數據共享成功。