Docker

269 阅读2分钟

这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

数据卷

特点:

  • 数据卷可以在容器之间共享或重用数据
  • 数据卷中的更改可以立即生效
  • 数据卷的更改不会包含在镜像的更新
  • 数据卷默认一直存在,即使容器被删除
  • 数据卷的生命周期一直持续到没有容器使用它为止

管理数据方式

  • 数据卷: Data Volumes 容器内数据直接映射到本地主机环境
  • 数据卷容器: Data Volume Containers 使用特定容器维护数据卷
# 宿主机文件复制到容器内
docker cp [options] path container:destPath
# 容器内文件复制到宿主机
docker cp [options] containe:path destPath

bind mounts

数据卷是一个可供一个或多个容器使用的特殊目录, 将主机操作系统目录直接映射进容器

数据卷类型

  • 宿主机数据卷: 直接在宿主机的文件系统中但是容器可以访问(bind mount)
  • 命名数据卷: Docker管理的数据卷,卷有名字
  • 匿名数据卷: Docker管理的数据卷,没有名称, Docker管理这些文件

数据卷在宿主机文件系统里面的,第一种是在宿主机内的特定目录下,后两种在Docker管理的目录下, 目录一般是/var/lib/docker/volumes。推荐使用宿主机数据卷方式持久化数据。

宿主机数据卷

bind mounts: 容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统目录或文件中。除了docker之外的进程也可以任意对他们进行修改。

docker run -v /etc/:/ta 镜像名
ro:readonly 只读,代表只能通过宿主机操作,容器内部无法操作
rw:readwrite 可读可写
docker run -v /la:/etc/nginx:ro nginx

匿名数据卷

docker run -itd --name nginx -p 80:80 -v /etc/nginx nginx

命名数据卷

docker run -itd --name nginx -p 80:80 -v nginx: /etc/nginx nginx
  • 清理数据卷
docker volumn ls
docker volumn prune #清理数据卷
docker volumn ls

数据卷容器

docker pull centos:7.8
docker pull nginx
docker pull mysql

docker run --volumes-from 

多个容器共享一些持续更新的数据,最简单的方式就是使用数据卷容器。目的是专门用来提供数据卷供其他容器挂载。创建好的数据卷容器处于停止运行的状态, 使用--volumes-from 参数挂载的数据卷容器并不需要保持在运行状态。

docker run -itd --name nginx01 -p 80:80 --volume-from data-volume  nignx

不过也有一些是无法直接通过数据卷容器共享的,比如docker hub官网上的mysql原始镜像等。