Volumen de datos del contenedor de Docker
1. ¿Qué es un volumen de contenedor?
¿datos? Si los datos están en el contenedor, borramos el contenedor y los datos se perderán. Requisitos: los datos pueden conservarse
MySQL, el contenedor se elimina y la base de datos se elimina. Requisitos: ¡Los datos de MySQL se pueden almacenar localmente!
¡Puede haber una tecnología de intercambio de datos entre contenedores! ¡Los datos generados en el contenedor Docker se sincronizan con el local!
¡Esta es la técnica del volumen! ¡Monte el directorio, monte el directorio en nuestro contenedor en Linux!
Propósito: persistencia y sincronización de contenedores, intercambio de datos entre contenedores
En segundo lugar, use el volumen de datos
Método 1: use directamente el comando para montar
-v, --volume list Bind mount a volume
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
➜ ~ docker run -it -v /home/ceshi:/home centos /bin/bash
#通过 docker inspect 容器id 查看
Sincronización de archivos de prueba
1. Detenga el contenedor
2. Host modificar archivos
3. Inicie el contenedor
4. Los datos del contenedor aún están sincronizados.
5. Elimina el contenedor, el host aún tiene datos.
En el futuro, solo tendrá que modificarlo localmente y el contenedor se sincronizará automáticamente.
Tres, combate real: instalar mysql
Comandos de persistencia de datos de MySQL
# 运行容器,需要做数据挂载 #安装启动mysql,需要配置密码的,这是要注意点!
# 参考官网hub
docker search mysql
# 拉取
docker pull mysql:5.7
# 挂载
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql5.7
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置 安装启动mysql需要配置密码
--name 容器名字
# 在本地测试创建一个数据库,查看一下我们映射的路径是否ok!
Eliminamos el contenedor y descubrimos que el volumen de datos que montamos en el local todavía no se había perdido, lo que realizó la función de persistencia de datos del contenedor.
Cuatro, montaje anónimo y con nombre
# 匿名挂载
-v 容器内路径!
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 查看所有的volume的情况
➜ ~ docker volume ls
DRIVER VOLUME NAME
local 9948f0d3d123c9d45c442ac7728cb85599c2657e50d
local
# 这里发现,这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路劲!
# 具名挂载
➜ ~ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
➜ ~ docker volume ls
DRIVER VOLUME NAME
local juming-nginx
# 通过 -v 卷名:容器内路径
# 查看一下这个卷
Se encuentra que todos los volúmenes en el contenedor de la ventana acoplable están en / var / lib / docker / volúmenes / xxxx /
_data si no se especifica el directorio . Si se especifica el directorio, el volumen de la ventana acoplable ls no se puede ver.
# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
Expansión:
# 通过 -v 容器内路径: ro rw 改变读写权限
ro #readonly 只读
rw #readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
Cinco, primero conozca Dockerfile
DockerFile utiliza para crear archivos de imagen de Docker
# 创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
#这里的每个命令,就是镜像的一层!
yum install vim # 编辑文件的,没有装一下
Puede ejecutar este comando después de la instalación
Seis, intercambio de datos de múltiples contenedores
¡Sincronice datos con múltiples MySQL!
Volumen de datos de montaje de contenedor con nombre
--volumes-from list Mount volumes from the specified container(s)
# 测试,我们通过刚才启动的
Iniciar docker01
docker run -it --name docker01 latteitcjz/centos:1.0 # 1.0必须写
El ctrl + p + q actual no se detiene y sale
Inicie docker02, docker03 a su vez
docker run -it --name docker02 --volumes-from docker01 latteitcjz/centos:1.0
docker02 hereda los volúmenes de docker01
Se puede verificar que agregar datos en docker01 también aparecerá en docker02
Crea docker03, también hereda docker01
docker run -it --name docker03 --volumes-from docker01 latteit/centos:1.0
Cree archivos en volume01 de docker03, y también en volume01 de docker01
Es decir, el intercambio de datos entre diferentes contenedores se puede lograr a través de volúmenes de
Eliminar docker01, los datos siguen ahí
docker rm -f
Como puede ver, elimine docker01 e ingrese docker02, los datos aún están en
Múltiples mysql realizan el intercambio de datos
➜ ~ 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:5.7
➜ ~ docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
# 这个时候,可以实现两个容器数据同步!
En conclusión:
La transferencia de información de configuración entre contenedores, el ciclo de vida del contenedor de volumen de datos continúa hasta que no hay una ubicación del contenedor.
Pero si persiste localmente, incluso si se eliminan todos los contenedores, los datos locales no se eliminarán