Docker

João Daniel

A um passo do Willy Wonka dos Contêineres

Um paradigma chamado

Funciona Na Minha Máquina

  • desenvolvimento em time
    • ninguém mais desenvolve sozinho
    • diversidade de ambientes
  • deployment
  • empacote!

 

 

  • máquina virtual: uma alternativa
  • contêineres: a alternativa

software

ambiente

&

O fim do

Funciona Na Minha Máquina

Contêineres x VMs

Docker 101 - Rodando

<sudo> gpasswd -a $(id -un) docker
docker container run -it node

Simplesmente adiciona <your-user> ao grupo docker, que tem permissão de acesso ao serviço docker

Agora você está rodando um shell Node dentro de um contêiner

docker container ls

Lista vazia... O que houve com o nosso contêiner de Node?

docker container ls -a

Agora o vemos!

Docker 101 - Rodando

docker container start -i <container-identification>

Vamos rodar o nosso contêiner antigo novamente! Mas.. que nome é esse?

docker container rm <container-identification>

Tchauzinho, contêiner!

Docker 101 - Rodando

docker container run -it --name mynode node

Que agradável nomear nossas coisas...

docker container rm mynode

Tchauzinho, mynode

Docker 101 - Rodando

Docker 102 - Criando

  • encaixe perfeito
  • botão PLAY

Engatinhar antes de andar

const koa = require('koa'),
      app = new koa(),
      port = process.env.PORT || 8888;

app.use(async ctx => {
    ctx.body = "Hello, world!";
});

app.listen(port, () => {
    console.log(`Server running on port ${port}`);
});

Esse é o nosso app simples

Docker 102 - Criando

FROM node:9.11.2-alpine

ENV APP_PATH=/usr/src/myapp \
    PORT=8888

WORKDIR $APP_PATH

RUN yarn add koa

COPY app.js ./

EXPOSE $PORT

CMD node app.js

nosso estaleiro

dependências de sistema

empacota nosso app

porta para entrar e sair mensagens

mkdir -p e cd

comando padrão

Uma receita, muitos bolos

Docker 102 - Criando

definindo variáveis de ambiente

$ docker image build . -t my_app_image

Sending build context to Docker daemon  3.072kB
Step 1/7 : FROM node:9.11.2-alpine
 ---> a56170f59699
Step 2/7 : ENV APP_PATH=/usr/src/myapp     PORT=8888
 ---> Running in 28d44e107a43
Removing intermediate container 28d44e107a43
 ---> 69242f8b73d4
Step 3/7 : WORKDIR $APP_PATH
Removing intermediate container eec9a41c94de
 ---> 7d5cd257a894
Step 4/7 : RUN yarn add koa
 ---> Running in e89c6232943b
yarn add v1.5.1
Done in 2.82s.
Removing intermediate container e89c6232943b
 ---> 58250e3262f5
Step 5/7 : COPY app.js ./
 ---> 5e58144a70b7
Step 6/7 : EXPOSE $PORT
 ---> Running in f67421f15a05
Removing intermediate container f67421f15a05
 ---> a15d8c641778
Step 7/7 : CMD node app.js
 ---> Running in 066e5b7d828b
Removing intermediate container 066e5b7d828b
 ---> d6b38100fdd5
Successfully built d6b38100fdd5
Successfully tagged my_app_image:latest

camadas

instabilidade

Docker 102 - Criando

docker container run    \
    --name my_app       \
    --publish 9999:8888 \
    --detach my_app_image
  • nomeia o contêiner
  • atrela portas hospedeiro:contêiner
  • roda em segundo plano

Docker 102 - Criando

$ docker container logs my_app

Server running on port 8888

Inspeciona logs do contêiner rodando em segundo plano

docker container stop my_app

Para o contêiner (explicitamente, já que está em --detach)

Docker 102 - Criando

Docker 103 - Perenidade

Sobrevivência através de impermanência

descartável

persistente

PORÉM

contêiner

sistema

/

bin

usr

var

...

foo

/

bin

usr

var

...

bar

contêiner fs

hospedeiro fs

contêiner morre

descartável

Docker 103 - Perenidade

docker container run       \
    --name my_app          \
    --publish 9999:8888    \
    --volume $(pwd):/myapp \
    --detach my_app_image
  • nomeia, atrela portas e roda em background
  • atrela sistemas de arquivos

Docker 103 - Perenidade

/

bin

usr

var

...

foo

/

bin

usr

var

...

bar

contêiner fs

hospedeiro fs

contêiner morre

persistente

Docker 103 - Perenidade

Referências

Obrigado

João Daniel

A um passo do Willy Wonka dos Contêineres

Made with Slides.com