Volume de dados do contêiner do Docker

Volume de dados do contêiner do Docker

1. O que é um volume de contêiner

dados? Se os dados estiverem no contêiner, excluímos o contêiner e os dados serão perdidos! Requisitos: os dados podem ser persistentes

MySQL, o contêiner é excluído e o banco de dados é excluído! Requisitos: os dados do MySQL podem ser armazenados localmente!

Pode haver uma tecnologia de compartilhamento de dados entre contêineres! Os dados gerados no contêiner Docker são sincronizados com o local!

Esta é a técnica do volume! Monte o diretório, monte o diretório em nosso contêiner para Linux!

Objetivo: Persistência e sincronização de contêineres, compartilhamento de dados entre contêineres
Insira a descrição da imagem aqui

Em segundo lugar, use o volume de dados

Método 1: use diretamente o 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 查看

Insira a descrição da imagem aqui
Sincronização de arquivos de teste

1. Pare o recipiente

2. Arquivos de modificação de host

3. Inicie o contêiner

4. Os dados no contêiner ainda estão sincronizados

5. Exclua o contêiner, o host ainda tem dados

No futuro, você só precisa modificá-lo localmente e o contêiner será sincronizado automaticamente!

Três, combate real: instale o mysql

Comandos de persistência de dados 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!

Excluímos o contêiner e descobrimos que o volume de dados que montamos no local ainda não foi perdido, o que realizou a função de persistência de dados do contêiner.

Quatro, montagem nomeada e anônima

# 匿名挂载
-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 卷名:容器内路径
# 查看一下这个卷

Verificou-se que todos os volumes no contêiner do docker estão em / var / lib / docker / volumes / xxxx /
_data se o diretório não for especificado . Se o diretório for especificado, o volume do docker ls não poderá ser visualizado.

# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径			#匿名挂载
-v 卷名:容器内路径		#具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的

Expansão:

# 通过 -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, primeiro conheça o Dockerfile

DockerFile usa para construir arquivos de imagem do docker

# 创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash
#这里的每个命令,就是镜像的一层!

yum install vim # 编辑文件的,没有装一下

Você pode executar este comando após a instalação

Seis, compartilhamento de dados de múltiplos contêineres

Sincronize dados com vários MySQL!

Volume de dados de montagem de contêiner nomeado
Insira a descrição da imagem aqui

--volumes-from list              Mount volumes from the specified container(s)
# 测试,我们通过刚才启动的

Iniciar docker01

docker run -it --name docker01 latteitcjz/centos:1.0 # 1.0必须写

O atual ctrl + p + q não para e sai

Inicie docker02, docker03 por sua vez

docker run -it --name docker02 --volumes-from docker01 latteitcjz/centos:1.0

docker02 herda os volumes de docker01

Pode-se verificar que adicionar dados em docker01 também aparecerá em docker02

Crie docker03, também herde docker01

docker run -it --name docker03 --volumes-from docker01 latteit/centos:1.0

Crie arquivos no volume01 do docker03 e também no volume01 do docker01

Ou seja, o compartilhamento de dados entre diferentes contêineres pode ser alcançado através de --volumes-from

Exclua docker01, os dados ainda estão lá

docker rm -f 

Como você pode ver, exclua docker01 e digite docker02, os dados ainda estão em

Múltiplos mysql realizam compartilhamento de dados

➜  ~ 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
# 这个时候,可以实现两个容器数据同步!

para concluir:

A transferência de informações de configuração entre contêineres, o ciclo de vida do contêiner de volume de dados continua até que não haja localização de contêiner

Mas se persistir localmente, mesmo se todos os contêineres forem excluídos, os dados locais não serão excluídos

Insira a descrição da imagem aqui

Acho que você gosta

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