乐趣区

关于前端:Docker-容器数据卷详解

什么是容器数据卷

从 docker 的理念说起,docker 将利用和环境打包成一个镜像,运行镜像(生成容器)就能够拜访服务了。

  • 如果数据都存在容器中,那么删除容器,数据就会失落!需要:数据能够长久化
  • MySQL 容器删了,就相当于删库了。需要:MySQL 数据能够本地存储

容器之间能够有一个 数据共享 的技术,docker 容器产生的数据同步到本地或者别的中央。

这就是数据卷技术,就是 目录挂载,将容器内的目录,挂载到虚拟机上或者 Linux 上

目标:实现容器数据的长久化和同步操作。容器间也能够数据共享

数据的笼罩问题

  1. 如果挂载一个 空的数据卷 到容器中的一个 非空目录 中,那么这个目录下的文件会被复制到数据卷中。
  2. 如果挂载一个 非空的数据卷 到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被暗藏掉。

这两个规定都十分重要,灵便利用第一个规定能够帮忙咱们 初始化数据卷 中的内容。把握第二个规定能够保障挂载数据卷后的数据总是你冀望的后果。

应用数据卷

形式一:间接应用命令挂载 -v

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

docker run -it -v /home/test:/home centos /bin/bash

docker inspect 命令查看容器信息

测试挂载卷

1、在容器外部批改文件同步到 Linux 主机上

进入容器,在 /home 目录下创立 123.sh 文件

主机内能够查看在容器外部创立的文件

2、同样地,在 Linux 上批改挂在卷文件能够同步到容器外部
3、进行容器,批改 Linux 主机上的文件,同步到容器内
# 1、进行容器
exit

# 2、查看容器是否还在运行
docker ps

# 3、在 Linux 主机上批改对应目录的文件

# 4、启动容器并查看
  
  # 4.1、查看历史运行的容器
  docker ps -a
  
  # 4.2、启动容器
  docker start CONTAINER ID
  
  # 4.3、进去容器
  docker attach CONTAINER ID
  
  # 4.4、查看数据卷文件

形式二:Dockerfile 文件

请查看下一章节

数据卷命令

docker volume

docker volume --help
Usage:  docker volume COMMAND
Manage volumes
Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

Run 'docker volume COMMAND --help' for more information on a command.

具名挂载 / 匿名挂载

匿名挂载

-v 容器内门路
-P 主动调配端口号

docker run -d -P --name nginx02 -v /etc/nginx nginx

具名挂载

-v 卷名: 容器内门路
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx

查看数据卷

形式一:docker inspect 容器 ID

形式二:docker volume inspect juming-nginx

查看 Linux 主机 docker 工作目录 /var/lib/docker

所有 docker 容器内的卷,没有指定目录的状况下都是寄存在 /var/lib/docker/volumes/xxx/_data 目录下

挂载三种形式

# 1
-v 容器内门路            # 匿名挂载

# 2
-v 卷名: 容器内门路       # 具名挂载

# 3
-v 宿主机门路: 容器内门路 # 指定门路挂载

扩大

给挂载的数据卷减少读写权限管制

通过 -v 容器内门路,ro rw 扭转读写权限

  • ro readonly 只读
  • rw readwrite 可读写

# 一旦设置了容器权限,容器对咱们挂载进去的内容就有限定了

docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw nginx

ro : 阐明这个门路只能通过宿主机来操作,容器内无奈操作


我是 甜点 cc

酷爱前端,也喜爱专研各种跟本职工作关系不大的技术,技术、产品趣味宽泛且浓重,期待着一个守业机会。本号次要致力于分享集体经验总结,心愿能够给一小部分人一些渺小帮忙。

心愿能和大家一起致力营造一个良好的学习气氛,为了集体和家庭、为了我国的互联网物联网技术、数字化转型、数字经济倒退做一点点奉献。数风流人物还看中国、看今朝、看你我。

退出移动版