Docker知识总结 (四) 数据卷

本文详细介绍了Docker数据卷的使用,包括数据卷的创建、数据卷容器的运用,以及具名挂载和匿名挂载的区别。通过示例展示了如何通过Docker安装mysql并建立数据卷来同步数据,强调了数据卷在容器之间共享和持久化数据的重要性。同时,提到了Dockerfile的基础知识,以及数据卷的权限设置(ro和rw)。
摘要由CSDN通过智能技术生成

数据卷相关docker命令

https://docs.docker.com/engine/reference/commandline/volume_create/

数据卷介绍

Docker将运用与运行的环境打包形成容器运行, Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中我们使用卷。

卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但卷不属于联合文件系统(Union FileSystem),因此能够绕过联合文件系统提供一些用于持续存储或共享数据的特性:。

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

数据卷的特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

使用

命令:

docker run -it -v 主机目录:容器目录 镜像 

运行centos:

[root@VM-4-17-centos home]# docker run -it -v /home/ceshi:/home centos /bin/bash
[root@c5eb5967894d /]# ls     
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

结果:host机中生成了一个ceshi目录

[root@VM-4-17-centos ~]# ls /home
ceshi  java_program  JiKeZhang  lighthouse  shell_program  www

docker inspect c5eb5967894d 查看容器信息
在这里插入图片描述
共享数据测试:

[root@VM-4-17-centos ceshi]# touch test.java  # 在主机对应的目录中添加一个文件
[root@VM-4-17-centos ceshi]# ls
test.java

[root@c5eb5967894d home]# ls    # 查看容器中对应目录下的文件
test.java

Docker安装mysql建立数据卷同步数据

docker pull mysql:下载最新的mysql镜像

docker pull mysql

启动:

	[root@VM-4-17-centos home]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
5e45350f42b5164b0cc0f511d39dafb6839fcc5946e7c0766a476a0e56feda1d
[root@VM-4-17-centos home]#

使用navicat等工具连接测试即可

具名挂载和匿名挂载

(1) 匿名挂载:

  1. 启动
[root@VM-4-17-centos docker]# docker run -d --name nginx01 -p 3344:80 -v /etc/nginx nginx
  1. 查看所有的卷:
[root@VM-4-17-centos docker]# docker volume ls
DRIVER    VOLUME NAME
local     8bf3a19c90e0ead92c1d629c496520c24e5f10b90f45ce2c54250baf5637f63d
local     c1b588271c994e07fc66e8d0a7d97e4470b2b9a0f12a8529b73858f3fde425ad
  1. 问题
    VOLUME NAME都是乱码,因为前面运行的时候只指定了容器内的目录

(2) 具名挂载

  1. 启动
[root@VM-4-17-centos docker]# docker run -d --name nginx02 -p 3345:80 -v juming:/etc/nginx nginx
59c57a689f7e13d4bdffb1b3f58444559dd543ce6ba9d8f27b705a1eb208d6a4
[root@VM-4-17-centos docker]#
  1. 查看所有的卷:
[root@VM-4-17-centos docker]# docker volume ls
DRIVER    VOLUME NAME
local     8bf3a19c90e0ead92c1d629c496520c24e5f10b90f45ce2c54250baf5637f63d
local     c1b588271c994e07fc66e8d0a7d97e4470b2b9a0f12a8529b73858f3fde425ad
local     juming
  1. 查看挂载的主机目录:
[root@VM-4-17-centos docker]# docker volume inspect juming
[
    {
        "CreatedAt": "2022-05-11T00:10:39+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming/_data",  #主机内的目录
        "Name": "juming",
        "Options": null,
        "Scope": "local"
    }
]
  1. 所有没有指定目录的卷都在 /var/lib/docker/volumes
[root@VM-4-17-centos docker]# cd /var/lib/docker/volumes
[root@VM-4-17-centos volumes]# ls
8bf3a19c90e0ead92c1d629c496520c24e5f10b90f45ce2c54250baf5637f63d  backingFsBlockDev  c1b588271c994e07fc66e8d0a7d97e4470b2b9a0f12a8529b73858f3fde425ad  juming  metadata.db

(3) 拓展

docker run -d --name nginx02 -p 3345:80 -v juming:/etc/nginx;ro nginx
或者
docker run -d --name nginx02 -p 3345:80 -v juming:/etc/nginx;rw nginx

ro:(read only) 表示容器只有读的权限

rw:(read write) 表示容器有读和写的权限(默认就是rw

初识Dockerfile

  1. 新建一个文件dockerfile1
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash

注意:这里的每一个命令,都各是一个镜像的一层。

  1. 执行docker build
[root@VM-4-17-centos docker-test-volume]# docker build -f ./dockerfile1 -t zhxcentos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in 70814db381a5
Removing intermediate container 70814db381a5
 ---> 3db65aef8482
Step 3/4 : CMD echo "----end----"
 ---> Running in 92cdf24fdfef
Removing intermediate container 92cdf24fdfef
 ---> 440c1fcbc31f
Step 4/4 : CMD /bin/bash
 ---> Running in 6c860a2f7efd
Removing intermediate container 6c860a2f7efd
 ---> d3bf78adc986
Successfully built d3bf78adc986
Successfully tagged zhxcentos:1.0
  1. 查看生成的镜像
[root@VM-4-17-centos docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
zhxcentos             1.0       d3bf78adc986   8 seconds ago   231MB

  1. 执行docker run 运行
[root@VM-4-17-centos docker-test-volume]# docker run -it d3bf78adc986 /bin/bash
[root@cbd17bdad4e4 /]#
  1. 查看容器的目录
    在这里插入图片描述
    注意:宿主机上一定有对应的目录,这里的挂载是匿名挂载。
  2. 查看一下卷挂载的路径
    在这里插入图片描述

数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。

测试:

  1. 启动容器
    在这里插入图片描述
    在这里插入图片描述
  2. 进入docker01中的/volume01下创建一个文件,观察docker02中的volume01目录
    进入docker01:
    在这里插入图片描述
    查看docker02中的volume01目录:
    在这里插入图片描述
  3. 测试删除docker01容器,查看docker01中volume01下是否还存在创建的文件
    结果:依然存在。
    原因:docker01和docker02中的volume01和volume02实际上都挂载到了宿主机上的volumes目录中,只要不删除宿主机上的目录,文件就一直存在。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值