Docker(7)---自定義鏡像並設置鏡像掛載

在這裏插入圖片描述

上一篇: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 / ” 命令可以查看到這兩個文件)多了兩個文件:volume01volume02,這是在自定義的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中創建的文件與容器數據共享成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章