Executar uma imagem do Docker como um contêiner


604

Criei uma imagem do Docker a partir de um arquivo docker. Vejo que a imagem foi criada com sucesso, mas o que faço com ela? Não deveria ser capaz de executar como um contêiner?

Respostas:


855

A maneira específica de executá-lo depende se você deu à imagem uma etiqueta / nome ou não.

$ docker images
REPOSITORY          TAG                 ID                  CREATED             SIZE
ubuntu              12.04               8dbd9e392a96        4 months ago        131.5 MB (virtual 131.5 MB)

Com um nome (vamos usar o Ubuntu ):

$ docker run -i -t ubuntu:12.04 /bin/bash

Sem nome, basta usar o ID:

$ docker run -i -t 8dbd9e392a96 /bin/bash

Consulte a referência de execução do Docker para obter mais informações.


4
Portanto, os nomes amigáveis ​​para humanos impressos em 'NAME' docker ps -anão são úteis aqui?
ThorSummoner

11
docker pslista recipientes, não imagens. Se você deseja criar uma imagem a partir de um contêiner, é necessário docker commit. Você pode usar o NAME no commit (por exemplo docker commit _NAME_ _imagename_)
Andy

8
@ Andy Por que usamos / bin / bash no final? Eu também sou novo
Raheel 07/07

6
@RaheelKhan Porque a imagem do docker precisa de algo para ser executada. Você pode substituir isso por um programa que você instalou. / bin / bash é apenas um shell útil que já está instalado.
Ryan Shillington

Se você precisar adicionar uma variável de ambiente, poderá executar o docker -i -t -e ROOT_PASSWORD = root ubuntu: 12.04
Balaji Radhakrishnan

70

Execute os seguintes passos:

  1. $ docker images

    Você obterá uma lista de todas as imagens locais do Docker com as tags especificadas.

  2. $ docker run image_name:tag_name

    Se você não especificou tag_name, a imagem será executada automaticamente com a tag 'mais recente'.

    Em vez de image_name, você também pode especificar um ID da imagem (sem tag_name).


35
  • Para listar as imagens do Docker

    $ docker images
    
  • Se seu aplicativo deseja executar a porta 80 e você pode expor uma porta diferente à ligação local, diga 8080:

    $ docker run -d --restart=always -p 8080:80 image_name:version
    

21

Você pode ver suas imagens disponíveis usando:

docker images

Em seguida, você pode executar no modo desconectado para que seu terminal ainda possa ser utilizado. Você tem várias opções para executá-lo usando um nome de repositório (com ou sem uma tag) ou ID da imagem:

docker run -d repository
docker run -d repository:tag
docker run -d image_id

Em seguida, você pode verificar se o contêiner está em execução usando

docker ps

docker psfornece um ID de contêiner. Você pode usá-lo ou apenas os 2/3 dos primeiros caracteres para entrar no seu contêiner usando:

docker exec -it container_id /bin/bash

E você pode parar usando docker stop container_ide docker rm container_id.

Você também pode executar seu contêiner com -rmargumentos; portanto, se você parar o contêiner, ele será removido automaticamente.


1
A opção --rm (nota: 2 traços não únicos) é ouro !!!, meu sistema está cheio de contêineres (mortos) parados.
Johan Snowgoose

13

Obtenha o nome ou o ID da imagem que você deseja executar, com este comando:

docker images

O comando de execução do Docker é usado da seguinte maneira:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Abaixo, incluí as opções de envio, nome, publicação, volume e reinicialização antes de especificar o nome ou ID da imagem:

docker run -d --name  container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name

Onde:

--detach , -d        Run container in background and print container ID
--name                Assign a name to the container
--publish , -p        Publish a container’s port(s) to the host
--volume , -v        Bind mount a volume
--restart            Restart policy to apply when a container exits

Para obter mais informações, consulte a referência oficial da execução do Docker .


5

Aqui está um exemplo para executar um serviço webdev no Docker. O nome da imagem é morrisjobke / webdav . Você pode retirá-lo do Docker Hub .

Depois de executar essas imagens, você poderá acessar a instância do WebDAV em http://localhost:8888/webdav. Internamente, a pasta /var/webdavé usada como raiz do WebDAV.

Você pode executar este contêiner da seguinte maneira:

$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav

Re "executar um serviço webdev" : Você quer dizer "executar um serviço WebDAV" ? Ou "executar um serviço de desenvolvimento web" ?
Peter Mortensen

5

Eu tive o mesmo problema. Executei minha imagem do Docker e ela criou um contêiner com um CONTAINER_ID específico. Eu queria trabalhar com o mesmo contêiner:

Primeiro, execute sua imagem do Docker:

docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning

Em seguida, liste todos os recipientes que você criou:

sudo docker ps -a

E selecione o container com o qual deseja trabalhar (o meu é 167ddd6d7f15):

sudo docker start -ai 167ddd6d7f15

4

Desde que você criou uma imagem do Dockerfile, a imagem atualmente não está no estado ativo. Para funcionar, você precisa executar esta imagem dentro de um contêiner.

O $ docker imagescomando descreve quantas imagens estão disponíveis no momento no repositório local. e

docker ps -a

mostra quantos contêineres estão disponíveis no momento, ou seja, a lista de contêineres ativos e encerrados.

Existem duas maneiras de executar a imagem no contêiner:

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

No modo desanexado:

-d=false: Detached mode: Run container in the background, print new container id

No modo interativo:

-i :Keep STDIN open even if not attached

Aqui está o comando de execução do Docker

$ docker run image_name:tag_name

Para obter mais esclarecimentos sobre a execução do Docker, visite a referência de execução do Docker .

É o melhor material para entender o Docker.


2

Para visualizar uma lista de todas as imagens em seu host Docker, execute:

  $ docker images
   REPOSITORY          TAG           IMAGE ID            CREATED             SIZE
   apache_snapshot     latest        13037686eac3        22 seconds ago      249MB
   ubuntu              latest        00fd29ccc6f1        3 weeks ago         111MB

Agora você pode executar a imagem do Docker como um contêiner no modo interativo:

   $ docker run -it apache_snapshot /bin/bash

OU se você não tiver nenhuma imagem localmente, pesquise no Docker Hub uma imagem para baixar:

    $ docker search ubuntu
    NAME                            DESCRIPTION             STARS  OFFICIAL  AUTOMATED
    ubuntu                          Ubuntu is a Debian...   6759   [OK]       
    dorowu/ubuntu-desktop-lxde-vnc  Ubuntu with openss...   141              [OK]
    rastasheep/ubuntu-sshd          Dockerized SSH ser...   114              [OK]
    ansible/ubuntu14.04-ansible     Ubuntu 14.04 LTS w...   88               [OK]
    ubuntu-upstart                  Upstart is an even...   80     [OK]

Puxe a imagem do Docker de um repositório com o comando pull do docker:

     $ docker pull ubuntu

Execute a imagem do Docker como um contêiner:

     $ docker run -it ubuntu /bin/bash

0
$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED            
jamesmedice/marketplace   latest              e78c49b5f380        2 days ago          
jamesmedice/marketplace   v1.0.0              *e78c49b5f380*        2 days ago          


$ docker run -p 6001:8585 *e78c49b5f380*

1
Uma explicação estaria em ordem.
Peter Mortensen

-1

Para quem também teve o mesmo problema, mas encontrou um erro como

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"bash\": executable file not found in $PATH"

Eu adicionei um ponto de entrada que foi trabalhado para mim:

docker run -it --entrypoint /bin/sh para as imagens sem o Bash.

Exemplo (do exemplo aprovado):

run -it --entrypoint /bin/sh ubuntu:12.04

Referência: https://gist.github.com/mitchwongho/11266726

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.