Anterior: Docker (4) - Espelho
1. Como garantir a persistência dos dados?
Aqui, devemos saber que a tecnologia docker é usar o arquivo de imagem baixado para gerar um contêiner de instância em execução, o que significa que o arquivo de imagem é equivalente a um modelo, como o arquivo de imagem do mysql, não importa quantas vezes o mysql seja executado no docker, o uso é sempre Faça o download do mesmo arquivo de imagem mysql. Como salvar os dados gerados durante minha operação? E se eu quiser usar os dados gerados durante a primeira execução durante a segunda execução?
No Docker, os volumes de dados fornecem persistência de dados. O volume de dados aparece como um diretório ou arquivo em um ou mais contêineres e é montado no contêiner por janela de encaixe, mas não faz parte do sistema de arquivos conjunto, portanto, quando a janela de encaixe fecha ou exclui o contêiner, isso não afetará Os dados no volume de dados. Os volumes de dados podem ser usados para armazenar dados e também para compartilhar dados entre contêineres.
2. Instrução de palavras reservadas no Dockerfile
Instrução | Descrição do produto |
---|---|
DE | A imagem base, com base em qual imagem a nova imagem se baseia |
MANUTENÇÃO | Nome e endereço de email do mantenedor de espelho |
CORRE | Comandos a serem executados quando o contêiner é construído |
EXPOR | Porta exposta pelo contêiner atual |
WORKDIR | Especifique o diretório em que o terminal efetua login para funcionar por padrão depois de criar o contêiner, uma base de apoio |
ENV | Usado para definir variáveis de ambiente durante a criação da imagem |
ADICIONAR | Copie os arquivos no diretório host para a imagem e o comando ADD processará automaticamente a URL e descompactará o arquivo tar |
CÓPIA DE | Semelhante ao ADD, copie arquivos e diretórios para o espelho. Copie os arquivos / diretórios do <caminho da origem> no diretório do contexto de construção para o local do <caminho do destino> no espelho da nova camada {COPY src dest} |
VOLUME | Volume de dados do contêiner para armazenamento e persistência de dados |
CMD | Especifique um comando para executar quando o contêiner for iniciado. Pode haver várias instruções de CMD no Dockerfile, mas apenas a última entra em vigor, e o CMD será substituído pelos parâmetros após a execução da janela de encaixe. |
PONTO DE ENTRADA | Especifique um comando para executar quando o contêiner for iniciado. O objetivo do ENTRYPOINT é o mesmo do CMD, que é especificar o programa e os parâmetros de inicialização do contêiner. |
ONBUILD | Ao criar um Dockerfile herdado, execute o comando e o onbuild da imagem pai é acionado após a herança da imagem filho. |
3. Características do volume de dados?
- Os volumes de dados podem ser compartilhados ou reutilizados entre contêineres
- Alterações no volume de dados não serão incluídas na atualização do contêiner
- Alterações no volume de dados podem entrar em vigor diretamente
- O ciclo de vida do volume de dados continua até que nenhum contêiner o use
3. Para obter o compartilhamento de dados entre a máquina host e o contêiner?
Dois conceitos precisam ser esclarecidos aqui:
1. Máquina host: a
máquina host refere VMWare-----》CentOs
- se ao sistema Linux em que entramos no caminho é a nossa máquina host.
2. O contêiner
é a instância em execução gerada pelo arquivo de imagem puxado na máquina host ~
Requisitos:
Agora tenho uma imagem centos, espero que, quando a imagem centos estiver em execução, seucontainerdata
diretório e osmydata
dois diretóriosdo hostpossam compartilhar dados;
Comando:
docker run -it -v 宿主机中的共享目录(mydata)路径:容器中的共享目录(containerdata)的路径
Nome do Contêiner
Exemplo: por
exemplo, meusdados estão no diretório raiz da máquina host (/mydata
) e os dadosdestinados estão no diretório raiz do container (/containerdata
)
A figura a seguir é o diretório raiz da máquina host e não há mydata
pasta agora.A
figura a seguir é o diretório raiz dos centos do contêiner e não há containerdata
pasta
agora.Primeiro, vincule o diretório:
docker run -it -v /mydata:/containerdata centos
2. Visualize o relacionamento de ligação entre o host e o contêiner
docker inspect 容器ID
3. Verifique o navio de acolhimento e se houve mydata
e containerdata
pastas
Anfitrião:
Contêiner:
Agora mydata
crie um documento no diretório:
[root@bogon mydata]# touch file.txt
[root@bogon mydata]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月 22 14:57 file.txt
[root@bogon mydata]#
Agora que o mydata
diretório e o containerdata
diretório no contêiner centos compartilham dados, agora containerdata
deve haver um file.txt
documento no diretório Ver containerdata
catálogo:
[root@7453e78d6615 /]# cd containerdata/
[root@7453e78d6615 containerdata]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 22 06:57 file.txt
[root@7453e78d6615 containerdata]#
Constatou que containerdata
existe um file.txt
documento no diretório , agora edite o documento através do contêiner:
insira um parágrafo no documento, de acordo com o princípio do compartilhamento de dados, também deve haver uma frase mydata
no file.txt
documento no diretório do host :
verifique o coletor novamente neste momento containerdata
Sob o host file.txt
:
Aqui você conseguiu o compartilhamento de dados entre o host e o contêiner ~
Nota:
Após a operação de ligação acima, mesmo que nosso contêiner esteja fechado e em execução, se mydata
executarmos a operação no diretório da máquina host, ele ainda será sincronizado com centos
o containerdata
diretório na imagem vinculada a ele :
Exemplos:
Feche os centos e saia: `
visualizar arquivos de imagem em execução no momento:
para confirmar a acima centos imagens já sair correndo -
desta vez no hospedeiro mydata
criar um diretório file001.txt
de arquivos e adicionar conteúdo: this content is edited in the host
este arquivo de imagem centos tempo de execução para o containerdata
diretório Ver:
Ver ID da imagem do CentOS do segundo fechamento: docker ps -l
Reinicie o arquivo de imagem do centos que foi fechado pela última vez:docker start 镜像ID
Digite o contêiner centos em execução: docker anexar ID da imagem para
ver containerdata
se há novos file001.txt
documentos no diretório :
[root@e2fde7599c8b /]# cd containerdata/
[root@e2fde7599c8b containerdata]# ls -l
total 8
-rw-r--r--. 1 root root 38 Mar 22 07:22 file.txt
-rw-r--r--. 1 root root 35 Mar 22 07:13 file001.txt
[root@e2fde7599c8b containerdata]# cat file001.txt
this content is edited in the host
[root@e2fde7599c8b containerdata]#
Verificou-se que o file001.txt
documento e os dados recém-criados na máquina host estão sincronizados com a centos
posição de ligação correspondente do contêiner;
4. Adicione permissões ao compartilhar dados entre host e contêiner
Comando de ligação de diretório para compartilhamento de dados entre host e contêiner:
docker run -it -v /宿主机共享文件的绝对路径:/容器共享文件的绝对路径 :ro 镜像名
Nota: ro é somente leitura (permissão somente leitura)
Após vincular o diretório de dados compartilhados através do comando acima, podemos gravar dados (adicionar, excluir, modificar) da máquina host e o contêiner pode apenas ler dados