1. Montagem simples
-
No processo de uso do
Docker
, geralmente é necessário montar diretórios ou arquivos no host paraDocker
o contêiner para obter compartilhamento ou persistência de dados. O comando é um comando comumdocker run -v
usado para montar o diretório do host no contêiner.Docker
-
Ao criar o contêiner de inicialização, use
-v
o parâmetro para definir o volume de dados# 挂载单个 $ docker run ... -v [主机目录]:[容器目录] [镜像名称] # 挂载多个 $ docker run -v [主机目录1]:[容器目录1] -v [主机目录2]:[容器目录2] -v [主机目录3]:[容器目录3] [镜像名称]
Precauções:
-
diretório deve ser um caminho absoluto
-
Se o diretório não existir, ele será criado automaticamente
-
Você pode montar vários volumes de dados,
-v
basta gravar vários volumes
-
2. Caixa de montagem simples
-
centos
montar por exemplo# 拉取最新 centos $ docker pull centos # 一般可以放在 root 目录下,这里为了测试,随便写个文件名 dzmtest 作为效果区分 $ docker run -it --name dzm -v /dzmtest/data:/dzmtest/data_container centos /bin/bash
-
Depois de entrar no contêiner, visualize o diretório do contêiner
# 或者 $ ls -l $ ls # dzmtest 文件夹就被创建了,里面还有个 data_container 文件夹 bin dev dzmtest etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
-
Para visualizar o diretório do host, você precisa voltar para a camada mais externa do host
# 或者 $ ls -l $ ls # 需要通过 $ cd .. 回到宿主机文件最外层,根目录,会发现创建好了 dzmtest,里面还有个 data 文件夹 Docker bin boot dev dzmtest etc home init lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var
-
Teste a função de sincronização de dados, adicione arquivos no host (
/dzmtest/data
) ou contêiner ( ) ou modifique o conteúdo dos arquivos que serão sincronizados entre si./dzmtest/data_container
# 或 $ cd /dzmtest/data_container $ cd /dzmtest/data # 随便创建一个文件 $ touch dzm.txt
Se o erro de criação do arquivo informar
touch: cannot touch 'dzm.txt': Permission denied
que não há permissão, basta adicionar uma permissão.O mesmo é verdadeiro se um erro for relatado
-bash: cd: data/: Permission denied
, basta adicionar a autoridade mais alta.# 回到上层文件夹 $ cd .. # 对 data 文件添加权限 # chmod 修改权限指令 # -R 对目前目录下的所有档案与子目录进行相同的权限变更 # 777 是所有用户都拥有最高权限 $ sudo chmod -R 777 ./data/
Em seguida, execute o comando create file novamente e ele será criado com sucesso.
dengzemiao@DESKTOP-D06B2J2:/dzmtest/data$ ls # 宿主机上文件就创建好了,然后去容器内的绑定文件夹内查看下是否存在文件 dzm.txt
[root@037524b9fb04 /]# cd dzmtest/data_container/ [root@037524b9fb04 data_container]# ls # 容器内也存在同样的文件了,这样就实现了共享 dzm.txt
-
Exemplo para montar vários diretórios
# 通过 \ + 回车进行换行输入 $ docker run -it --name dzm \ > -v /dzmtest/data1:/dzmtest/data1 \ > -v /dzmtest/data2:/dzmtest/data2 \ > centos /bin/bash
3. Contêiner de volume de dados
-
Se os dados forem compartilhados por vários contêineres, de acordo com o método acima, cada contêiner é associado a uma pasta da máquina host, para que os dados de vários contêineres possam ser compartilhados
Outra maneira é
数据卷容器
criar um contêiner para montar a pasta do host especificamente e, em seguida, associar outros contêineres a esse contêiner.1. Crie um
c3
contêiner de volume de dados de inicialização e use-v
para definir o volume de dados# -v /volume 这种写法会在容器内创建一个 /volume 目录,然后 docker 会在宿主机上自动分配一个目录作为绑定目录 $ docker run -it --name=c3 -v /volume centos:7 /bin/bash # 执行命令后,如何查看容器自动分配的宿主机绑定目录呢 $ docker inspect c3 [ { ...... "HostConfig": { // 如果指定数据卷目录,这里会列出绑定信息 "Binds": null, ...... }, ...... // 挂着信息 "Mounts": [ { "Type": "volume", "Name": "8d89f84aa486fcf706e180e6aa17649929147bdbc32e8aa3391b4dffdce27d09", // 宿主机中的目录 "Source": "/var/lib/docker/volumes/8d89f84aa486fcf706e180e6aa17649929147bdbc32e8aa3391b4dffdce27d09/_data", // 容器中的目录 "Destination": "/dzmtest1", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ..... } ] dengzemiao@DESKTOP-D06B2
2. Crie um
c1 c2
contêiner de inicialização e use--volumes-from
para definir o contêiner de volume de dados$ docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash $ docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
3. Em seguida
c1 c2
, adicione, exclua e modifique arquivos normalmente no contêiner para obter intercomunicação.Ao mesmo tempo, você também pode acessarc3
o contêiner de volume de dados separadamente para processamento.