Introdução ao

docs.docker.com

Bruno Marinho dos Santos

Desenvolvedor PHP na FTD

  • telegram: @bsdev
  • linkedin: /in/bsdev

O que veremos?

O que é o Docker?

Principais Conceitos

VMs x Containers

Vantagens

Instalação

Comandos básicos de Docker

Criando imagens com Dockerfile

Ferramentas Avançadas

O que é o docker?

Docker é uma plataforma open-source escrita em GO cuja finalidade é criar ambientes isolados (Containers) para aplicações e serviços. Seu modelo de virtualização é diferente do que tradicionalmente conhecemos, pois está no nível do sistema operacional.

O que é uma Imagem?

Um dos conceitos mais importantes do Docker são as imagens, que podemos definir como: snapshots de um aplicação que podem ser instanciados, tornando-se assim containers.


O que é um Container?

Nada mais são que processos rodando em um kernel compartilhado com seu host. O benefício do container ser um processo é que esse processo consome os recursos nativos do hardware sem virtualização. O processo é virtualizado, mas o processamento não é virtualizado.

VMs x Containers

Vantagens

  • Performance
  • Portabilidade
  • Escalabilidade
  • Acabar com a história do “Na minha máquina funcionava” (Caso rode em produção também)
  • Versionar a configuração.
  • Possibilidade de replicar o ambiente de desenvolvimento em produção de forma automática e imune a erros.

Instalação

Atualmente o Docker roda apenas em maquinas com Linux 64 bits com kernel 3.8 ou maior, consequentemente seus containers terão que ser um linux 64 bits.

Para Windows e MacOS há algumas particularidades.

Para realizar a instalação do Docker basta seguir os procedimentos na documentação: https://docs.docker.com/engine/installation/

EASY!!!

Para subir um container precisamos de uma imagem base. Para se obter uma imagem basta acessa o https://hub.docker.com ou https://store.docker.com

Comandos básicos de Docker

Baixar uma imagem

docker image pull image_name

* Pode-se utilizar dois pontos para definir uma versão específica da imagem.

docker image pull image_name:version

Listar imagens

docker image ls

Apagar imagens

docker image rmi image_name

Criar e iniciar um container, executar um comando

docker container run -it --name container_name image_name command

Exem.:

 docker container run -it --name my-container node bash 

Criar e iniciar um container, executar comando e destruir o container

 docker container run --rm -it --name my-container node bash 

* É recomendável utilizar o parâmetro —rm , desta forma o container é removido automaticamente quando você sai dele, evitando ter containers zumbis.

Listar containers

Para listar os containers em execução

 docker container ls 

No caso de precisar ver todos os containers existentes só adicionar -a

 docker container ls -a 

Apagar um container

 docker container rm container_name 

Volumes

 docker container run -it --name my-container -v /home/exemple:/data node bash 

Expondo Portas

 docker container run -it --name my-container -p 8080:8080 node bash 

Obter o IP de um container

 docker container inspect container_name 

Criando imagens com Dockerfile

FROM ubuntu:16.04
MAINTAINER bsdev bmsrox@gmail.com
RUN apt-get update && apt-get -y install apache2 && apt-get clean

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/run/
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80
WORKDIR /var/www/html
ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Para construir a imagem a partir de um Dockerfile é só executar o seguinte comando:

docker image build -t image_name .

Ferramentas Avançadas

  • Docker Compose: uma ferramenta para a definição e execução de aplicativos Docker multi-containers
  • Docker Swarm: ferramenta nativa de clusterização que torna um pool de hosts Docker em um único host Docker virtual
  • Docker Cloud: deploying de clusters e serviços para provedores de serviço cloud (AWS, DigitalOcean etc)

Quer aprender mais?

END