Volumen de datos del contenedor de Docker

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
Inserte la descripción de la imagen aquí

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 查看

Inserte la descripción de la imagen aquí
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
Inserte la descripción de la imagen aquí

--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

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_43803285/article/details/114457484
Recomendado
Clasificación