Docker · 10 min read · Feb 05, 2026

Gerenciar Contêineres Linux com Docker no Ubuntu - Página 2

4.2 Construindo imagens com um Dockerfile

O Dockerfile usa uma DSL básica com instruções para construir imagens Docker. Em seguida, usamos o comando docker build para construir uma nova imagem a partir das instruções no Dockerfile. A equipe da Docker, Inc., também publicou um tutorial de Dockerfile para ajudá-lo a aprender como construir Dockerfiles aqui.

Agora eu vou criar um arquivo docker simples que pode ser aprimorado conforme a necessidade do usuário. Primeiro, crie um diretório, suponha que dir=kishore:

mkdir kishore  
cd kishore

Agora crie um Dockerfile como:

vi Dockerfile  

& insira o conteúdo como segue:

| FROM ubuntu:12.04 MAINTAINER Srijan Kishore <[email protected]> RUN apt-get -qq update RUN apt-get -qqy install apache2 |

Agora, para abrir o contêiner personalizado, use:

sudo docker build -t="srijan/custom1" .

Ele resultará como segue:

srijan@vboxtest:~/kishore$ sudo docker build -t="srijan/custom1" .
[sudo] password for srijan: 
Sending build context to Docker daemon  2.56 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:12.04
Pulling repository ubuntu
ea7d6801c538: Download complete 
511136ea3c5a: Download complete 
65b7e9ccb809: Download complete 
f8dd6bd14f58: Download complete 
a343823119db: Download complete 
 ---> ea7d6801c538
Step 1 : MAINTAINER Srijan Kishore <[email protected]>
 ---> Running in a6135f405eb4
 ---> be97c22efa82
Removing intermediate container a6135f405eb4
Step 2 : RUN apt-get -qq update
 ---> Running in b5681cd85ba8
 ---> cbc3a95de894
Removing intermediate container b5681cd85ba8
Step 3 : RUN apt-get -qqy install apache2
 ---> Running in 5765c09b530f
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libsqlite3-0.
(Reading database ... 7551 files and directories currently installed.)
Unpacking libsqlite3-0 (from .../libsqlite3-0_3.7.9-2ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libroken18-heimdal.
Unpacking libroken18-heimdal (from .../libroken18-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libasn1-8-heimdal.
Unpacking libasn1-8-heimdal (from .../libasn1-8-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libgpg-error0.
Unpacking libgpg-error0 (from .../libgpg-error0_1.10-2ubuntu1_amd64.deb) ...
Selecting previously unselected package libgcrypt11.
Unpacking libgcrypt11 (from .../libgcrypt11_1.5.0-3ubuntu0.2_amd64.deb) ...
Selecting previously unselected package libgdbm3.
Unpacking libgdbm3 (from .../libgdbm3_1.8.3-10_amd64.deb) ...
Selecting previously unselected package libp11-kit0.
Unpacking libp11-kit0 (from .../libp11-kit0_0.12-2ubuntu1_amd64.deb) ...
Selecting previously unselected package libtasn1-3.
Unpacking libtasn1-3 (from .../libtasn1-3_2.10-1ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libgnutls26.
Unpacking libgnutls26 (from .../libgnutls26_2.12.14-5ubuntu3.8_amd64.deb) ...
Selecting previously unselected package libhcrypto4-heimdal.
Unpacking libhcrypto4-heimdal (from .../libhcrypto4-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libheimbase1-heimdal.
Unpacking libheimbase1-heimdal (from .../libheimbase1-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libwind0-heimdal.
Unpacking libwind0-heimdal (from .../libwind0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libhx509-5-heimdal.
Unpacking libhx509-5-heimdal (from .../libhx509-5-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libkrb5-26-heimdal.
Unpacking libkrb5-26-heimdal (from .../libkrb5-26-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libheimntlm0-heimdal.
Unpacking libheimntlm0-heimdal (from .../libheimntlm0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libgssapi3-heimdal.
Unpacking libgssapi3-heimdal (from .../libgssapi3-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libsasl2-2.
Unpacking libsasl2-2 (from .../libsasl2-2_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...
Selecting previously unselected package libldap-2.4-2.
Unpacking libldap-2.4-2 (from .../libldap-2.4-2_2.4.28-1.1ubuntu4.4_amd64.deb) ...
Selecting previously unselected package libcap2.
Unpacking libcap2 (from .../libcap2_1%3a2.22-1ubuntu3_amd64.deb) ...
Selecting previously unselected package libexpat1.
Unpacking libexpat1 (from .../libexpat1_2.0.1-7.2ubuntu1.1_amd64.deb) ...
Selecting previously unselected package libmagic1.
Unpacking libmagic1 (from .../libmagic1_5.09-2ubuntu0.3_amd64.deb) ...
Selecting previously unselected package file.
Unpacking file (from .../file_5.09-2ubuntu0.3_amd64.deb) ...
Selecting previously unselected package mime-support.
Unpacking mime-support (from .../mime-support_3.51-1ubuntu1_all.deb) ...
Selecting previously unselected package netbase.
Unpacking netbase (from .../netbase_4.47ubuntu1_all.deb) ...
Selecting previously unselected package libsasl2-modules.
Unpacking libsasl2-modules (from .../libsasl2-modules_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...
Selecting previously unselected package openssl.
Unpacking openssl (from .../openssl_1.0.1-4ubuntu5.16_amd64.deb) ...
Selecting previously unselected package libapr1.
Unpacking libapr1 (from .../libapr1_1.4.6-1_amd64.deb) ...
Selecting previously unselected package libaprutil1.
Unpacking libaprutil1 (from .../libaprutil1_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package libaprutil1-dbd-sqlite3.
Unpacking libaprutil1-dbd-sqlite3 (from .../libaprutil1-dbd-sqlite3_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package libaprutil1-ldap.
Unpacking libaprutil1-ldap (from .../libaprutil1-ldap_1.3.12+dfsg-3_amd64.deb) ...
Selecting previously unselected package apache2.2-bin.
Unpacking apache2.2-bin (from .../apache2.2-bin_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2-utils.
Unpacking apache2-utils (from .../apache2-utils_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package libswitch-perl.
Unpacking libswitch-perl (from .../libswitch-perl_2.16-2_all.deb) ...
Selecting previously unselected package libclass-isa-perl.
Unpacking libclass-isa-perl (from .../libclass-isa-perl_0.36-3_all.deb) ...
Selecting previously unselected package perl-modules.
Unpacking perl-modules (from .../perl-modules_5.14.2-6ubuntu2.4_all.deb) ...
Selecting previously unselected package perl.
Unpacking perl (from .../perl_5.14.2-6ubuntu2.4_amd64.deb) ...
Selecting previously unselected package apache2.2-common.
Unpacking apache2.2-common (from .../apache2.2-common_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2-mpm-worker.
Unpacking apache2-mpm-worker (from .../apache2-mpm-worker_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package apache2.
Unpacking apache2 (from .../apache2_2.2.22-1ubuntu1.6_amd64.deb) ...
Selecting previously unselected package ssl-cert.
Unpacking ssl-cert (from .../ssl-cert_1.0.28ubuntu0.1_all.deb) ...
Setting up libsqlite3-0 (3.7.9-2ubuntu1.1) ...
Setting up libroken18-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libasn1-8-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libgpg-error0 (1.10-2ubuntu1) ...
Setting up libgcrypt11 (1.5.0-3ubuntu0.2) ...
Setting up libgdbm3 (1.8.3-10) ...
Setting up libp11-kit0 (0.12-2ubuntu1) ...
Setting up libtasn1-3 (2.10-1ubuntu1.1) ...
Setting up libgnutls26 (2.12.14-5ubuntu3.8) ...
Setting up libhcrypto4-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libheimbase1-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libwind0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libhx509-5-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libkrb5-26-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libheimntlm0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libgssapi3-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...
Setting up libsasl2-2 (2.1.25.dfsg1-3ubuntu0.1) ...
Setting up libldap-2.4-2 (2.4.28-1.1ubuntu4.4) ...
Setting up libcap2 (1:2.22-1ubuntu3) ...
Setting up libexpat1 (2.0.1-7.2ubuntu1.1) ...
Setting up libmagic1 (5.09-2ubuntu0.3) ...
Setting up file (5.09-2ubuntu0.3) ...
Setting up mime-support (3.51-1ubuntu1) ...
update-alternatives: using /usr/bin/see to provide /usr/bin/view (view) in auto mode.
Setting up netbase (4.47ubuntu1) ...
Setting up libsasl2-modules (2.1.25.dfsg1-3ubuntu0.1) ...
Setting up openssl (1.0.1-4ubuntu5.16) ...
Setting up libapr1 (1.4.6-1) ...
Setting up libaprutil1 (1.3.12+dfsg-3) ...
Setting up libaprutil1-dbd-sqlite3 (1.3.12+dfsg-3) ...
Setting up libaprutil1-ldap (1.3.12+dfsg-3) ...
Setting up apache2.2-bin (2.2.22-1ubuntu1.6) ...
Setting up apache2-utils (2.2.22-1ubuntu1.6) ...
Setting up libclass-isa-perl (0.36-3) ...
Setting up ssl-cert (1.0.28ubuntu0.1) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
Setting up libswitch-perl (2.16-2) ...
Setting up perl-modules (5.14.2-6ubuntu2.4) ...
Setting up perl (5.14.2-6ubuntu2.4) ...
update-alternatives: using /usr/bin/prename to provide /usr/bin/rename (rename) in auto mode.
Setting up apache2.2-common (2.2.22-1ubuntu1.6) ...
Enabling site default.
Enabling module alias.
Enabling module autoindex.
Enabling module dir.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module status.
Enabling module auth_basic.
Enabling module deflate.
Enabling module authz_default.
Enabling module authz_user.
Enabling module authz_groupfile.
Enabling module authn_file.
Enabling module authz_host.
Enabling module reqtimeout.
Setting up apache2-mpm-worker (2.2.22-1ubuntu1.6) ...
invoke-rc.d: policy-rc.d denied execution of start.
Setting up apache2 (2.2.22-1ubuntu1.6) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
 ---> 634855a43331
Removing intermediate container 5765c09b530f
Successfully built 634855a43331
srijan@vboxtest:~/kishore$

Agora vamos dar uma olhada na nossa nova imagem. Podemos fazer isso usando o comando docker images.

docker images srijan/custom1
srijan@vboxtest:~/kishore$ docker images srijan/custom1
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
srijan/custom1      latest              634855a43331        About a minute ago   277.4 MB
srijan@vboxtest:~/kishore$

Aqui você encontrará que as imagens terão, por padrão, o apache2 instalado. Vamos verificar isso como:

docker run -t -i srijan/apache2:webserver /bin/bash

Agora você entrará no novo contêiner com o apache2 com 12.04ubuntu pré-instalado.

5 Mudança de hostname

Suponha que você queira mudar o hostname ou queira um hostname personalizado, por exemplo, no meu caso server1.example.com

Eu vou usar

docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash

Ele resultará no contêiner da imagem como

srijan@vboxtest:~/kishore$ docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash
root@server1:/# hostname -f
server1.example.com
root@server1:/#

6 Comandos úteis para docker

  • pull (pull é usado para puxar uma imagem ou um repositório do registro)
    ex.
docker run -i -t ubuntu /bin/bash
  • commit (commit é usado para salvar o contêiner)
    ex.
docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528
  • cp (Copiar arquivos/pastas do sistema de arquivos de um contêiner para o caminho do host. Os caminhos são relativos à raiz do sistema de arquivos.)
    ex.
docker cp CONTAINER:PATH HOSTPATH

onde CONTAINER é o contêiner & copiar arquivos/pastas do PATH para o HOSTPATH

  • start e stop um Contêiner:
docker start 4386fb97867d
docker stop 4386fb97867d

onde 4386fb97867d é o número do seu contêiner

  • export (Exportar o conteúdo de um sistema de arquivos como um arquivo tar para STDOUT)
docker export 4386fb97867d > latest.tar
  • import (Criar uma imagem de sistema de arquivos vazia e importar o conteúdo do tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) para ela, depois opcionalmente tagueá-la.)
docker import http://example.com/exampleimage.tgz

Importar de um arquivo local:

Importar para o docker via pipe e stdin.

cat exampleimage.tgz | sudo docker import - exampleimagelocal:new

Importar de um diretório local:

sudo tar -c . | sudo docker import - exampleimagedir

  • history (Mostrar o histórico de uma imagem)
docker history [OPTIONS] IMAGE
sudo docker history  ea7d6801c538
  • images (Ele mostrará as imagens)
docker images [OPTIONS] [NAME]

Ele segue algumas opções como

-a, –all=false Mostrar todas as imagens (por padrão, filtrar as camadas de imagem intermediárias)
-f, –filter=[]: Fornecer valores de filtro (ou seja, ‘dangling=true’)
–no-trunc=false Não truncar a saída
-q, –quiet=false Mostrar apenas IDs numéricos

  • info (Exibir informações do sistema)
srijan@VE130214:~$ sudo docker info
srijan@vboxtest:~$ sudo docker info
Containers: 20
Images: 65
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 105
Execution Driver: native-0.2
Kernel Version: 3.13.0-30-generic
WARNING: No swap limit support
  • inspect (Retornar informações de baixo nível sobre um contêiner/imagem)
docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]
  • kill (Matar um contêiner em execução/enviar SIGKILL, ou sinal especificado)
docker kill [OPTIONS] CONTAINER [CONTAINER...]
  • login (Registrar ou fazer login em um servidor de registro docker, se nenhum servidor for especificado “ https://index.docker.io/v1/ “ é o padrão.)
docker login localhost:8080  

Ele fará login em um registro auto-hospedado.

  • logs (Buscar os logs de um contêiner)
docker logs CONTAINER
  • ps (Listar contêineres)
docker ps [OPTIONS]

Ele tem opções como:

-a, –all=false Mostrar todos os contêineres. Apenas contêineres em execução são mostrados por padrão.
–before=”” Mostrar apenas contêiner criado antes do Id ou Nome, incluir não em execução.
-l, –latest=false Mostrar apenas o contêiner mais recentemente criado, incluir não em execução.
-n=-1 Mostrar n últimos contêineres criados, incluir não em execução.
–no-trunc=false Não truncar a saída
-q, –quiet=false Exibir apenas IDs numéricos
-s, –size=false Exibir tamanhos
–since=”” Mostrar apenas contêineres criados desde Id ou Nome, incluir não em execução.

  • push (Enviar uma imagem ou um repositório para o registro)
docker push NAME[:TAG]
  • restart (Ele reiniciará um contêiner em execução)
docker restart [OPTIONS] CONTAINER [CONTAINER...]
  • rm (Ele removerá um ou mais contêineres)
docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • rmi (Ele removerá uma ou mais imagens)
docker rmi IMAGE [IMAGE...]
  • run (Executar um comando em um novo contêiner)
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Ele tem as seguintes opções:

-a, –attach=[] Anexar ao stdin, stdout ou stderr.
-c, –cpu-shares=0 Participações de CPU (peso relativo)
–cidfile=”” Escrever o ID do contêiner no arquivo
-d, –detach=false Modo destacado: Execute o contêiner em segundo plano, imprima o novo ID do contêiner
–dns=[] Definir servidores dns personalizados
–dns-search=[] Definir domínios de pesquisa dns personalizados
-e, –env=[] Definir variáveis de ambiente
–entrypoint=”” Sobrescrever o ponto de entrada padrão da imagem
–env-file=[] Ler um arquivo delimitado por linha de variáveis ENV
–expose=[] Expor uma porta do contêiner sem publicá-la para o seu host
-h, –hostname=”” Nome do host do contêiner
-i, –interactive=false Manter stdin aberto mesmo se não estiver anexado
–link=[] Adicionar link a outro contêiner (nome:alias)
–lxc-conf=[] (apenas driver lxc) Adicionar opções lxc personalizadas –lxc-conf=”lxc.cgroup.cpuset.cpus = 0,1”
-m, –memory=”” Limite de memória (formato: , onde unidade = b, k, m ou g)
–name=”” Atribuir um nome ao contêiner
–net=”bridge” Definir o modo de rede para o contêiner
‘bridge’: cria uma nova pilha de rede para o contêiner na ponte docker
‘none’: sem rede para este contêiner
‘container:’: reutiliza outra pilha de rede do contêiner
‘host’: usa a pilha de rede do host dentro do contêiner
-p, –publish=[] Publicar a porta de um contêiner para o host
formato: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
(use ‘docker port’ para ver o mapeamento real)
-P, –publish-all=false Publicar todas as portas expostas para as interfaces do host
–privileged=false Dar privilégios estendidos a este contêiner
–rm=false Remover automaticamente o contêiner quando ele sair (incompatível com -d)
–sig-proxy=true Proxificar todos os sinais recebidos para o processo (mesmo em modo não tty)
-t, –tty=false Alocar um pseudo-tty
-u, –user=”” Nome de usuário ou UID
-v, –volume=[] Montar um volume (por exemplo, do host: -v /host:/container, do docker: -v /container)
–volumes-from=[] Montar volumes do(s) contêiner(es) especificado(s)
-w, –workdir=”” Diretório de trabalho dentro do contêiner

  • save (Salvar uma imagem em um arquivo tar (transmitido para stdout por padrão)
docker save IMAGE
  • search (Pesquisar o índice docker por imagens)
docker search TERM
  • tag (Taguear uma imagem em um repositório)
docker tag [OPTIONS] IMAGE [REGISTRYHOST/][USERNAME/]NAME[:TAG]
  • top (Consultar os processos em execução de um contêiner)
docker top CONTAINER [ps OPTIONS]
  • version (Mostrar as informações da versão do docker.)
sudo docker version
srijan@vboxtest:~$ sudo docker version
[sudo] password for srijan: 
Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 990021a
Server version: 1.0.1
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 990021a

6 Resumo

Eu tentei torná-lo mais familiar com o docker, espero que este guia ajude você a entender o docker e utilizar o docker em seus ambientes de teste/produção.

Para mais informações, consulte http://www.docker.com/

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.