ITPub博客

首页 > 云计算 > Docker/K8 > 17 Docker容器存储架构:docker存储持久化-bind mount

17 Docker容器存储架构:docker存储持久化-bind mount

原创 Docker/K8 作者:shuchaoyang 时间:2024-11-16 16:38:32 0 删除 编辑

三、docker存储持久化-bind mount 3.1 将 /root/htdocs 目录下的 index.html 文件挂载给一个 httpd 容器 3.2 更新宿主机上的 index.html 文件内容,并查看容器中的内容 3.3 查看挂载类型 3.4 创建基于 docker volume 的 container 镜像 3.5 删除容器,销毁容器后,volume 依旧存在,其数据可持久化保存 3.6 删除 docker bind mount 卷 3.7 重新使用 volume 容器镜像部署容器

三、docker存储持久化-bind mount

bind mount是将宿主机上已有的目录或文件mount到容器中

image-20231229182846228

bind mount也使用-v挂载

3.1 将 /root/htdocs 目录下的 index.html 文件挂载给一个 httpd 容器

[root@docker ~]# docker run --name web01 -dit -p 8080:80 -v /root/htdocs:/usr/local/apache2/htdocs httpd:2.4

示例:

[root@docker ~]
# docker ps -a          

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker ~] #
[root@docker ~] # docker run --name web01 -dit -p 8080:80 -v /root/htdocs:/usr/local/apache2/htdocs httpd:2.4
1937ef7c0be2e17861eacb19a61320fba065b265db0a7c22d15689834a4d55c3
[root@docker ~] #

3.2 更新宿主机上的 index.html 文件内容,并查看容器中的内容

[root@docker ~]
# echo "bind mount" > /root/htdocs/index.html

[root@docker ~] # curl 127.0.0.1:8080

示例:

[root@docker ~]
# echo "bind mount" > /root/htdocs/index.html

[root@docker ~] #
[root@docker ~] # curl 127.0.0.1:8080
bind mount
[root@docker ~] #

3.3 查看挂载类型

[root@docker ~]# docker inspect 1937ef7c0be2

示例:

[root@docker ~]
# docker ps -a

CONTAINER ID   IMAGE       COMMAND              CREATED         STATUS         PORTS                                   NAMES
1937ef7c0be2   httpd:2.4   "httpd-foreground"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web01
[root@docker ~] #
[root@docker ~] # docker inspect 1937ef7c0be2
......
        "Mounts": [
           {
                "Type": "bind",
                "Source": "/root/htdocs",
                "Destination": "/usr/local/apache2/htdocs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
           }
       ],
......
[root@docker ~] #

3.4 创建基于 docker volume 的 container 镜像

[root@docker ~]# docker commit web01 httpd_bind:1.0

示例:

[root@docker ~]
# docker images

REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
httpd_volume     1.0       496faa1c6595   2 weeks ago    144MB
httpd_superman   1.0       f0d394fd69d5   3 months ago   144MB
tomcat           latest    fb5657adc892   2 years ago    680MB
httpd             2.4       dabbfbe0c57b   2 years ago    144MB
httpd            latest    dabbfbe0c57b   2 years ago    144MB
alpine           latest    c059bfaa849c   2 years ago     5.59MB
[root@docker ~] #
[root@docker ~] # docker commit web01 httpd_bind:1.0
sha256:c2556c7b0ea4753a45afb57b246391f882e28990ea1a2387dc0505a1408bde78
[root@docker ~] #
[root@docker ~] # docker ps -a
CONTAINER ID   IMAGE       COMMAND              CREATED         STATUS         PORTS                                   NAMES
1937ef7c0be2   httpd:2.4   "httpd-foreground"   8 minutes ago   Up 8 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web01
[root@docker ~] #
[root@docker ~] # docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
httpd_bind       1.0       c2556c7b0ea4   19 seconds ago   144MB
httpd_volume     1.0       496faa1c6595   2 weeks ago      144MB
httpd_superman   1.0       f0d394fd69d5   3 months ago     144MB
tomcat           latest    fb5657adc892   2 years ago      680MB
httpd             2.4       dabbfbe0c57b   2 years ago      144MB
httpd            latest    dabbfbe0c57b   2 years ago      144MB
alpine           latest    c059bfaa849c   2 years ago       5.59MB
[root@docker ~] #

3.5 删除容器,销毁容器后,volume 依旧存在,其数据可持久化保存

[root@docker ~]# docker rm -f web01

示例:

[root@docker ~]
# docker ps -a

CONTAINER ID   IMAGE       COMMAND              CREATED          STATUS          PORTS                                   NAMES
1937ef7c0be2   httpd:2.4   "httpd-foreground"   11 minutes ago   Up 11 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web01
[root@docker ~] #
[root@docker ~] # docker rm -f web01
web01
[root@docker ~] #
[root@docker ~] # docker ps -a      
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker ~] #
[root@docker ~] # ls /root/htdocs/index.html
/root/htdocs/index.html
[root@docker ~] #
[root@docker ~] # cat /root/htdocs/index.html  
bind mount
[root@docker ~] #

3.6 删除 docker bind mount 卷

[root@docker ~]# rm -rf /root/htdocs/

示例:

[root@docker ~]
# rm -rf /root/htdocs/

[root@docker ~] #
[root@docker ~] # ls /root/htdocs/index.html  
ls: 无法访问/root/htdocs/index.html: 没有那个文件或目录
[root@docker ~] #

3.7 重新使用 volume 容器镜像部署容器

[root@docker-node1 _data]# docker run -dit --name web01_bind -p 8080:80 httpd_bind:1.0

示例:

[root@docker ~]
# docker ps -a

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker ~] #
[root@docker ~] # docker run -dit --name web01_bind -p 8080:80 httpd_bind:1.0
20114a50cd49e56210c5e729486c878424b6c0c88211f4aa658b947220226d29
[root@docker ~] #
[root@docker ~] # docker ps -a
CONTAINER ID   IMAGE            COMMAND              CREATED         STATUS         PORTS                                   NAMES
20114a50cd49   httpd_bind:1.0   "httpd-foreground"   2 seconds ago   Up 2 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web01_bind
[root@docker ~] #
[root@docker ~] # curl 127.0.0.1:8080
<html><body><h1>It works!</h1></body></html>
[root@docker ~] #

文件并没有封装到镜像当中

  1. Linux绑定挂载(bind mount)主要作用是允许将一个目录或者文件(不是整个设备)挂载到一个指定的目录上。

  2. 在该挂载点上进行的任何操作,只是发生在被挂载的目录或者文件上,而原挂载点的内容则会被隐藏起来且不受影响。

  3. 容器运行过程中,对bind mount目录中改动的数据,将被保存。删除容器后,bind mount中的数据仍然存在。

  4. bind mount可以挂载一个目录到容器,也可以挂载一个文件到容器。但必须要指定目录或文件的路径,即mount源,当然也必须指定mount point。这也限制了容器的可移植性。

  5. 若将bind mount绑定到容器上的某非空目录下,则会隐藏容器目录下的现有内容。若不希望容器的整个目录被覆盖,可单独挂载某个文件。

  6. 若mount源指向的文件或目录在宿主机上不存在。则会自动创建。

  7. 使用bind mount时,可通过ro参数将容器对数据的权限设置为只读。(设置ro参数后,容器无法对数据进行修改,但宿主机依旧有权限修改其内容。)

原文链接: https://mp.weixin.qq.com/s?__biz=MzkxNzI1OTE3Mw==&mid=2247492770&idx=1&sn=7c27b31d9afc01c9b2cbc4526273816d&chksm=c141f268f6367b7e1ec9650b73c27cc5a38acd300f59bdfc97b1a5eda261c9648b40522ba39e&token=1641304794&lang=zh_CN#rd

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/291614/viewspace-3050242/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303582