DOCKER COMPOSE
MICHAEL GRANADOS
2017-03-13
MICHAEL
GRANADOS
DESENVOLVEDOR WEB
DEVOPS GUY
NERD
PAI DE FAMÍLIA
Agenda
Docker é fantástico!

Mas no mundo real

As coisas começam a complicar…

Como fazer nossa vida ficar mais simples?

Colocando tudo junto!

Fácil, simples, prático
Docker é fantástico!
É possível criar ambientes
para desenvolvimento /
testes / produção

Compartilha recursos
deixando os processos mais
rápidos

É simples de usar

Faz uso de cache para
reutilizar partes de
contêineres
Mas no mundo real
Um ambiente completo em produção precisa

aplicação web

banco de dados

banco de cache

filas de processamento

processos em segundo plano

etc, etc, etc
As coisas começam a
complicar…
$ cat Dockerfile
FROM ruby:2.3.3
RUN apt-get update && 
apt-get install -y 
nodejs mysql-client
COPY Gemfile* ./
RUN gem install bundler && bundle install
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY . .
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
As coisas começam a
complicar…
$ docker pull mysql:latest
$ docker build -t web .
$ docker run -d --name=db 
-e MYSQL_ALLOW_EMPTY_PASSWORD=true 
mysql:latest
$ docker run -d --name=web 
--link db:db 
-p 3000:3000 
--e RAILS_ENV=development 
-v "${PWD}:/usr/src/app"
As coisas começam a
complicar…
$ docker pull ...
$ docker pull ...
$ docker build ...
$ docker build ...
$ docker run ...
$ docker run ...
$ docker run ...
$ docker run ...
Como fazer nossa vida
ficar mais simples?
docker-compose.yml
docker-compose up
Colocando tudo junto!
Mesmo Dockerfile

Dockerfile

Um arquivo de configuração de ambientes

docker-compose.yml
Colocando tudo junto!
$ cat Dockerfile
FROM ruby:2.3.3
RUN apt-get update && 
apt-get install -y 
nodejs mysql-client
COPY Gemfile* ./
RUN gem install bundler && bundle install
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY . .
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
Colocando tudo junto!
$ cat docker-compose
version: "2"
services:
web:
build: .
command: rails server -b 0.0.0.0
volumes: [".:/usr/src/app"]
links: ["db:db"]
ports: ["3000:3000"]
environment:
RAILS_ENV: development
db:
image: mysql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "true"
docker-compose up
e pronto!
Fácil, simples e prático
docker-compose build

docker-compose up

docker-compose ps

docker-compose exec

docker-compose start/stop/restart

docker-compose rm

docker-compose logs

docker-compose top
“A arte de programar consiste em organizar e
dominar a complexidade.”
–Johnny Appleseed

Docker compose

  • 1.
  • 2.
  • 3.
    Agenda Docker é fantástico! Masno mundo real As coisas começam a complicar… Como fazer nossa vida ficar mais simples? Colocando tudo junto! Fácil, simples, prático
  • 4.
    Docker é fantástico! Épossível criar ambientes para desenvolvimento / testes / produção Compartilha recursos deixando os processos mais rápidos É simples de usar Faz uso de cache para reutilizar partes de contêineres
  • 5.
    Mas no mundoreal Um ambiente completo em produção precisa aplicação web banco de dados banco de cache filas de processamento processos em segundo plano etc, etc, etc
  • 6.
    As coisas começama complicar… $ cat Dockerfile FROM ruby:2.3.3 RUN apt-get update && apt-get install -y nodejs mysql-client COPY Gemfile* ./ RUN gem install bundler && bundle install RUN mkdir /usr/src/app WORKDIR /usr/src/app COPY . . EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
  • 7.
    As coisas começama complicar… $ docker pull mysql:latest $ docker build -t web . $ docker run -d --name=db -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:latest $ docker run -d --name=web --link db:db -p 3000:3000 --e RAILS_ENV=development -v "${PWD}:/usr/src/app"
  • 8.
    As coisas começama complicar… $ docker pull ... $ docker pull ... $ docker build ... $ docker build ... $ docker run ... $ docker run ... $ docker run ... $ docker run ...
  • 9.
    Como fazer nossavida ficar mais simples? docker-compose.yml docker-compose up
  • 10.
    Colocando tudo junto! MesmoDockerfile Dockerfile Um arquivo de configuração de ambientes docker-compose.yml
  • 11.
    Colocando tudo junto! $cat Dockerfile FROM ruby:2.3.3 RUN apt-get update && apt-get install -y nodejs mysql-client COPY Gemfile* ./ RUN gem install bundler && bundle install RUN mkdir /usr/src/app WORKDIR /usr/src/app COPY . . EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
  • 12.
    Colocando tudo junto! $cat docker-compose version: "2" services: web: build: . command: rails server -b 0.0.0.0 volumes: [".:/usr/src/app"] links: ["db:db"] ports: ["3000:3000"] environment: RAILS_ENV: development db: image: mysql environment: MYSQL_ALLOW_EMPTY_PASSWORD: "true"
  • 13.
  • 14.
    Fácil, simples eprático docker-compose build docker-compose up docker-compose ps docker-compose exec docker-compose start/stop/restart docker-compose rm docker-compose logs docker-compose top
  • 15.
    “A arte deprogramar consiste em organizar e dominar a complexidade.” –Johnny Appleseed