Estou testando o docker pela primeira vez e ainda não tenho um "modelo mental". Iniciante total.
Todos os exemplos que estou vendo incluem a --rm
sinalização para execução, como
docker run -it --rm ...
docker container run -it --rm ...
Questão:
Por que esses comandos incluem o --rm
sinalizador? Eu pensaria que, se eu tivesse o trabalho de configurar ou baixar um contêiner com coisas boas nele, por que removê-lo? Quero mantê-lo para usar novamente.
Então, eu sei que tenho uma ideia errada do docker.
docker
docker-container
momentos correspondentes
fonte
fonte
--rm
remove o contêiner interrompido (aquele quedocker run
cria), não a imagem na qual ele foi baseado (o que você baixou).docker run --help
deve ser útil. Se você não quiser remover o contêiner , pode--rm
e é para limpar automaticamente o contêiner e remover o sistema de arquivos quando o contêiner sair e não significa remover as coisas do contêiner.Respostas:
Os contêineres são apenas uma instância da imagem que você usa para executá-los. O estado de espírito ao criar um aplicativo em contêiner não é pegar um contêiner ubuntu novo e limpo, por exemplo, e fazer o download dos aplicativos e configurações que você deseja ter nele e depois deixá-lo rodar.
Você deve tratar o contêiner como uma instância de seu aplicativo, mas seu aplicativo está embutido em uma imagem. O uso adequado seria a criação de uma imagem personalizada, onde você incorpora todos os seus arquivos, configurações, variáveis de ambiente, etc., na imagem. Leia mais sobre o Dockerfile e como isso é feito aqui
Depois de fazer isso, você tem uma imagem que contém tudo e, para usar seu aplicativo, basta executar a imagem com as configurações de porta adequadas ou outras variáveis dinâmicas, usando
docker run <your-image>
Executar contêineres com
--rm
sinalização é bom para aqueles contêineres que você usa por muito tempo apenas para realizar algo, por exemplo, compilar seu aplicativo dentro de um contêiner, ou apenas testar algo que funciona, e então você saberá que é um contêiner de curta duração e você diga ao seu daemon do Docker que, uma vez executado, apague tudo relacionado a ele e economize espaço em disco.fonte
--rm
quando o usuário fecha a janela do terminal. ou seja, não é executado deliberadamenteexit
no shell do contêiner, mas apenas fecha a janela da GUI do terminal. Percebi que os contêineres não são excluídos neste caso.O sinalizador
--rm
é usado quando você precisa que o contêiner seja excluído após a conclusão da tarefa.Isso é adequado para pequenos testes ou fins de POC e evita a dor de cabeça para tarefas domésticas.
fonte
de https://docs.docker.com/engine/reference/run/#clean-up---rm
Resumindo: é útil manter o host limpo de contêineres parados e não usados.
fonte
Eu uso
--rm
ao me conectar a contêineres em execução para realizar algumas ações, como backup de banco de dados ou cópia de arquivo. Aqui está um exemplo:docker run -v $(pwd):/mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f /mnt/docker_pg.dump1 app_db
O procedimento acima conectará um contêiner em execução chamado 'app_postgres_1' e criará um backup. Assim que o comando de backup for concluído, o contêiner será totalmente excluído.
fonte