Você está na página 1de 27

O que Container?

O projeto LXC (Linux Container) nasceu em agosto de 2008.

No inicio, o site oficial trazia a seguinte frase: LXC,


chroot com esteroides. O objetivo do projeto era ser
uma alternativa a j consolidada tecnologia de chroot,
sendo um meio termo entre mquina virtual e chroot,
possibilitando a criao de um ambiente mais prximo
possvel de uma instalao Linux sem a necessidade de
um kernel separado.

Algumas das features do LXC


so
Kernel Namespaces:
Apparmor and
SELinux:
Seccomp policies:
Chroots (pivot_root):
Kernel Capabilities:
Cgroups:

O que Docker?
Primeiro temos que definir o que no Docker:
Docker no um sistema de virtualizao tradicional.

Mas por que que o Docker


to legal?

O Docker possibilita o empacotamentode uma aplicao ou ambiente


inteiro dentro de um container, e a partir desse momento o ambiente
inteiro torna-se portvel para qualquer outro Host que contenha o
Docker instalado.

Como o Docker faz isso?


Ele trabalha utilizando cliente e
servidor
Podemos ver na imagem abaixo como o Workflow dentro do Docker.

Como Funciona o Filesystem no


Docker?
O sistema de arquivos do Docker chamado delayered, ou seja, um
sistema de arquivo em camadas, o que isso quer dizer?
Um sistema de arquivo comum, possui basicamente duas camadas:
bootfs
rootfs

Quando o sistema iniciado ele carrega o rootfs


primeiramente em modo somente leitura, verifica sua
integridade e em seguida remonta-o como leitura/escrita e
assim fica disponvel
para
o usurio/aplicao.
como
um sistema
tradicional

Como o filesystem no
docker

Como podem notar o bootfs em vez de ser nico por


sistema/container, compartilhado entre eles, mas o
rootfs isolado por camadas.

Um detalhe nessa arquitetura que a cada modificao


e commit do container gerada uma nova camada

Lembrando que uma imagem pode ser utilizada


diversas vezes

O que Dockerfile
O Docker possui alguns recursos que permitiram sua
popularizao pelo mundo a fora, alm da API de integrao, o
Docker permite que possamos criar imagens a partir de um
arquivo de definio, esse arquivo chama-se Dockerfile.
Uma imagem nada mais do que um ambiente totalmente
encapsulado e pronto para ser replicado onde desejar.
Em resumo, o Dockerfile um arquivo texto com instrues,
comandos e passos que voc executaria manualmente,
basicamente o Docker executa uma receita de bolo.

Atravs do comando docker build, o Docker realizar a


execuo desses passos e no final da execuo ele
encapsula cada layer gerada para dentro da imagem.
RUN yum update
Onde:
RUN: a instruo;
yum update: Argumento que ser executado.

Exemplo de Dockerfile completo


# VERSION 0.1
FROM ubuntu
RUN echo foo > bar
# Saida parecida com ===> 907ad6c2736f
FROM ubuntu
RUN echo moo > oink
# Saida parecida com ===> 695d7793cbe4
EXPOSE 5900
# Voc ter duas imagens, 907ad6c2736f com /bar, e 695d7793cbe4 com
# /oink.
Basta copiar esse cdigo acima em um arquivo chamado Dockerfile e em seguir executar
o comando: docker build -t minhaimagem . . E pronto, ser criada uma imagem com o
nome de minhaimagem, basta usa-la para o que precisar.

Instalando o Docker
Debian
Usurios que tem o seu sistema baseado em Debian
podem usar oapt-get ou o aptitude:
sudo apt-get update
sudo apt-get install docker.io

Instalando o Docker
RedHat
Usurios que tem o seu sistema baseado em RedHat
podem usar oyum:
yum install docker

Na instalao default de ambiente de Docker as


configuraes principais de seus contineres ficam
em/var/lib/dockeraqui voc pode encontrar o .json de
todos os seus containers com suas respectivas
configuraes, em nossos prximos posts estaremos
mostrando o que significa cada parmetro e como
podemos melhorar a performance de nosso ambiente.

docker attach Acessar dentro do container e trabalhar a partir dele.


docker build A partir de instrues de um arquivo Dockerfile eu possa criar uma imagem.
docker commit Cria uma imagem a partir de um container.
docker cp
Copia arquivos ou diretrios do container para o host.
docker create Cria um novo container.
docker diff Exibe as alteraes feitas no filesystem do container.
docker events Exibe os eventos do container em tempo real.
docker exec Executa uma instruo dentro do container que est rodando sem precisar atachar nele.
docker export Exporta um container para um arquivo .tar.
docker history Exibe o histrico de comandos que foram executados dentro do container.
docker images Lista as imagens disponveis no host.
docker import Importa uma imagem .tar para o host.
docker info Exibe as informaes sobre o host.
docker inspect Exibe r o json com todas as configuraes do container.
docker kill Da Poweroff no container.
docker load Carrega a imagem de um arquivo .tar.
docker login Registra ou faz o login em um servidor de registry.
docker logout Faz o logout de um servidor de registry.
docker logs Exibe os logs de um container.
docker port Abre uma porta do host e do container.

docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker
docker

pause Pausa o container.


ps Lista todos os containers.
pull Faz o pull de uma imagem a partir de um servidor de registry.
push Faz o push de uma imagem a partir de um servidor de registry.
rename Renomeia um container existente.
restart Restarta um container que est rodando ou parado.
rm Remove um ou mais containeres.
rmi Remove uma ou mais imagens.
run Executa um comando em um novo container.
save Salva a imagem em um arquivo .tar.
search Procura por uma imagem no Docker Hub.
start Iniciaum container que esteja parado.
stats Exibe informaes de uso de CPU, memria e rede.
stop Para um container que esteja rodando.
tag Coloca tag em uma imagem para o repositorio.
top Exibe os processos rodando em um container.
unpause Iniciaum container que est em pause.
version Exibe as verses de API, Client e Server do host.
wait Aguarda o retorno da execuo de um container para iniciar esse container.

Esses so todos os comandos que possumos na verso 1.6.2 do Docker.

Administrando um Container

Temos um container com Apache dentro, precisamos


saber:
Como saber quais containers possuo?
Quais foram os ltimos logs desse container?
Em que porta est executando o container?
Que comando tenho que executar para parar e
iniciar o container?
Como sei que o container est no ar?

Para criar/iniciar um container voc pode utilizar o


seguinte comando:
docker
run
-d -pmapear
80:80 httpd
Podemos
ainda,
uma pasta do host para dentro do

container, isso far com que o container compartilhe com o


host uma determinada pasta
docker run -d -p 80:80 -v /var/www/html:/var/www/html httpd
Por padro, a pasta mapeada recebe permisso de leitura e
escrita, mas possvel fazer com que essemapeamento
seja somente leitura, para isso basta adicionar :ro no final:
docker run -d -p 80:80 -v
/var/www/html:/var/www/html:rohttpd

Como saber quais


containers possuo?
Voc pode executar o comando:docker ps -a, isso far
com que seja listado todos os containers que voc
possui no host onde est sendo executado o comando
(ou onde est apontando o Docker Client)

Quais foram os ltimos logs desse container?

Na listagem do comando acima, poder ser visto o id do


container, tendo essa informao, basta executar o
comando:docker logs containerid. Esse comando
retornar na tela os ltimos eventos ocorridos dentro do
container

Em que porta est executando


o container?
A forma mais simples de saber isso executando o
comando:docker ps, esse comando retornar vrias
informaes dos containers que estorunningno
momento, entre essas informaes podemos capturar
em qual porta do host o container est ouvindo.

Que comando tenho que executar para parar e iniciar o


container?

Isso simples,docker stopedocker start, h opes


mais drsticas comodocker kill, mas esse ltimo
recomendado apenas em ltimo caso, pois o mesmo
far com que o container seja parado de forma abrupta,
podendo causar o corrompimento do filesystem do
mesmo.

Como sei que o container


est no ar?
O comando docker ps retornar apenas os containers
que esto ativos, claro que apenas isso no quer dizer
que sua aplicao/ambiente est funcionando
corretamente, um forma de testar isso acessando seu
ambiente de fora, por exemplo, no comando que
executamos acima:docker run -d -p 80:80 httpdo
mesmo far com que sejaalocado a porta 80 do host
para o container, isso quer dizer que caso eu acesse:
http://ipdohost estarei acessando na verdade a porta 80
que est dedicada ao container, com isso estarei
acessando o site que encontra-se dentro do container, o