Depois que o contêiner do docker for reiniciado, podemos modificá-lo e excluí-lo e assim por diante.
Se for um contêiner de um banco de dados, os dados nele não desejarão desaparecer, pois o contêiner desaparece. Requer armazenamento de dados persistente.
Volume de dados
Este é o Dockerfile do mysql no hub do docker.O VOLUME aqui significa que os dados gerados são gravados em / var / lib / mysql no host atual.
[miller @ docker4 ~ ] $ docker images TAG DE REPOSITÓRIO ID DA IMAGEM TAMANHO CRIADO daocloud.io / library / mysql mais recente 9228ee8bac7a 11 dias atrás 547MB
[miller @ docker4 ~] $ docker run -d --name = mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD = true daocloud.io/library/ mysql e7945f20bc456038a110a9798299356c8e7912a22eceaaf4e2bd29880460ab6f
-e MYSQL_ALLOW_EMPTY_PASSWORD = true diz ao mysql para usá-lo sem uma senha.
https://hub.docker.com/_/mysql Aqui está uma explicação detalhada de alguns parâmetros. Você também pode definir uma senha.
[miller @ docker4 ~ ] $ docker volume ls # Encontrará um local no host para armazenar dados
NOME DO VOLUME DO DRIVER
local 283f5d6584642ae6d32d5e02fd1330855b501dd891ddf38c5b40428183c652c8 # Este é o
redis44b
[Miller @ docker4 estivador] volume de $ estivador inspecionar 330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919 [ { " CreatedAt " : " 2020-04-11T20: 26: 36 + 08: 00 " , " driver " : " locais " , " Marcadores " : nula , "Mountpoint" : "/ var / lib / docker / volumes / 330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919 / _data", " Name " : "330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919 ", " Opções " : nulo , " Escopo " : " local " } ]
"Mountpoint": "/ var / lib / docker / volumes / 330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919 / _data" Esse caminho é
o caminho do arquivo no host em que o docker está instalado . Os dados gerados pelo banco de dados serão armazenados aqui. O volume não desaparecerá devido à exclusão do contêiner.
Como o nome do volume não é amigável, você pode defini-lo: alias:
[miller @ docker4 ~] $ docker run -d --name = mysql1 -v mysql: / var / lib / mysql -e MYSQL_ALLOW_EMPTY_PASSWORD = true daocloud.io/library/ mysql 7b006082d7d9c1cc8f17dfaefda26afea6d2adb0fe179a6d2adb094
-v mysql: / var / lib / mysql neste parâmetro. O volume [/ var / lib / mysql] no Dockerfile raiz do mysql fará o mesmo.
[miller @ docker4 ~ ] $ docker volume ls
DRIVER VOLUME NAME
local 330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919 # redis
local mysql # Volume do contêiner mysql recém criado
Você pode ir para o contêiner do MySQL e efetuar login no cliente.
[miller @ docker4 ~] $ docker exec -it mysql1 / bin / bash
root @ c057b8fbb3ad: / # mysql - u root Bem-vindo ao monitor MySQL. Os comandos terminam com; ou \ g. Seu ID de conexão MySQL é 8 Versão do servidor: 8.0 . 19 MySQL Community Server - GPL Copyright (c) 2000 , 2020 , Oracle e / ou suas afiliadas. Todos os direitos reservados. Oracle é uma marca registrada da Oracle Corporation e / ou de suas afiliadas. Outros nomes podem ser marcas comerciais de seus respectivos proprietários. Digite ' help; "ou ' \ h ' para obter ajuda. Digite ' \ c ' para limpar a instrução de entrada atual. mysql >
Nesse banco de dados, crie uma biblioteca, pare o contêiner mysql e exclua o contêiner.
[miller @ docker4 ~ ] $ docker ps ID DO RECIPIENTE COMANDO DE IMAGEM NOME DE PORTAS DE STATUS C057b8fbb3ad daocloud.io / library / mysql " docker-entrypoint.s… " 4 minutos atrás Up 4 minutos 3306 / tcp, 33060 / tcp mysql1 [miller @ docker4 ~] $ docker rm- f mysql1 # para este contêiner e exclui o mysql1
[miller @ docker4 ~ ] $ docker volume ls
DRIVER VOLUME NAME
local 330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919
o volume mysql local # ainda está lá. Crie um contêiner mais tarde e ainda use este volume
# Como você pode ver, crie um container novamente. Se você ainda usa o mesmo volume. Você pode continuar usando os dados originais. Não há perda.
[Miller @ docker4 ~] $ estivador prazo -d --name = mysql2 -v mysql: / var / lib / mysql -e MYSQL_ALLOW_EMPTY_PASSWORD = true daocloud.io/library/ mysql f9cfe55e7e6d85a6c44bc177fb324051e5735e80dbf30c5224cbfd0c7f844181
[Miller @ docker4 ~] $ estivador exec -é mysql2 mysql - u root Bem-vindo ao monitor MySQL. Os comandos terminam com; ou \ g. Seu ID de conexão MySQL é 8 Versão do servidor: 8.0 . 19 MySQL Community Server - GPL Copyright (c) 2000 , 2020 , Oracle e / ou suas afiliadas. Todos os direitos reservados. Oracle éuma marca registrada da Oracle Corporation e / ou de suas afiliadas. Outros nomes podem ser marcas comerciais de seus respectivos proprietários. Digite ' help; ' ou ' \ h ' para obter ajuda. Digite ' \ c ' para limpar a instrução de entrada atual. mysql > show database; + -------------------- + | Banco de dados | + -------------------- + | estivador | | information_schema | | mysql | | performance_schema | | sys | + -------------------- + 5 linhas em conjunto ( 0,01 s)