Docker -v monta o diretório do host no contêiner (e o contêiner do volume de dados)

1. Montagem simples

  • No processo de uso do Docker, geralmente é necessário montar diretórios ou arquivos no host para Dockero contêiner para obter compartilhamento ou persistência de dados. O comando é um comando comum docker run -vusado para montar o diretório do host no contêiner.Docker

  • Ao criar o contêiner de inicialização, use -vo 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, -vbasta gravar vários volumes

2. Caixa de montagem simples

  • centosmontar 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 deniedque 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.

    imagem.png

    1. Crie um c3contêiner de volume de dados de inicialização e use -vpara 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 c2contêiner de inicialização e use --volumes-frompara 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 acessar c3o contêiner de volume de dados separadamente para processamento.

Acho que você gosta

Origin blog.csdn.net/zz00008888/article/details/131924286
Recomendado
Clasificación