Docker

Basis Tecnologia da Informação S.A. - 2019

Apresentação do Docker

História

  • Projeto open-source

  • Anunciado em 15/03/2013 por Solomon Hykes

  • Em 2015 a empresa vale 1 bilhão de dólares

  • Vários projetos baseados no Docker (Rancher, Kubernetes, Mesos, …​)

Funcionamento

Tem 2 partes:

  • Cliente Docker (comando docker) para gerenciar

  • Daemon Docker (dockerd/docker-containerd) para executar

O Cliente se conecta e envia comandos ao Daemon que os executa

Rede

Cada container pode ter sua própria interface de rede

Permite conectar os containers:

  • Entre eles

  • Com mundo externo

Dois drivers por padrão:

  • Bridge

  • Overlay

Volumes

Armazenamento Persistente de Dados

docker volumes

Imagens

As imagens:

  • Servem para executar os containers

  • Contém camadas com os binários necessários para a aplicação

  • São criadas a partir de instruções em um Dockerfile

  • São armazenadas em um registro

  • São versionadas

Dockerfile exemplo

FROM openjdk:8-jre-alpine

RUN apk --no-cache add msttcorefonts-installer fontconfig && update-ms-fonts && fc-cache -f

ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS JHIPSTER_SLEEP=0 JAVA_OPTS="" HOME=/home/jhipster

# Add a jhipster user to run our application so that it doesn't need to run as root
RUN adduser -D -s /bin/sh jhipster
WORKDIR /home/jhipster
ADD entrypoint.sh entrypoint.sh
RUN chmod 755 entrypoint.sh && chown jhipster:jhipster entrypoint.sh
USER jhipster

ENTRYPOINT ["./entrypoint.sh"]
EXPOSE 8081 5701/udp
ADD *.war app.war
docker workflows

Rodar o primeiro Container

  • Rodar o container: docker container run hello-world

  • Listar o container parado: docker container ls -a

  • Remover o container: docker container rm {id/name}

Rodar um nginx

docker container run -p 8000:80 nginx

  • -p: mapeamento de portas Host → Container

docker container run -p 8000:80 -v /home/user/nginx:/usr/share/nginx/html/ nginx

  • -v: bind mount Host → Container

Criação de imagens

  • Instruções em um arquivo Dockerfile

  • Geração em estágios

  • Formato do Dockerfile:

# Comment
INSTRUCTION arguments

Principais instruções

  • FROM: Continuar a construção a partir de uma imagem existente

  • COPY: Copiar arquivo dentro da imagem

  • RUN: Executar comandos dentro da imagem

  • ENTRYPOINT: Ponto de entrada da imagem (executado na inicialização)

  • CMD: Comando adicional

Criar uma nova imagem nginx

FROM nginx
COPY index.html /usr/share/nginx/html/index.html

docker image build -t meu-nginx:1.0 .

Docker Compose

  • Ferramenta para executar aplicações multi-containers

  • Serviços definidos em um arquivo yaml

  • Permite gerenciar os containers da aplicação

Executar o Docker Compose

  • docker-compose up para iniciar os containers

Outros comandos:

  • docker-compose down parar e remover containers

  • docker-compose logs ver os logs dos containers

  • docker-compose scale escalar containers

Comandos - Containers

  • docker container ls | docker ps

  • docker container logs | docker logs

  • docker container rm

  • docker container stats

  • docker container ports

  • docker container inspect

Comandos - Imagens

  • docker image ls | docker images

  • docker image build

  • docker image pull

  • docker image push

  • docker image rm

Comandos - Compose