Docker - Containers em Linux (parte 2)

Vamos para a segunda parte deste artigo, que tem como foco abordar mais alguns comandos de gerenciamento de containers e também mostrar o gerenciamento de imagens de containers no Docker. Sendo assim, mãos à obra.

[ Hits: 7.921 ]

Por: Bruno Bueno da Silva em 22/09/2016


O que é um Docker Hub



É um repositório público e privado, mantido pelo próprio Docker. Onde podemos disponibilizar e compartilhar nossas imagens de container, simples assim.

Obs.: pode ser acessado via url (hub.docker.com).

Aproveita e já crie uma conta lá no DockerHub, agora mesmo, utilizaremos ela em breve.

Por enquanto, vamos começar a brincar com um cara que é muito interessante que se chama DockerFile. DockerFile nada mais é que um arquivo com instruções para criar um container. Vamos partir pra prática, para facilitar o entendimento.

# mkdir /dockerfile ; cd /dockerfile ; vim Dockerfile


FROM ubuntu
MAINTAINER Bruno Bueno brunobueno87@gmail.com
RUN apt-get update && apt-get install apache2 -y && apt-get clean
EXPOSE 80

Salve o arquivo e vamos fazer o "build" desse dockerfile:

# docker build -t pri_image:1.0

Logo após, vai printar no seu terminal algo parecido com:

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu
 ---> bd3d4369aebc
Step 2 : MAINTAINER Bruno Bueno brunobueno87@gmail.com
 ---> Using cache
 ---> 8cb2766acf6d
Step 3 : RUN apt-get update && apt-get install apache2 -y && apt-get clean
 ---> Running in 0b0fe15e4ffa
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [95.7 kB]
Get:3 http://archive.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial/main Sources [1103 kB]
Get:5 http://archive.ubuntu.com/ubuntu xenial/restricted Sources [5179 B]
Get:6 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]
.....
....
debconf: falling back to frontend: Readline
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Processing triggers for systemd (229-4ubuntu7) ...
Processing triggers for sgml-base (1.26+nmu4ubuntu1) ...
 ---> 622b14ceadf0
Removing intermediate container 0b0fe15e4ffa
Step 4 : EXPOSE 80
 ---> Running in dfa594b2d07a
 ---> 0ebd0112da72
Removing intermediate container dfa594b2d07a
Successfully built 0ebd0112da72

Ao final do build desse dockerfile básico que fizemos, vamos verificar se a nova imagem baseada nesse dockerfile existe:

# docker images
REPOSITORY     TAG           IMAGE ID       CREATED          SIZE
pri_image      1.0           0ebd0112da72   11 seconds ago   265.1 MB
ubuntu         latest        bd3d4369aebc   2 days ago       126.6 MB
apache_lab     1.0           b994948dbab5   2 days ago       193.9 MB
debian         latest        1b01529cc499   4 weeks ago      125.1 MB
graylog2/allinone   latest   37344ed703dc   5 months ago     870.3 MB

Como mostra a primeira linha, estamos vendo que a imagem foi criada. Vamos iniciar o container para verificar se está tudo de acordo, conforme solicitamos via dockerfile:

# docker run -ti pri_image:1.0 .


# /etc/init.d/apache2 start

* Starting Apache httpd web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message


Certo, saia do container sem matar ele e rode o docker ps:

CONTAINER ID    IMAGE           COMMAND       CREATED          STATUS            PORTS        NAMES
e19650383ab2    pri_image:1.0   "/bin/bash"   24 seconds ago   Up 21 seconds     80/tcp       elated_bell
7155da1ddf08    apache_lab:1.0  "/bin/bash"   2 days ago       Up About an hour  0.0.0.0:8081->80/tcp   thirsty_noether

Blz, isso mostra que nosso primeiro dockerfile está funcionando plenamente, bem básico. Mas para fins didáticos, já dá para iniciar e entender o que é um dockerfile.

Vamos detalhar nosso primeiro dockerfile:
  • FROM ubuntu → Imagem que utilizaremos na criação do container;
  • MAINTAINER Bruno Bueno brunobueno87@gmail.com → Responsavel pelo DockerFile;
  • RUN apt-get update && apt-get install apache2 -y && apt-get clean → Comando que eu quero que rode já na criação do container;
  • EXPOSE 80 → Em qual porta o container vai estar excutando.

Logo em seguida, nós "buildamos" esse dockerfile. Vamos entender o comando;

# docker build -t pri_image:1. .0
  • docker build → "Buildar" arquivos dockerfile
  • -t → Tagear a imagem especificando o nome pri_image: e depois a versão dessa imagem 1.0
  • . → Esse ponto especifica o diretório corrente, o local onde estamos que contém o dockerfile. Não é necessário especificar o arquivo, apenas o diretório onde o arquivo se encontra.

Tudo certo até aqui? Espero que sim.

DockerFile é uma maneira bem simples de subir imagens personalizadas já na sua criação, sem contar que como é apenas um arquivo de texto, você pode enviar para o seu time via email sem dificuldade, de forma que todos vão saber exatamente o que esta rolando nesse container.

No caso de ter algum paranoico que desconfia de tudo e fica com o pé atrás para baixar aquela imagem que você disponibilizou no seu dockerhub, ou caso você é o paranoico em questão, priorize imagens em que o mantenedor disponibiliza o dockerfile, e assim você vai saber todo o processo utilizado para a criação de determinada imagem. Seguindo o jogo, vamos voltar ao dockerhub.

Agora, imagine o que você queira disponibilizar essa imagem que você está trabalhando, que já está editada tudo certinho, tudo configurado e gostaria de ter acesso a essa imagem de qualquer lugar, para isso utilizaremos o dockerhub.

Espero que você já tenha criado a sua conta conforme solicitado anteriormente, pois será necessário para seguir em frente. Agora, no seu terminal do dockerhost, rode o comando docker login:

# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (sognux):
Password:
Login Succeeded


Obviamente, efetue login e senha conforme a conta criado no dockerhub.

Eu sei que parece muito simples e a resposta é... simples mesmo. Simplicidade é uma coisa muito comum no docker. Acredite se apareceu Login Succeeded, você já está logado na sua conta criada no dockerhub.

Uma observação importante: para subir uma imagem para o DockerHub, é necessário especificar no nome da imagem o seu nome de login no DockerHub. Por exemplo, se o seu nome de login no DockerHub é "sognux" e a sua imagem tem o nome "pri_image:1.0", para subir sua imagem para o dockerhub o nome da sua imagem deve ser: sognux/pri_image:1.0

Ou seja, seguindo nosso exemplo, para subir a imagem pri_image:1.0, devemos renomear a imagem de forma que ela atenda à especificação. Para isso, execute o comando;

# docker tag "image-id" sognux/pri_image:1.0

Rode um docker images e veja como que a nova imagem ficou disponível;

# docker images
REPOSITORY         TAG      IMAGE ID        CREATED       SIZE
pri_image          1.0      0ebd0112da72    2 hours ago   265.1 MB
sognux/pri_image   1.0      0ebd0112da72    2 hours ago   265.1 MB
ubuntu             latest   bd3d4369aebc    2 days ago    126.6 MB

Agora, já logado no dockerhub, vamos fazer o push da nossa imagem (subir para o dockerhub):

# docker push sognux/pri_image:1.0
The push refers to a repository [docker.io/sognux/pri_image]
48d07708d98c: Pushed
0cad5e07ba33: Mounted from library/ubuntu
48373480614b: Mounted from library/ubuntu
055757a19384: Mounted from library/ubuntu
c6f2b330b60c: Mounted from library/ubuntu
c8a75145fcc4: Mounted from library/ubuntu
1.0: digest: sha256:ee3708ab7fae120b6a0f9f9f5bf38f1e18e34ee24d86bdecb193514a58c40f65 size: 1569


Para verificar se a imagem foi "upada" e realmente consta no DockerHub sem acessar o browser:

# docker search sognux
NAME                 DESCRIPTION   STARS     OFFICIAL   AUTOMATED
sognux/pri_image     0
sognux/debian        0

Obs.: Caso queira, logue na sua conta do dockerhub e veja a imagem lá disponível.

Para remover uma imagem que subimos para o dockerhub;

# docker rmi -f sognux/pri_image:1.0

Rode o docker images e veja que a imagem não consta mais no nosso dockerhost. Para baixar a imagem novamente, rode o comando a seguir:

# docker pull sognux/pri_image:1.0
1.0: Pulling from sognux/pri_image
Digest: sha256:ee3708ab7fae120b6a0f9f9f5bf38f1e18e34ee24d86bdecb193514a58c40f65
Status: Downloaded newer image for sognux/pri_image:1.0


Conclusão

Por enquanto, é isso.

A dica é: treine bem esses comandos somando com os comandos da primeira parte e, principalmente, subir lab em VM, para que você consiga se familiarizar, é importante refazer o mesmo cenário em container.

É de extrema importância para começar a migrar para containers.

No próximo artigo, vou abordar mais alguns comandos úteis de administração, envolvendo a parte de rede do Docker, gerenciamento de volumes que é bem interessante, e a parte de limitação de hardware.

Sendo assim, enquanto a próxima parte não sai, pratique bastante.
Até a parte 3 .... =]

Página anterior    

Páginas do artigo
   1. Mais comandos de administração
   2. O que é um Docker Hub
Outros artigos deste autor

Docker - Containers em Linux

Utilizando criptografia LUKS em discos externos

Leitura recomendada

Como configurar o NGinx em 3 passos

My Traceroute (MTR) , uma ferramenta de diagnóstico de rede

Redes de Computadores · IPtables · Endereços IPs - Explicações básicas

Instalando o oVirt 4.3 Single Host

Montagem de um cluster com o MOSIX

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts