Você usa start to a container, se você já havia parado esse container. Você usa run para uma imagem, se tiver removido um contêiner dessa imagem. Este é o uso básico, eu acho.
CodeSlave 2/19/19
Respostas:
350
Esta é uma pergunta muito importante e a resposta é muito simples, mas fundamental:
Executar: crie um novo contêiner de uma imagem e execute o contêiner. Você pode criar N clones da mesma imagem. O comando é:
docker run IMAGE_IDe nãodocker run CONTAINER_ID
Início: inicie um contêiner parado anteriormente. Por exemplo, se você parou um banco de dados com o comando docker stop CONTAINER_ID, é possível reiniciar o mesmo contêiner com o comando docker start CONTAINER_IDe os dados e configurações serão os mesmos.
É necessário criar um volume para o contêiner parado para os dados persistirem?
Logan Phillips
A diferença do ciclo de vida do @LoganPhillips entre arquivos gravados na camada de sistema de arquivos de união padrão do contêiner e arquivos gravados em volumes é: os dados da camada de sistema de arquivos de união do contêiner são sempre perdidos ao remover o contêiner ( docker rm container_id). Por outro lado, os dados de volumes sobrevivem à remoção do contêiner, a menos que a -vopção seja explicitamente fornecida na linha de comando. O local do volume no sistema host pode ser inspecionado diretamente. Veja este artigo
Stphane 11/05/19
Sobre o processo, precisa & no final da runlinha de comando? Eu preciso dele como um serviço countinous (24 horas)
Peter Krauss
Então, qual é o propósito de "docker create"? Como / quando isso seria usado?
@Tarik não você tem que adicionar -ia docker runpara um processo interativo? Quero dizer, o docker run precisa de uma imagem para executar um contêiner.
VonC
10
Parece haver espaço para alguém escrever uma resposta mais elaborada. A resposta não parece muito explicativa.
Considere que você possui uma imagem de jogo (iso) no seu computador.
Quando você run (monta sua imagem como uma unidade virtual), uma unidade virtual é criada com todo o conteúdo do jogo na unidade virtual e o arquivo de instalação do jogo é iniciado automaticamente. [Executando sua imagem do Docker - criando um contêiner e iniciando-o.]
Mas quando você stop (semelhante ao docker para), a unidade virtual ainda existe, mas interrompe todos os processos. [Como o contêiner existe até que não seja excluído]
E quando você faz start(semelhante ao docker start), a partir da unidade virtual, os arquivos dos jogos iniciam sua execução. [iniciando o contêiner existente]
Neste exemplo - A imagem do jogo é sua imagem do Docker e a unidade virtual é seu contêiner.
Isso não é bem verdade. De acordo com o documento oficial, "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(fonte: docs.docker.com/engine/reference/commandline/run )
sshh
2
runO comando cria um contêiner a partir da imagem e inicia o processo raiz nesse contêiner. Executá-lo com run --rmbandeira iria salvar-lhe a dificuldade de remover o recipiente morto inútil depois e lhe permitiria ignorar a existência de docker starte docker removecompletamente.
run O comando faz algumas coisas diferentes:
docker run --name dname image_name bash -c "whoami"
Cria um contêiner a partir da imagem. Nesse ponto, o contêiner teria um ID, pode ter um nome, se for dado, aparecerá emdocker ps
Inicia / executa o processo raiz do contêiner. No código acima, isso seria executado bash -c "whoami". Se alguém correrdocker run --name dname image_name sem um comando para executar o contêiner, entrará no estado parado imediatamente.
Depois que o processo raiz é concluído, o contêiner é parado. Neste ponto, é praticamente inútil. Não se pode mais executar nada ou ressuscitar o contêiner. Existem basicamente duas maneiras de sair do estado parado: remova o contêiner ou crie um ponto de verificação (ou seja, uma imagem) do contêiner parado para executar outra coisa. É preciso executar docker removeantes de iniciar o contêiner com o mesmo nome.
Como remover o recipiente depois que ele é parado automaticamente? Adicione um--rmsinalizador aoruncomando:
docker run --rm --name dname image_name bash -c "whoami"
Como executar vários comandos em um único contêiner? Impedindo que esse processo raiz morra. Isso pode ser feito executando algum comando inútil no início com--detachedflag e, em seguida, usando "execute" para executar comandos reais:
execute
?Respostas:
Esta é uma pergunta muito importante e a resposta é muito simples, mas fundamental:
docker run IMAGE_ID
e nãodocker run CONTAINER_ID
docker stop CONTAINER_ID
, é possível reiniciar o mesmo contêiner com o comandodocker start CONTAINER_ID
e os dados e configurações serão os mesmos.fonte
docker rm container_id
). Por outro lado, os dados de volumes sobrevivem à remoção do contêiner, a menos que a-v
opção seja explicitamente fornecida na linha de comando. O local do volume no sistema host pode ser inspecionado diretamente. Veja este artigo&
no final darun
linha de comando? Eu preciso dele como um serviço countinous (24 horas)run
executa uma imagemstart
inicia um contêiner .O
docker run
documento menciona:Você não executa um contêiner existente, executa o docker nele (desde o docker 1.3) .
Você pode reiniciar um contêiner encerrado .
fonte
-i
adocker run
para um processo interativo? Quero dizer, o docker run precisa de uma imagem para executar um contêiner.Explicação com um exemplo:
Considere que você possui uma imagem de jogo (iso) no seu computador.
Quando você
run
(monta sua imagem como uma unidade virtual), uma unidade virtual é criada com todo o conteúdo do jogo na unidade virtual e o arquivo de instalação do jogo é iniciado automaticamente. [Executando sua imagem do Docker - criando um contêiner e iniciando-o.]Mas quando você
stop
(semelhante ao docker para), a unidade virtual ainda existe, mas interrompe todos os processos. [Como o contêiner existe até que não seja excluído]E quando você faz
start
(semelhante ao docker start), a partir da unidade virtual, os arquivos dos jogos iniciam sua execução. [iniciando o contêiner existente]Neste exemplo - A imagem do jogo é sua imagem do Docker e a unidade virtual é seu contêiner.
fonte
A resposta de daniele3004 já é muito boa.
Apenas uma rápida e suja fórmula para pessoas como eu que se mistura
run
estart
de vez em quando:docker run [...]
=docker pull [...]
+docker start [...]
fonte
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(fonte: docs.docker.com/engine/reference/commandline/run )run
O comando cria um contêiner a partir da imagem e inicia o processo raiz nesse contêiner. Executá-lo comrun --rm
bandeira iria salvar-lhe a dificuldade de remover o recipiente morto inútil depois e lhe permitiria ignorar a existência dedocker start
edocker remove
completamente.run
O comando faz algumas coisas diferentes:docker ps
bash -c "whoami"
. Se alguém correrdocker run --name dname image_name
sem um comando para executar o contêiner, entrará no estado parado imediatamente.docker remove
antes de iniciar o contêiner com o mesmo nome.Como remover o recipiente depois que ele é parado automaticamente? Adicione um
--rm
sinalizador aorun
comando:Como executar vários comandos em um único contêiner? Impedindo que esse processo raiz morra. Isso pode ser feito executando algum comando inútil no início com
--detached
flag e, em seguida, usando "execute" para executar comandos reais:Por que precisamos
docker stop
então? Para parar esse contêiner remanescente que lançamos no snippet anterior com o comando infinitotail -f /dev/null
.fonte