Docker run vs create


92

Qual é a diferença entre os comandos docker rune docker create?

Eu costumo usar, runmas às vezes na documentação que vejo create.

Docker de --helpconta

create    Create a new container
run       Run a command in a new container

Isso significa que runé usado quando precisamos passar um comando para um novo contêiner? Qual é o objetivo createentão?

Respostas:


104

Da documentação do docker

O comando docker create cria uma camada de contêiner gravável sobre a imagem especificada e a prepara para executar o comando especificado. A ID do contêiner é então impressa em STDOUT. Isso é semelhante a docker run -d, exceto que o contêiner nunca é iniciado . Você pode então usar o comando docker start para iniciar o contêiner a qualquer momento.

Isto é útil quando você quer criar um recipiente de configuração à frente de tempo para que ele está pronto para começar quando você precisar dele. O status inicial do novo contêiner é criado.


2
Enfatizando a semelhança, --run aceita TODOS os mesmos argumentos que --create (com a adição de apenas --detach, --detach-keys e --sig-proxy), consulte docs.docker.com/v17.09 / engine / reference / commandline / run /…
Marvin

113

Tecnicamente, docker run= docker create+ docker start.


40
Na verdade, passei algumas horas aprendendo isso, docker run= docker create+ docker start+ docker attach. Sem attach, o contêiner iniciado é executado em segundo plano
webbower

19

1
U escreveu "docker run cria o contêiner (o mesmo que docker create) e o executa." <--- definição circular, e você não estabeleceu a diferença entre exec e start, e o que você chama de "executa". (E quando você diz "executa" se olharmos para a sua definição de executar no docker run, isso significa criar e executar, então você acabaria com um número infinito .. então, presumivelmente, você quer dizer algo menos do que isso quando diz "executa" .. mas então você deve distinguir "executa" de exec e iniciar, você quer dizer iniciar e executar ou apenas iniciar). Talvez -d signifique não iniciar nenhum exec. e sem -d é start e exec
barlop

8

As outras respostas têm isso coberto, mas pensei em mostrar as linhas de comando shell equivalentes porque isso deixa muito claro:

$ docker run myimage

é o mesmo que

$ docker start -a $(docker create myimage)

Aqui, docker createé usado para criar um contêiner a partir da imagem nomeada e produz o id do contêiner criado e docker starté usado para iniciar o contêiner com esse id. A -aopção faz com que o terminal seja conectado de forma que o contêiner seja executado em primeiro plano, o que é o comportamento padrão do docker run.

Um contêiner que foi criado, mas nunca iniciado terá um Createdstatus; isso pode ser visto com docker container ls -a.


6

Sou novo no docker e comecei a brincar com ele;

Minha opinião é que docker run essencialmente faz o seguinte: (na ordem de ..) docker create , docker start , docker attach , uma vez que ele se conecta imediatamente ao shell ativo depois que você executa o comando 'run' .


1
Acabei de postar um comentário acima sobre isso antes de perceber sua resposta. Eu gostaria de ter visto isso há uma hora ou mais.
webbower

-3

A execução do Docker é basicamente para executar comandos no contêiner.

docker run -it <Container Name> /bin/bash

A descrição acima é para a criação de um terminal bash. E nos faça usar comandos bash no contêiner.

Docker create é criar um contêiner a partir de uma imagem Docker.

docker create -d /var/lib:/var/lib --name docker-ubuntu ubuntu

O acima é para criar um docker um contêiner de nome "docker-ubuntu" a partir da imagem "ubuntu"


1
Você pode fazer isso docker run -it <Container name>sem fazer / bin / bash. Por exemplo, o Ruby executará automaticamente um executável chamado irb. Além disso, você pode executar run -d, que é feito com dockersamples / static-site que não faz logon. Então eu acho que não faz exec, mas apenas começa.
Barlop

com 'docker run', você pode executar se o contêiner já estiver criado e criar, em seguida, executar se não
Sergii Getman
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.