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