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.677 ]

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

Utilizando criptografia LUKS em discos externos

Docker - Containers em Linux

Leitura recomendada

Nagios 3 + NagiosQL no Ubuntu Server 12.04

Servidor Proxy - Parte I

VLAN Tagging nos sistemas GNU/Linux derivados do Red Hat

Instalando Servidor RackTables para Documentação de Rede

Site Survey Plan

  
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