Docker – Mão na massafiles.meetup.com/18269148/meetup2_mao_na_massa.pdf · 2013 em um lighting...

Preview:

Citation preview

1Meetup Mão na massa – DOCKER - DF

Docker – Mão na massa

Eustáquio Mendes Guimarães – eustaquio.guimaraes@gmail.com

2Meetup Mão na massa – DOCKER - DF

Nadando . . .

● HistóriaHistória● FuncionamentoFuncionamento● Utilização – BásicoUtilização – Básico● Por que ? Quando ?Por que ? Quando ?● Ate aonde …Ate aonde …● Quem está nadando junto ?Quem está nadando junto ?● FerramentasFerramentas● Comunidades e LinksComunidades e Links

3Meetup Mão na massa – DOCKER - DF

Nadando . . .

● História

O primeiro anúncio do Docker foi feito em 15 de Março de 2013 em um lighting talk por Solomon Hykes, CEO da dorCloud em uma coferência de Phyton, sendo liberado, como uma engine para deploy.

E em abril de 2015 a empresa já vale 1 bilhão de dólares.

Em outubro de 2015 já existem vários projetos: Docker Compose, Docker Swarm, Docker Hub Enterprise, Docker Machine, Docker engine, Docker Hub, Docker Registry, Kitematic.

4Meetup Mão na massa – DOCKER - DF

Nadando . . .

● HistóriaDocker é um projeto open source (Apache License 2.0) para empacotar, enviar e executar diversas aplicações em containers.

Containers docker são independente do hardware e plataforma, dessa forma sendo executado em diversos ambientes. Isto os torna uma excelente ferramenta para deploy e escalabilidade de aplicativos.

5Meetup Mão na massa – DOCKER - DF

Nadando . . . ● História

6Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Funcionamento

Quando o kernel do sistema operacional é capaz de permitir múltiplas instâncias isoladas em user-space, ao invés de somente uma, cada instância pode ser chamada de container ou software container).

Por compartilharem o mesmo kernel e parte dos recursos, containers consomem muito menos recursos do que uma máquina virtual.

7Meetup Mão na massa – DOCKER - DF

Nadando . . .

8Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Por que ?

* Rápida aprendizagem/utilização se comparado com outras tecnologias de containers (LXC, cgroups, etc)

* Comunidade muito ativa

* Repositório publico de imagens, com compartilhamento e colaboração

* Integração com ferramentas de DevOps (Zabbix, Puppet, Chef, Vagrant, Ansible)* Excelente desempenho e economia de recursos (espaço em disco, processamento, memória)* Versionamento de imagens e cache

9Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Por que ? E quando ?

* Precisa de outro sistema operacional ou distribuições além do GNU/Linux

* Versões diferentes do kernel linux

* Necessita de homogeneidade da infraestrutura

* Personalização da imagem que será construída (ex.: Debian)

* Aumento da curva de aprendizagem (imagens personalizadas, logs, cron, rede)

* Constante evolução (ex.: rede)

10Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Quem esta nadando junto ? ? ?

* Microsoft/Azure e Windows Server 2012

* Intel

* ebay

* Atmel

* Spotfy

* ASK.fm

* 500px

* e ….

11Meetup Mão na massa – DOCKER - DF

Nadando . . .

12Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Ferramentas

13Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Ferramentas

14Meetup Mão na massa – DOCKER - DF

Nadando . . .

15Meetup Mão na massa – DOCKER - DF

Nadando . . .

16Meetup Mão na massa – DOCKER - DF

Nadando . . .

17Meetup Mão na massa – DOCKER - DF

Nadando . . .

18Meetup Mão na massa – DOCKER - DF

Nadando . . .

19Meetup Mão na massa – DOCKER - DF

Nadando . . .

20Meetup Mão na massa – DOCKER - DF

Nadando . . .

21Meetup Mão na massa – DOCKER - DF

Nadando . . .

22Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . .

23Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . .

O Docker há algum tempo já deixou de ser apenas um software para virar um conjunto deles. Um ecosistema.

● Docker Engine: É o software base de toda solução. É tanto o daemon que responsável pelo os containers como também é o cliente usado para enviar comandos pro daemon.

● Docker Compose: É o ferramenta responsável pela definição e execução de múltiplos containers com base em arquivo de definição.

● Docker Machine: é a ferramenta que possibilita criar e manter ambientes docker em máquinas virtuais, ambientes de nuvem e até mesmo em máquina física.

24Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Distribuicao Debian – Jessie 8.5Usuário – dockerdf Senha – dockerdf

Usuário – rootSenha – root

25Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação Tipo 1:

su ­ root

ou no caso da utilização de sudo

sudo su ­ root

Agora execute o comando abaixo:

wget ­qO­ https://get.docker.com/ | sh

Esse procedimento demorará um pouco. Após terminar teste executando o comando abaixo:

docker run hello­world

26Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . root@dockerdf:/etc/apt# docker run hello­worldUnable to find image 'hello­world:latest' locallylatest: Pulling from library/hello­worldc04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9Status: Downloaded newer image for hello­world:latest

Hello from Docker!This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello­world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the    executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it    to your terminal.

To try something more ambitious, you can run an Ubuntu container with: $ docker run ­it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com

For more examples and ideas, visit: https://docs.docker.com/engine/userguide/

27Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . root@dockerdf:~# docker run ­it ubuntu bashroot@f90f50fbc022:/# root@f90f50fbc022:/# more /etc/debian_version stretch/sidroot@f90f50fbc022:/#

#Ambiente dockerizado – Ubuntu Server

Ou … 

docker pull ubuntu 

#Dessa forma o docker efetuara o download do Docker Hub ­ https://hub.docker.com/

#O download foi bem sucedido??? Execute …

root@dockerdf:~# docker run ubuntu cat /etc/debian_versionstretch/sid

Executar o comando cat /etc/debian_version dentro do container do ubuntu

28Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação tipo 02

Para os usuários do Debian Wheezy, backports deve estar disponível. Para habilitar backports em Wheezy:Entrar na sua máquina e abrir um terminal com sudo ou raiz privilégios.Abra o arquivo /etc/apt/sources.list.d/backports.list em seu editor favorito.Se o arquivo não existir, criá­la.Remova todas as entradas existentes.Adicione uma entrada para backports no Debian Wheezy.  Um exemplo de entrada:

deb http://http.debian.net/debian wheezy­backports main  #Ajuste de acordo com a sua versão do Debian

apt­get updateapt­get install apt­transport­https ca­certificatesapt­key adv ­­keyserver hkp://p80.pool.sks­keyservers.net:80 ­­recv­keys 58118E89F3A912897C070ADBF76221572C52609D

29Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação tipo 02 ­ continuação

vi/nano/mcedit /etc/apt/sources.list.d/docker.list

#Adicioine de acordo com a sua versão

    ­ Debian Wheezy

    deb https://apt.dockerproject.org/repo debian­wheezy main

    ­ Debian Jessie

    deb https://apt.dockerproject.org/repo debian­jessie main

    ­ Debian Stretch/Sid

    deb https://apt.dockerproject.org/repo debian­stretch main

apt­get update

sudo apt­get install docker­enginesudo service docker startsudo docker run hello­world

30Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação Composer:

root@dockerdf:~# curl ­L https://github.com/docker/compose/releases/download/1.8.0/docker­compose­`uname ­s`­`uname ­m` > /usr/local/bin/docker­compose  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100   600    0   600    0     0    479      0 ­­:­­:­­  0:00:01 ­­:­­:­­   478100 7783k  100 7783k    0     0   792k      0  0:00:09  0:00:09 ­­:­­:­­ 1129k

root@dockerdf:~# chmod +x /usr/local/bin/docker­composeroot@dockerdf:~# docker­compose versiondocker­compose version 1.8.0, build f3628c7docker­py version: 1.9.0CPython version: 2.7.9OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013

 

https://docs.docker.com/compose/install/

31Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação Docker Machine:

root@dockerdf:~#  curl ­L https://github.com/docker/machine/releases/download/v0.7.0/docker­machine­`uname ­s`­`uname ­m` > /usr/local/bin/docker­machine  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100   600    0   600    0     0    851      0 ­­:­­:­­ ­­:­­:­­ ­­:­­:­­   851100 34.5M  100 34.5M    0     0  1442k      0  0:00:24  0:00:24 ­­:­­:­­ 1242kroot@dockerdf:~# root@dockerdf:~# chmod +x /usr/local/bin/docker­machineroot@dockerdf:~# docker­machine versiondocker­machine version 0.7.0, build a650a40

 

32Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker:

Para listar as imagens que seu Docker host tem localmente execute o comando abaixo:

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBroot@dockerdf:~# 

As imagens retornadas estão presentes no seu Docker host e não demandarão nenhum download.A não ser que você deseje atualizá­la, caso exista o que possa ser atualizado. Para atulizar a imagem basta executar o comando….

docker pull nome_da_imagemNo caso acima, ubuntu, então …

root@dockerdf:~# docker pull ubuntuUsing default tag: latestlatest: Pulling from library/ubuntu

Digest: sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54bStatus: Image is up to date for ubuntu:latest

 

33Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker:

Inspecionar a imagem que acabou de atualizar, basta utilizar o comando… 

docker inspect nome_da_imagem

root@dockerdf:~# docker inspect ubuntu[    {        "Id": "sha256:42118e3df429f09ca581a9deb3df274601930e428e452f7e4e9f1833c56a100a",        "RepoTags": [            "ubuntu:latest"        ],        "RepoDigests": [            "ubuntu@sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54b"        ],        "Parent": "",        "Comment": "",        "Created": "2016­07­22T15:19:31.961254889Z",        "Container": "18623e507b31713ccb54bb249bd40a3a9f0acfe50ca1a6615729ea983b6a8011",        "ContainerConfig": {            "Hostname": "827f45722fd6",            "Domainname": "",            "User": "",            "AttachStdin": false,            "AttachStdout": false,            "AttachStderr": false,            "Tty": false,            "OpenStdin": false,            "StdinOnce": false,            "Env": [

 

34Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker:

     "Architecture": "amd64",        "Os": "linux",        "Size": 124796948,        "VirtualSize": 124796948,        "GraphDriver": {            "Name": "aufs",            "Data": null        },        "RootFS": {            "Type": "layers",            "Layers": [                "sha256:ea9f151abb7e06353e73172dad421235611d4f6d0560ec95db26e0dc240642c1",                "sha256:0185b3091e8ee299850b096aeb9693d7132f50622d20ea18f88b6a73e9a3309c",                "sha256:98305c1a8f5e5666d42b578043e3266f19e22512daa8c6b44c480b177f0bf006",                "sha256:9a39129ae0ac2fccf7814b8e29dde5002734c1699d4e9176061d66f5b1afc95c"            ]        }    }]

 

35Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker… Como?:

docker run <parâmetros> <imagem> <CMD> <argumentos>

Os parâmetros mais utilizados na execução do container são:Parâmetro | Explicação——–|———— ­d | Execução do container em background ­i | Modo interativo. Mantém o STDIN aberto mesmo sem console anexado ­t | Aloca uma pseudo TTY –rm | Automaticamente remove o continer após finalização (Não funciona com ­d) –name | Nomear o container ­v | Mapeamento de volume ­p | Mapemento de porta ­m | Limitar o uso de memória RAM ­c | Balancear o uso de CPU

 

36Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker… Como?:

root@dockerdf:~# docker run ­it ­­rm ­­name meu_ubuntu ubuntu bashroot@0cb5acd9ff74:/# root@0cb5acd9ff74:/# exit

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBroot@dockerdf:~# 

 

37Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Verificando a lista de containers:

docker ps <parâmetros>Os parâmetros mais utilizados na execução do container são:Parâmetro | Explicação———–|———— ­a | Lista todos os containers, inclusive os desligados ­l | Lista os ultimos containers, inclusive os desligados ­n | Lista os últimos N containers, inclusive os desligados ­q | Lista apenas os ids dos containers, ótimo para utilização em scripts

 

https://docs.docker.com/engine/reference/commandline/ps/

38Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Verificando a lista de containers:

root@dockerdf:~# docker ps ­aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES94c1b8d15ccb        ubuntu              "cat /etc/debian_vers"   9 minutes ago       Exited (0) 9 minutes ago                           silly_chandrasekhar9546bf4f1edf        ubuntu              "cat /etc/debian­vers"   9 minutes ago       Exited (1) 9 minutes ago                           determined_bardeen88372a09c2fb        ubuntu              "cat /etc/debian"        9 minutes ago       Exited (1) 9 minutes ago                           adoring_ritchie34672e88d128        ubuntu              "cat /etc/lsb­release"   9 minutes ago       Exited (1) 9 minutes ago                           stupefied_poincare5859d61c6aec        ubuntu              "/bin/bash"              10 minutes ago      Exited (0) 10 minutes ago                          trusting_mestorff90f50fbc022        ubuntu              "bash"                   About an hour ago   Exited (0) About an hour ago                       mad_goldstinea2f4ba040c29        ubuntu              "bash"                   10 hours ago        Exited (0) 10 hours ago                            zen_torvaldsb7534167f7ef        hello­world         "/hello"                 10 hours ago        Exited (0) 10 hours ago                            awesome_thompsonroot@dockerdf:~# 

  https://docs.docker.com/engine/reference/commandline/ps/

39Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Verificando a lista de containers:

root@dockerdf:~# docker ps ­lCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES94c1b8d15ccb        ubuntu              "cat /etc/debian_vers"   9 minutes ago       Exited (0) 9 minutes ago                       silly_chandrasekharroot@dockerdf:~# root@dockerdf:~# docker ps ­nflag needs an argument: 'n' in ­nSee 'docker ps ­­help'.root@dockerdf:~# docker ps ­n 3CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES94c1b8d15ccb        ubuntu              "cat /etc/debian_vers"   9 minutes ago       Exited (0) 9 minutes ago                        silly_chandrasekhar9546bf4f1edf        ubuntu              "cat /etc/debian­vers"   10 minutes ago      Exited (1) 10 minutes ago                       determined_bardeen88372a09c2fb        ubuntu              "cat /etc/debian"        10 minutes ago      Exited (1) 10 minutes ago                       adoring_ritchieroot@dockerdf:~# 

  https://docs.docker.com/engine/reference/commandline/ps/

40Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Gerenciamento de containers:

Caso deseje desligar o container basta utilizar o comando docker stop nome_do_container

Ele recebe como argumento o ID ou nome do container. Ambos dados podem ser obtidos com o docker ps

Caso deseje ligar o container basta utilizar o comando docker start nome_do_container

Vale ressaltar que a ideia dos containers é serem descartáveis, ou seja, caso você esteja usando o mesmo container por muito tempo sem descartá­lo, você provavelmente estará usando o Docker incorretamente. O Docker não é uma máquina, é um processo em execução e como todo processo ele deve ser descartado para que outro possa 

tomar seu lugar na reinicialização do mesmo.

41Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Criando sua própria imagem:

imagem é a classe e o container o objeto, ou seja, a imagem é a abstração da infraestrutura em um estado somente leitura, que é de onde será instanciado o container.Todo container é iniciado a partir de uma imagem, dessa forma podemos concluir que nunca teremos uma imagem em execução.Um container só pode ser iniciado a partir de uma única imagem, ou seja, caso deseje umcomportamento diferente será necessário customizar a imagem.

As imagens oficiais da docker são aquelas que não tem usuário em seu nome, ou seja, a imagem “ubuntu:16.04  é ′′oficial, por outro lado a imagem “nuagebec/ubuntu” não é oficial. Essa segunda imagem é mantida pelo usuário nuagebec, que mantém muitas outras imagens não oficiais.

As imagens oficiais são mantidas pela empresa docker e são disponibilizadas na nuvem docker.

Nome da imagemO nome de uma imagem oficial é composta de duas partes. A primeira é o que a documentação chama de “repositório” e a segunda é a “tag”. No caso da imagem “ubuntu:14.04”, ubuntu é o repositório e 14.04 é a tag.

42Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Criando sua própria imagem:

Para visualizar todas as imagens que se encontram localmente na sua estação nesse momento:

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kB

Há duas formas de criar imagens customizadas: Com commit e com Dockerfile.

43Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Criando imagens com commit

É possível criar imagens executando o comando commit relacionado a um container, ou seja, esse comando obtera o status atual do container escolhido e criará uma imagem a partir dessa informação.

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBroot@dockerdf:~# docker run ­it ­­name ubunudf ubuntu bashroot@334aa1d388e8:/# 

Instalar o nginx nele

root@334aa1d388e8:/# apt­get update &&  apt­get install nginx ­y && exit

Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]Get:2 http://archive.ubuntu.com/ubuntu xenial­updates InRelease [95.7 kB]Get:3 http://archive.ubuntu.com/ubuntu xenial­security InRelease [94.5 kB]Get:4 http://archive.ubuntu.com/ubuntu xenial/main Sources [1103 kB]Get:5 http://archive.ubuntu.com/ubuntu xenial/restricted Sources [5179 B]                                                                                                      Get:6 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]    . . .                                      

44Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Criando imagens com commit

Setting up nginx­common (1.10.0­0ubuntu0.16.04.2) ...Setting up nginx­core (1.10.0­0ubuntu0.16.04.2) ...invoke­rc.d: could not determine current runlevelinvoke­rc.d: policy­rc.d denied execution of start.Setting up nginx (1.10.0­0ubuntu0.16.04.2) ...Processing triggers for libc­bin (2.23­0ubuntu3) ...Processing triggers for sgml­base (1.26+nmu4ubuntu1) ...Processing triggers for systemd (229­4ubuntu6) ...exitroot@dockerdf:~# Saiu do Container

root@dockerdf:~# docker stop ubunudfubunudfroot@dockerdf:~# docker commit ubunudf ubuntudf:nginx  Container_criado imagem_criada sha256:6768ec58b858b02e01c6ed894edead23987cb3043e863621112b697fc3405bebroot@dockerdf:~# 

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED              SIZEubuntudf            nginx               6768ec58b858        About a minute ago   220.4 MBubuntu              latest              42118e3df429        2 weeks ago          124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago          1.848 kBroot@dockerdf:~# 

45Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E se deu certo  . . . 

root@dockerdf:~# docker run ­it ­­rm ubuntudf:nginx dpkg ­l nginx Executou o comando dentro do containerDesired=Unknown/Install/Remove/Purge/Hold| Status=Not/Inst/Conf­files/Unpacked/halF­conf/Half­inst/trig­aWait/Trig­pend|/ Err?=(none)/Reinst­required (Status,Err: uppercase=bad)||/ Name           Version      Architecture Description+++­==============­============­============­=================================ii  nginx          1.10.0­0ubun all          small, powerful, scalable web/proroot@dockerdf:~# 

Nota:O método commit não é a melhor opção para criar imagens, pois como pudemos verificar, o processo de modificação da imagem é completamente manual e apresenta certa dificuldade para rastrear as mudanças que foram efetuadas, uma vez que o que foi modificado manualmente não é registrado automaticamente na 

estrutura do docker.

46Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente . . . 

Dockerfile na verdade representa a exata diferença entre uma determinada imagem, que aqui chamamos de base, e a imagem que se deseja criar.

47Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente . . . 

root@dockerdf:~# touch teste_metuproot@dockerdf:~# vi Dockerfileroot@dockerdf:~# more Dockerfile FROM ubuntuRUN apt­get update && apt­get install nginx ­yCOPY teste_metup /tmp/teste_metupCMD bashroot@dockerdf:~#

FROM é usado para informar qual imagem será utilizada.RUN é usado para informar quais comandos serão executados nesse ambiente para efetuar asmudanças necessárias na infraestrutura do sistema.COPY é usado para copiar arquivos da estação para a imagem. Mas pode ser utilizada para enviar arquivos de configuração de ambiente e códigos para serem executados em serviços de aplicação.CMD é usado informar qual comando será executado por padrão.

Agora, construir:

root@dockerdf:~# docker build ­t ubuntunovo:web_auto .  ­t nome_imagem:tag Observe o . ao fonal da linha para informar que tudo do diretório atual será utilizadoSending build context to Docker daemon 9.728 kBStep 1 : FROM ubuntu ­­­> 42118e3df429Step 2 : RUN apt­get update && apt­get install nginx ­y ­­­> Running in 3e6c3cfcd9d9Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]

48Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente . . . 

Step 3 : COPY teste_metup /tmp/teste_metup ­­­> 079c2612224eRemoving intermediate container 894932c50f21Step 4 : CMD bash ­­­> Running in 7dfcbb3ecf95 ­­­> d9ce37133936Removing intermediate container 7dfcbb3ecf95Successfully built d9ce37133936   ­  Build criadaroot@dockerdf:~# root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntunovo          web_auto            d9ce37133936        13 minutes ago      220.4 MBubuntudf            nginx               6768ec58b858        35 minutes ago      220.4 MBubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBroot@dockerdf:~# root@dockerdf:~# docker run ­it ­­rm ubuntunovo:web_auto ls ­l /tmptotal 0­rw­r­­r­­ 1 root root 0 Aug  6 08:07 teste_metup

49Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente de novo . . . 

O resultado de cada instrução do Dockerfile é armazenado em um cache local, ou seja, caso não seja modificado na próxima criação da imagem (build) tudo estará no cache, mas caso algo seja modificado apenas a instrução modificada e as posteriores serão executadas novamente.

root@dockerdf:~# more Dockerfile FROM ubuntuRUN apt­get update && apt­get install nginx ­yRUN apt­get install php7.0 ­yCOPY teste_metup /tmp/teste_metupCMD bashroot@dockerdf:~# 

50Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente de novo . . . 

root@dockerdf:~# docker build ­t ubuntunovo:web_auto .Sending build context to Docker daemon 11.78 kBStep 1 : FROM ubuntu ­­­> 42118e3df429Step 2 : RUN apt­get update && apt­get install nginx ­y ­­­> Using cache ­­­> 8b4bb9bc5548Step 3 : RUN apt­get install php7.0 ­y ­­­> Running in c194608952b2Reading package lists...Building dependency tree...Reading state information...The following additional packages will be installed:  file libbsd0 libedit2 libmagic1 mime­support php­common php7.0­cli  php7.0­common php7.0­fpm php7.0­json php7.0­opcache php7.0­readline psmiscSuggested packages:  php­pearThe following NEW packages will be installed:  file libbsd0 libedit2 libmagic1 mime­support php­common php7.0 php7.0­cli  php7.0­common php7.0­fpm php7.0­json php7.0­opcache php7.0­readline psmisc0 upgraded, 14 newly installed, 0 to remove and 5 not upgraded.Need to get 3939 kB of archives.After this operation, 19.0 MB of additional disk space will be used.Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmagic1 amd64 1:5.25­2ubuntu1 [216 kB]

51Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E aonde se guarda todas essas alterações? 

52Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

A rede na verdade é uma abstração criada para facilitar o gerenciamento da comunicação de dados entre containers e os nós externos ao ambiente docker

O docker é disponibilizado com três redes por padrão. Essas redes oferecem configurações específicaspara gerenciamento do tráfego de dados.

root@dockerdf:~# docker network lsNETWORK ID          NAME                DRIVER              SCOPE1d14f4906e3c        bridge              bridge              local               de3ae5b6d137        host                host                local               baea6f843214        none                null                local 

Como exemplo de utilização de uma rede criada por usuário, primeiro vamos criar a rede chamadaisolada_nw com o driver bridge

root@dockerdf:~# docker network create ­­driver bridge isolada_nw330dbf27cef157cba21c373e782253931314b5643a2365b93219ba6614363597root@dockerdf:~# docker network lsNETWORK ID          NAME                DRIVER              SCOPE1d14f4906e3c        bridge              bridge              local               de3ae5b6d137        host                host                local               330dbf27cef1        isolada_nw          bridge              local               baea6f843214        none                null                local               root@dockerdf:~# 

53Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

root@dockerdf:~# docker run ­d ­­name bd ­e MYSQL_ROOT_PASSWORD=minhasenha mysqlUnable to find image 'mysql:latest' locallylatest: Pulling from library/mysql357ea8c3d80b: Pull complete 256a92f57ae8: Pull complete d5ee0325fe91: Pull complete a15deb03758b: Pull complete 7b8a8ccc8d50: Pull complete 1a40eeae36e9: Pull complete 833539b56478: Pull complete 4f350efbb7e5: Pull complete 266f161e49c6: Pull complete 2d0f7f51c888: Pull complete 13b44531c4a7: Pull complete Digest: sha256:e6dc999f4e2d5982e74a008ff08c0641f0832e19339aaf4f4c2bc2ca426e96c6Status: Downloaded newer image for mysql:latest5b08c3672ecc852f9fa5759985ba5822a645e25052abe55ddce1bd353e63f022root@dockerdf:~# 

54Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

root@dockerdf:~# docker run ­d ­p 80:80 ­­name app ­­link bd tutum/apache­phpUnable to find image 'tutum/apache­php:latest' locallylatest: Pulling from tutum/apache­php

6ffe5d2d6a97: Pull complete f4e00f994fd4: Pull complete e99f3d1fc87b: Pull complete a3ed95caeb02: Pull complete c10ab9e629d8: Pull complete 5c65b067601c: Pull complete 2cbc3ddde9c1: Pull complete 9a5e857e989f: Pull complete 7bd95ceec22a: Pull complete c27094051f1e: Pull complete d820ec68d287: Pull complete Digest: sha256:6d21118f57fd5415638b0744be140c16e40353e2bc06659c8c8ffeadae648cfcStatus: Downloaded newer image for tutum/apache­php:latestroot@dockerdf:~# 

55Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE<none>              <none>              8781fc8964a1        39 minutes ago      240.7 MBubuntunovo          web_auto            d9ce37133936        About an hour ago   220.4 MBubuntudf            nginx               6768ec58b858        About an hour ago   220.4 MBmysql               latest              43c70d2fa278        4 days ago          384.5 MBubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBalpine              latest              4e38e38c8ce0        6 weeks ago         4.799 MBtutum/apache­php    latest              2e233ad9329b        13 months ago       244.7 MBroot@dockerdf:~# 

root@dockerdf:~# docker exec ­it app ping bdPING bd (172.17.0.2) 56(84) bytes of data.64 bytes from bd (172.17.0.2): icmp_seq=1 ttl=64 time=0.165 ms64 bytes from bd (172.17.0.2): icmp_seq=2 ttl=64 time=0.174 ms64 bytes from bd (172.17.0.2): icmp_seq=3 ttl=64 time=0.136 ms^C­­­ bd ping statistics ­­­3 packets transmitted, 3 received, 0% packet loss, time 2001msrtt min/avg/max/mdev = 0.136/0.158/0.174/0.019 msroot@dockerdf:~# 

56Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

Iniciar um container na rede, chamada isolada_nw,

root@dockerdf:~# docker run ­itd ­­net isolada_nw alpine shUnable to find image 'alpine:latest' locallylatest: Pulling from library/alpine

e110a4a17941: Pull complete Digest: sha256:3dcdb92d7432d56604d4545cbd324b14e647b313626d99b889d0626de158f73aStatus: Downloaded newer image for alpine:latest3e9c00abf1e4b63c238dd31661bc33436a2035bb1a6d64776878435c5d3ed526root@dockerdf:~# 

https://hub.docker.com/_/alpine/Linux Alpine com 5MB

57Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

root@dockerdf:~# docker network inspect isolada_nw[    {        "Name": "isolada_nw",        "Id": "330dbf27cef157cba21c373e782253931314b5643a2365b93219ba6614363597",        "Scope": "local",        "Driver": "bridge",        "EnableIPv6": false,        "IPAM": {            "Driver": "default",            "Options": {},            "Config": [                {                    "Subnet": "172.18.0.0/16",                    "Gateway": "172.18.0.1"                }            ]        },        "Internal": false,        "Containers": {},        "Options": {},        "Labels": {}    }]

58Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

Overlay permite comunicação entre hosts docker, ou seja, com sua utilização os containers de um determinado host docker poderão acessar nativamente containers de um outro ambiente docker.

59Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Cansei, relaxar . . . 

root@dockerdf:~# mkdir relaxarroot@dockerdf:~# cd relaxarroot@dockerdf:~/relaxar# vi Dockerfileroot@dockerdf:~/relaxar# more Dockerfile FROM ubuntuMAINTAINER DockerDF <dockerdf@gmail.com>RUN ["apt­get", "update"]RUN ["apt­get", "install", "­y", "frozen­bubble"]RUN ["useradd", "player", "­u", "1000", "­g", "100", "­m", "­d", "/home/player", "­s", "/bin/bash"]USER player# ENTRYPOINT define o comando que executará quando o contêiner# for executado a partir da imagem.ENTRYPOINT ["/usr/games/frozen­bubble"] ­­­> Running in 9b541ce680b9 ­­­> 615b31d902d3Removing intermediate container 9b541ce680b9Step 7 : ENTRYPOINT /usr/games/frozen­bubble ­­­> Running in c80cb93f136d ­­­> ece9fc943718Removing intermediate container c80cb93f136dSuccessfully built ece9fc943718

60Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Cansei, relaxar . . . 

root@dockerdf:~/relaxar# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZErelaxar             game                ece9fc943718        4 minutes ago       312.1 MB

root@dockerdf:~/relaxar# docker run ­ti ­­rm ­e "DISPLAY=unix:0" ­v /tmp/.X11­unix:/tmp/.X11­unix ­v $HOME/Pictures:/home/player relaxar:game

61Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . .

62Meetup Mão na massa – DOCKER - DF

● E agora ? ? ?

Chegamos .. . e ai ?

http://www.meetup.com/pt-BR/Docker-Meetup/

63Meetup Mão na massa – DOCKER - DF

● E agora ? ? ?

Chegamos .. . e ai ?

https://www.facebook.com/dockerdf/

64Meetup Mão na massa – DOCKER - DF

● E agora ? ? ?

Chegamos .. . e ai ?

https://dockerdf.slack.com

65Meetup Mão na massa – DOCKER - DF

● E agora ? ? ?

Chegamos .. . e ai ?

66Meetup Mão na massa – DOCKER - DF

Chegamos .. . e ai ?

67Meetup Mão na massa – DOCKER - DF

● ReferênciasPalestra de Solomon Hykes - https://youtu.be/wW9CAH9nSLs

Site oficial - https://www.docker.com/

Livro do Gomex - https://leanpub.com/dockerparadesenvolvedores

Site do Gomex - http://techfree.com.br/

Treinamento do Docker - https://training.docker.com/

Mundo Docker - http://www.mundodocker.com.br/o-que-e-docker/

Devops Brasil - http://devops-br.org/

Primeiro Passo - http://www.diego-garcia.info/2015/02/15/docker-por-onde-comecar/

Segundo passo - http://blog.concretesolutions.com.br/2015/07/como-dockerizar-aplicacao-linux/

Nadando . . .

68Meetup Mão na massa – DOCKER - DF

● ReferênciasTelegram - https://telegram.me/dockerbr

Luiz Carlos Faria - http://luizcarlosfaria.net/docker/

Devops e Infra Ágil - http://gutocarvalho.net/octopress/2013/03/16/o-que-e-um-devops-afinal/

DevopsDay – Porto Alegre - https://goo.gl/asyvdP

LinuxTips - https://goo.gl/htkaLM

Nadando . . .

69Meetup Mão na massa – DOCKER - DF

FIM

1Meetup Mão na massa – DOCKER - DF

Docker – Mão na massa

Eustáquio Mendes Guimarães – eustaquio.guimaraes@gmail.com

2Meetup Mão na massa – DOCKER - DF

Nadando . . .

● HistóriaHistória● FuncionamentoFuncionamento● Utilização – BásicoUtilização – Básico● Por que ? Quando ?Por que ? Quando ?● Ate aonde …Ate aonde …● Quem está nadando junto ?Quem está nadando junto ?● FerramentasFerramentas● Comunidades e LinksComunidades e Links

3Meetup Mão na massa – DOCKER - DF

Nadando . . .

● História

O primeiro anúncio do Docker foi feito em 15 de Março de 2013 em um lighting talk por Solomon Hykes, CEO da dorCloud em uma coferência de Phyton, sendo liberado, como uma engine para deploy.

E em abril de 2015 a empresa já vale 1 bilhão de dólares.

Em outubro de 2015 já existem vários projetos: Docker Compose, Docker Swarm, Docker Hub Enterprise, Docker Machine, Docker engine, Docker Hub, Docker Registry, Kitematic.

4Meetup Mão na massa – DOCKER - DF

Nadando . . .

● HistóriaDocker é um projeto open source (Apache License 2.0) para empacotar, enviar e executar diversas aplicações em containers.

Containers docker são independente do hardware e plataforma, dessa forma sendo executado em diversos ambientes. Isto os torna uma excelente ferramenta para deploy e escalabilidade de aplicativos.

5Meetup Mão na massa – DOCKER - DF

Nadando . . . ● História

6Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Funcionamento

Quando o kernel do sistema operacional é capaz de permitir múltiplas instâncias isoladas em user-space, ao invés de somente uma, cada instância pode ser chamada de container ou software container).

Por compartilharem o mesmo kernel e parte dos recursos, containers consomem muito menos recursos do que uma máquina virtual.

7Meetup Mão na massa – DOCKER - DF

Nadando . . .

8Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Por que ?

* Rápida aprendizagem/utilização se comparado com outras tecnologias de containers (LXC, cgroups, etc)

* Comunidade muito ativa

* Repositório publico de imagens, com compartilhamento e colaboração

* Integração com ferramentas de DevOps (Zabbix, Puppet, Chef, Vagrant, Ansible)* Excelente desempenho e economia de recursos (espaço em disco, processamento, memória)* Versionamento de imagens e cache

9Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Por que ? E quando ?

* Precisa de outro sistema operacional ou distribuições além do GNU/Linux

* Versões diferentes do kernel linux

* Necessita de homogeneidade da infraestrutura

* Personalização da imagem que será construída (ex.: Debian)

* Aumento da curva de aprendizagem (imagens personalizadas, logs, cron, rede)

* Constante evolução (ex.: rede)

10Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Quem esta nadando junto ? ? ?

* Microsoft/Azure e Windows Server 2012

* Intel

* ebay

* Atmel

* Spotfy

* ASK.fm

* 500px

* e ….

11Meetup Mão na massa – DOCKER - DF

Nadando . . .

12Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Ferramentas

13Meetup Mão na massa – DOCKER - DF

Nadando . . .

● Ferramentas

14Meetup Mão na massa – DOCKER - DF

Nadando . . .

15Meetup Mão na massa – DOCKER - DF

Nadando . . .

16Meetup Mão na massa – DOCKER - DF

Nadando . . .

17Meetup Mão na massa – DOCKER - DF

Nadando . . .

18Meetup Mão na massa – DOCKER - DF

Nadando . . .

19Meetup Mão na massa – DOCKER - DF

Nadando . . .

20Meetup Mão na massa – DOCKER - DF

Nadando . . .

21Meetup Mão na massa – DOCKER - DF

Nadando . . .

22Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . .

23Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . .

O Docker há algum tempo já deixou de ser apenas um software para virar um conjunto deles. Um ecosistema.

● Docker Engine: É o software base de toda solução. É tanto o daemon que responsável pelo os containers como também é o cliente usado para enviar comandos pro daemon.

● Docker Compose: É o ferramenta responsável pela definição e execução de múltiplos containers com base em arquivo de definição.

● Docker Machine: é a ferramenta que possibilita criar e manter ambientes docker em máquinas virtuais, ambientes de nuvem e até mesmo em máquina física.

24Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Distribuicao Debian – Jessie 8.5Usuário – dockerdf Senha – dockerdf

Usuário – rootSenha – root

25Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação Tipo 1:

su ­ root

ou no caso da utilização de sudo

sudo su ­ root

Agora execute o comando abaixo:

wget ­qO­ https://get.docker.com/ | sh

Esse procedimento demorará um pouco. Após terminar teste executando o comando abaixo:

docker run hello­world

26Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . root@dockerdf:/etc/apt# docker run hello­worldUnable to find image 'hello­world:latest' locallylatest: Pulling from library/hello­worldc04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9Status: Downloaded newer image for hello­world:latest

Hello from Docker!This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello­world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the    executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it    to your terminal.

To try something more ambitious, you can run an Ubuntu container with: $ docker run ­it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account: https://hub.docker.com

For more examples and ideas, visit: https://docs.docker.com/engine/userguide/

27Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . root@dockerdf:~# docker run ­it ubuntu bashroot@f90f50fbc022:/# root@f90f50fbc022:/# more /etc/debian_version stretch/sidroot@f90f50fbc022:/#

#Ambiente dockerizado – Ubuntu Server

Ou … 

docker pull ubuntu 

#Dessa forma o docker efetuara o download do Docker Hub ­ https://hub.docker.com/

#O download foi bem sucedido??? Execute …

root@dockerdf:~# docker run ubuntu cat /etc/debian_versionstretch/sid

Executar o comando cat /etc/debian_version dentro do container do ubuntu

28Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação tipo 02

Para os usuários do Debian Wheezy, backports deve estar disponível. Para habilitar backports em Wheezy:Entrar na sua máquina e abrir um terminal com sudo ou raiz privilégios.Abra o arquivo /etc/apt/sources.list.d/backports.list em seu editor favorito.Se o arquivo não existir, criá­la.Remova todas as entradas existentes.Adicione uma entrada para backports no Debian Wheezy.  Um exemplo de entrada:

deb http://http.debian.net/debian wheezy­backports main  #Ajuste de acordo com a sua versão do Debian

apt­get updateapt­get install apt­transport­https ca­certificatesapt­key adv ­­keyserver hkp://p80.pool.sks­keyservers.net:80 ­­recv­keys 58118E89F3A912897C070ADBF76221572C52609D

29Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação tipo 02 ­ continuação

vi/nano/mcedit /etc/apt/sources.list.d/docker.list

#Adicioine de acordo com a sua versão

    ­ Debian Wheezy

    deb https://apt.dockerproject.org/repo debian­wheezy main

    ­ Debian Jessie

    deb https://apt.dockerproject.org/repo debian­jessie main

    ­ Debian Stretch/Sid

    deb https://apt.dockerproject.org/repo debian­stretch main

apt­get update

sudo apt­get install docker­enginesudo service docker startsudo docker run hello­world

30Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação Composer:

root@dockerdf:~# curl ­L https://github.com/docker/compose/releases/download/1.8.0/docker­compose­`uname ­s`­`uname ­m` > /usr/local/bin/docker­compose  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100   600    0   600    0     0    479      0 ­­:­­:­­  0:00:01 ­­:­­:­­   478100 7783k  100 7783k    0     0   792k      0  0:00:09  0:00:09 ­­:­­:­­ 1129k

root@dockerdf:~# chmod +x /usr/local/bin/docker­composeroot@dockerdf:~# docker­compose versiondocker­compose version 1.8.0, build f3628c7docker­py version: 1.9.0CPython version: 2.7.9OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013

 

https://docs.docker.com/compose/install/

31Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Instalação Docker Machine:

root@dockerdf:~#  curl ­L https://github.com/docker/machine/releases/download/v0.7.0/docker­machine­`uname ­s`­`uname ­m` > /usr/local/bin/docker­machine  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100   600    0   600    0     0    851      0 ­­:­­:­­ ­­:­­:­­ ­­:­­:­­   851100 34.5M  100 34.5M    0     0  1442k      0  0:00:24  0:00:24 ­­:­­:­­ 1242kroot@dockerdf:~# root@dockerdf:~# chmod +x /usr/local/bin/docker­machineroot@dockerdf:~# docker­machine versiondocker­machine version 0.7.0, build a650a40

 

32Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker:

Para listar as imagens que seu Docker host tem localmente execute o comando abaixo:

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBroot@dockerdf:~# 

As imagens retornadas estão presentes no seu Docker host e não demandarão nenhum download.A não ser que você deseje atualizá­la, caso exista o que possa ser atualizado. Para atulizar a imagem basta executar o comando….

docker pull nome_da_imagemNo caso acima, ubuntu, então …

root@dockerdf:~# docker pull ubuntuUsing default tag: latestlatest: Pulling from library/ubuntu

Digest: sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54bStatus: Image is up to date for ubuntu:latest

 

33Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker:

Inspecionar a imagem que acabou de atualizar, basta utilizar o comando… 

docker inspect nome_da_imagem

root@dockerdf:~# docker inspect ubuntu[    {        "Id": "sha256:42118e3df429f09ca581a9deb3df274601930e428e452f7e4e9f1833c56a100a",        "RepoTags": [            "ubuntu:latest"        ],        "RepoDigests": [            "ubuntu@sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54b"        ],        "Parent": "",        "Comment": "",        "Created": "2016­07­22T15:19:31.961254889Z",        "Container": "18623e507b31713ccb54bb249bd40a3a9f0acfe50ca1a6615729ea983b6a8011",        "ContainerConfig": {            "Hostname": "827f45722fd6",            "Domainname": "",            "User": "",            "AttachStdin": false,            "AttachStdout": false,            "AttachStderr": false,            "Tty": false,            "OpenStdin": false,            "StdinOnce": false,            "Env": [

 

34Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker:

     "Architecture": "amd64",        "Os": "linux",        "Size": 124796948,        "VirtualSize": 124796948,        "GraphDriver": {            "Name": "aufs",            "Data": null        },        "RootFS": {            "Type": "layers",            "Layers": [                "sha256:ea9f151abb7e06353e73172dad421235611d4f6d0560ec95db26e0dc240642c1",                "sha256:0185b3091e8ee299850b096aeb9693d7132f50622d20ea18f88b6a73e9a3309c",                "sha256:98305c1a8f5e5666d42b578043e3266f19e22512daa8c6b44c480b177f0bf006",                "sha256:9a39129ae0ac2fccf7814b8e29dde5002734c1699d4e9176061d66f5b1afc95c"            ]        }    }]

 

35Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker… Como?:

docker run <parâmetros> <imagem> <CMD> <argumentos>

Os parâmetros mais utilizados na execução do container são:Parâmetro | Explicação——–|———— ­d | Execução do container em background ­i | Modo interativo. Mantém o STDIN aberto mesmo sem console anexado ­t | Aloca uma pseudo TTY –rm | Automaticamente remove o continer após finalização (Não funciona com ­d) –name | Nomear o container ­v | Mapeamento de volume ­p | Mapemento de porta ­m | Limitar o uso de memória RAM ­c | Balancear o uso de CPU

 

36Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Executando o Docker… Como?:

root@dockerdf:~# docker run ­it ­­rm ­­name meu_ubuntu ubuntu bashroot@0cb5acd9ff74:/# root@0cb5acd9ff74:/# exit

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBroot@dockerdf:~# 

 

37Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Verificando a lista de containers:

docker ps <parâmetros>Os parâmetros mais utilizados na execução do container são:Parâmetro | Explicação———–|———— ­a | Lista todos os containers, inclusive os desligados ­l | Lista os ultimos containers, inclusive os desligados ­n | Lista os últimos N containers, inclusive os desligados ­q | Lista apenas os ids dos containers, ótimo para utilização em scripts

 

https://docs.docker.com/engine/reference/commandline/ps/

38Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Verificando a lista de containers:

root@dockerdf:~# docker ps ­aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES94c1b8d15ccb        ubuntu              "cat /etc/debian_vers"   9 minutes ago       Exited (0) 9 minutes ago                           silly_chandrasekhar9546bf4f1edf        ubuntu              "cat /etc/debian­vers"   9 minutes ago       Exited (1) 9 minutes ago                           determined_bardeen88372a09c2fb        ubuntu              "cat /etc/debian"        9 minutes ago       Exited (1) 9 minutes ago                           adoring_ritchie34672e88d128        ubuntu              "cat /etc/lsb­release"   9 minutes ago       Exited (1) 9 minutes ago                           stupefied_poincare5859d61c6aec        ubuntu              "/bin/bash"              10 minutes ago      Exited (0) 10 minutes ago                          trusting_mestorff90f50fbc022        ubuntu              "bash"                   About an hour ago   Exited (0) About an hour ago                       mad_goldstinea2f4ba040c29        ubuntu              "bash"                   10 hours ago        Exited (0) 10 hours ago                            zen_torvaldsb7534167f7ef        hello­world         "/hello"                 10 hours ago        Exited (0) 10 hours ago                            awesome_thompsonroot@dockerdf:~# 

  https://docs.docker.com/engine/reference/commandline/ps/

39Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Verificando a lista de containers:

root@dockerdf:~# docker ps ­lCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES94c1b8d15ccb        ubuntu              "cat /etc/debian_vers"   9 minutes ago       Exited (0) 9 minutes ago                       silly_chandrasekharroot@dockerdf:~# root@dockerdf:~# docker ps ­nflag needs an argument: 'n' in ­nSee 'docker ps ­­help'.root@dockerdf:~# docker ps ­n 3CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES94c1b8d15ccb        ubuntu              "cat /etc/debian_vers"   9 minutes ago       Exited (0) 9 minutes ago                        silly_chandrasekhar9546bf4f1edf        ubuntu              "cat /etc/debian­vers"   10 minutes ago      Exited (1) 10 minutes ago                       determined_bardeen88372a09c2fb        ubuntu              "cat /etc/debian"        10 minutes ago      Exited (1) 10 minutes ago                       adoring_ritchieroot@dockerdf:~# 

  https://docs.docker.com/engine/reference/commandline/ps/

40Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Gerenciamento de containers:

Caso deseje desligar o container basta utilizar o comando docker stop nome_do_container

Ele recebe como argumento o ID ou nome do container. Ambos dados podem ser obtidos com o docker ps

Caso deseje ligar o container basta utilizar o comando docker start nome_do_container

Vale ressaltar que a ideia dos containers é serem descartáveis, ou seja, caso você esteja usando o mesmo container por muito tempo sem descartá­lo, você provavelmente estará usando o Docker incorretamente. O Docker 

não é uma máquina, é um processo em execução e como todo processo ele deve ser descartado para que outro possa tomar seu lugar na reinicialização do mesmo.

41Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Criando sua própria imagem:

imagem é a classe e o container o objeto, ou seja, a imagem é a abstração da infraestrutura em um estado somente leitura, que é de onde será instanciado o container.Todo container é iniciado a partir de uma imagem, dessa forma podemos concluir que nunca teremos uma imagem em execução.Um container só pode ser iniciado a partir de uma única imagem, ou seja, caso deseje umcomportamento diferente será necessário customizar a imagem.

As imagens oficiais da docker são aquelas que não tem usuário em seu nome, ou seja, a imagem “ubuntu:16.04  é ′′oficial, por outro lado a imagem “nuagebec/ubuntu” não é oficial. Essa segunda imagem é mantida pelo usuário nuagebec, que mantém muitas outras imagens não oficiais.

As imagens oficiais são mantidas pela empresa docker e são disponibilizadas na nuvem docker.

Nome da imagemO nome de uma imagem oficial é composta de duas partes. A primeira é o que a documentação chama de “repositório” e a segunda é a “tag”. No caso da imagem “ubuntu:14.04”, ubuntu é o repositório e 14.04 é a tag.

42Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Criando sua própria imagem:

Para visualizar todas as imagens que se encontram localmente na sua estação nesse momento:

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kB

Há duas formas de criar imagens customizadas: Com commit e com Dockerfile.

43Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Criando imagens com commit

É possível criar imagens executando o comando commit relacionado a um container, ou seja, esse comando obtera o status atual do container escolhido e criará uma imagem a partir dessa informação.

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBroot@dockerdf:~# docker run ­it ­­name ubunudf ubuntu bashroot@334aa1d388e8:/# 

Instalar o nginx nele

root@334aa1d388e8:/# apt­get update &&  apt­get install nginx ­y && exit

Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]Get:2 http://archive.ubuntu.com/ubuntu xenial­updates InRelease [95.7 kB]Get:3 http://archive.ubuntu.com/ubuntu xenial­security InRelease [94.5 kB]Get:4 http://archive.ubuntu.com/ubuntu xenial/main Sources [1103 kB]Get:5 http://archive.ubuntu.com/ubuntu xenial/restricted Sources [5179 B]                                                                                                      Get:6 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]    . . .                                      

44Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Criando imagens com commit

Setting up nginx­common (1.10.0­0ubuntu0.16.04.2) ...Setting up nginx­core (1.10.0­0ubuntu0.16.04.2) ...invoke­rc.d: could not determine current runlevelinvoke­rc.d: policy­rc.d denied execution of start.Setting up nginx (1.10.0­0ubuntu0.16.04.2) ...Processing triggers for libc­bin (2.23­0ubuntu3) ...Processing triggers for sgml­base (1.26+nmu4ubuntu1) ...Processing triggers for systemd (229­4ubuntu6) ...exitroot@dockerdf:~# Saiu do Container

root@dockerdf:~# docker stop ubunudfubunudfroot@dockerdf:~# docker commit ubunudf ubuntudf:nginx  Container_criado imagem_criada sha256:6768ec58b858b02e01c6ed894edead23987cb3043e863621112b697fc3405bebroot@dockerdf:~# 

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED              SIZEubuntudf            nginx               6768ec58b858        About a minute ago   220.4 MBubuntu              latest              42118e3df429        2 weeks ago          124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago          1.848 kBroot@dockerdf:~# 

45Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E se deu certo  . . . 

root@dockerdf:~# docker run ­it ­­rm ubuntudf:nginx dpkg ­l nginx Executou o comando dentro do containerDesired=Unknown/Install/Remove/Purge/Hold| Status=Not/Inst/Conf­files/Unpacked/halF­conf/Half­inst/trig­aWait/Trig­pend|/ Err?=(none)/Reinst­required (Status,Err: uppercase=bad)||/ Name           Version      Architecture Description+++­==============­============­============­=================================ii  nginx          1.10.0­0ubun all          small, powerful, scalable web/proroot@dockerdf:~# 

Nota:O método commit não é a melhor opção para criar imagens, pois como pudemos verificar, o processo de 

modificação da imagem é completamente manual e apresenta certa dificuldade para rastrear as mudanças que foram efetuadas, uma vez que o que foi modificado manualmente não é registrado automaticamente na 

estrutura do docker.

46Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente . . . 

Dockerfile na verdade representa a exata diferença entre uma determinada imagem, que aqui chamamos de base, e a imagem que se deseja criar.

47Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente . . . 

root@dockerdf:~# touch teste_metuproot@dockerdf:~# vi Dockerfileroot@dockerdf:~# more Dockerfile FROM ubuntuRUN apt­get update && apt­get install nginx ­yCOPY teste_metup /tmp/teste_metupCMD bashroot@dockerdf:~#

FROM é usado para informar qual imagem será utilizada.RUN é usado para informar quais comandos serão executados nesse ambiente para efetuar asmudanças necessárias na infraestrutura do sistema.COPY é usado para copiar arquivos da estação para a imagem. Mas pode ser utilizada para enviar arquivos de configuração de ambiente e códigos para serem executados em serviços de aplicação.CMD é usado informar qual comando será executado por padrão.

Agora, construir:

root@dockerdf:~# docker build ­t ubuntunovo:web_auto .  ­t nome_imagem:tag Observe o . ao fonal da linha para informar que tudo do diretório atual será utilizadoSending build context to Docker daemon 9.728 kBStep 1 : FROM ubuntu ­­­> 42118e3df429Step 2 : RUN apt­get update && apt­get install nginx ­y ­­­> Running in 3e6c3cfcd9d9Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]

48Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente . . . 

Step 3 : COPY teste_metup /tmp/teste_metup ­­­> 079c2612224eRemoving intermediate container 894932c50f21Step 4 : CMD bash ­­­> Running in 7dfcbb3ecf95 ­­­> d9ce37133936Removing intermediate container 7dfcbb3ecf95Successfully built d9ce37133936   ­  Build criadaroot@dockerdf:~# root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntunovo          web_auto            d9ce37133936        13 minutes ago      220.4 MBubuntudf            nginx               6768ec58b858        35 minutes ago      220.4 MBubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBroot@dockerdf:~# root@dockerdf:~# docker run ­it ­­rm ubuntunovo:web_auto ls ­l /tmptotal 0­rw­r­­r­­ 1 root root 0 Aug  6 08:07 teste_metup

49Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente de novo . . . 

O resultado de cada instrução do Dockerfile é armazenado em um cache local, ou seja, caso não seja modificado na próxima criação da imagem (build) tudo estará no cache, mas caso algo seja modificado apenas a instrução modificada e as posteriores serão executadas novamente.

root@dockerdf:~# more Dockerfile FROM ubuntuRUN apt­get update && apt­get install nginx ­yRUN apt­get install php7.0 ­yCOPY teste_metup /tmp/teste_metupCMD bashroot@dockerdf:~# 

50Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Então vamos fazer outra igual, mas diferente de novo . . . 

root@dockerdf:~# docker build ­t ubuntunovo:web_auto .Sending build context to Docker daemon 11.78 kBStep 1 : FROM ubuntu ­­­> 42118e3df429Step 2 : RUN apt­get update && apt­get install nginx ­y ­­­> Using cache ­­­> 8b4bb9bc5548Step 3 : RUN apt­get install php7.0 ­y ­­­> Running in c194608952b2Reading package lists...Building dependency tree...Reading state information...The following additional packages will be installed:  file libbsd0 libedit2 libmagic1 mime­support php­common php7.0­cli  php7.0­common php7.0­fpm php7.0­json php7.0­opcache php7.0­readline psmiscSuggested packages:  php­pearThe following NEW packages will be installed:  file libbsd0 libedit2 libmagic1 mime­support php­common php7.0 php7.0­cli  php7.0­common php7.0­fpm php7.0­json php7.0­opcache php7.0­readline psmisc0 upgraded, 14 newly installed, 0 to remove and 5 not upgraded.Need to get 3939 kB of archives.After this operation, 19.0 MB of additional disk space will be used.Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmagic1 amd64 1:5.25­2ubuntu1 [216 kB]

51Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E aonde se guarda todas essas alterações? 

52Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

A rede na verdade é uma abstração criada para facilitar o gerenciamento da comunicação de dados entre containers e os nós externos ao ambiente docker

O docker é disponibilizado com três redes por padrão. Essas redes oferecem configurações específicaspara gerenciamento do tráfego de dados.

root@dockerdf:~# docker network lsNETWORK ID          NAME                DRIVER              SCOPE1d14f4906e3c        bridge              bridge              local               de3ae5b6d137        host                host                local               baea6f843214        none                null                local 

Como exemplo de utilização de uma rede criada por usuário, primeiro vamos criar a rede chamadaisolada_nw com o driver bridge

root@dockerdf:~# docker network create ­­driver bridge isolada_nw330dbf27cef157cba21c373e782253931314b5643a2365b93219ba6614363597root@dockerdf:~# docker network lsNETWORK ID          NAME                DRIVER              SCOPE1d14f4906e3c        bridge              bridge              local               de3ae5b6d137        host                host                local               330dbf27cef1        isolada_nw          bridge              local               baea6f843214        none                null                local               root@dockerdf:~# 

53Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

root@dockerdf:~# docker run ­d ­­name bd ­e MYSQL_ROOT_PASSWORD=minhasenha mysqlUnable to find image 'mysql:latest' locallylatest: Pulling from library/mysql357ea8c3d80b: Pull complete 256a92f57ae8: Pull complete d5ee0325fe91: Pull complete a15deb03758b: Pull complete 7b8a8ccc8d50: Pull complete 1a40eeae36e9: Pull complete 833539b56478: Pull complete 4f350efbb7e5: Pull complete 266f161e49c6: Pull complete 2d0f7f51c888: Pull complete 13b44531c4a7: Pull complete Digest: sha256:e6dc999f4e2d5982e74a008ff08c0641f0832e19339aaf4f4c2bc2ca426e96c6Status: Downloaded newer image for mysql:latest5b08c3672ecc852f9fa5759985ba5822a645e25052abe55ddce1bd353e63f022root@dockerdf:~# 

54Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

root@dockerdf:~# docker run ­d ­p 80:80 ­­name app ­­link bd tutum/apache­phpUnable to find image 'tutum/apache­php:latest' locallylatest: Pulling from tutum/apache­php

6ffe5d2d6a97: Pull complete f4e00f994fd4: Pull complete e99f3d1fc87b: Pull complete a3ed95caeb02: Pull complete c10ab9e629d8: Pull complete 5c65b067601c: Pull complete 2cbc3ddde9c1: Pull complete 9a5e857e989f: Pull complete 7bd95ceec22a: Pull complete c27094051f1e: Pull complete d820ec68d287: Pull complete Digest: sha256:6d21118f57fd5415638b0744be140c16e40353e2bc06659c8c8ffeadae648cfcStatus: Downloaded newer image for tutum/apache­php:latestroot@dockerdf:~# 

55Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

root@dockerdf:~# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE<none>              <none>              8781fc8964a1        39 minutes ago      240.7 MBubuntunovo          web_auto            d9ce37133936        About an hour ago   220.4 MBubuntudf            nginx               6768ec58b858        About an hour ago   220.4 MBmysql               latest              43c70d2fa278        4 days ago          384.5 MBubuntu              latest              42118e3df429        2 weeks ago         124.8 MBhello­world         latest              c54a2cc56cbb        5 weeks ago         1.848 kBalpine              latest              4e38e38c8ce0        6 weeks ago         4.799 MBtutum/apache­php    latest              2e233ad9329b        13 months ago       244.7 MBroot@dockerdf:~# 

root@dockerdf:~# docker exec ­it app ping bdPING bd (172.17.0.2) 56(84) bytes of data.64 bytes from bd (172.17.0.2): icmp_seq=1 ttl=64 time=0.165 ms64 bytes from bd (172.17.0.2): icmp_seq=2 ttl=64 time=0.174 ms64 bytes from bd (172.17.0.2): icmp_seq=3 ttl=64 time=0.136 ms^C­­­ bd ping statistics ­­­3 packets transmitted, 3 received, 0% packet loss, time 2001msrtt min/avg/max/mdev = 0.136/0.158/0.174/0.019 msroot@dockerdf:~# 

56Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

Iniciar um container na rede, chamada isolada_nw,

root@dockerdf:~# docker run ­itd ­­net isolada_nw alpine shUnable to find image 'alpine:latest' locallylatest: Pulling from library/alpine

e110a4a17941: Pull complete Digest: sha256:3dcdb92d7432d56604d4545cbd324b14e647b313626d99b889d0626de158f73aStatus: Downloaded newer image for alpine:latest3e9c00abf1e4b63c238dd31661bc33436a2035bb1a6d64776878435c5d3ed526root@dockerdf:~# 

https://hub.docker.com/_/alpine/Linux Alpine com 5MB

57Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

root@dockerdf:~# docker network inspect isolada_nw[    {        "Name": "isolada_nw",        "Id": "330dbf27cef157cba21c373e782253931314b5643a2365b93219ba6614363597",        "Scope": "local",        "Driver": "bridge",        "EnableIPv6": false,        "IPAM": {            "Driver": "default",            "Options": {},            "Config": [                {                    "Subnet": "172.18.0.0/16",                    "Gateway": "172.18.0.1"                }            ]        },        "Internal": false,        "Containers": {},        "Options": {},        "Labels": {}    }]

58Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . E como acessar os containers?

Overlay permite comunicação entre hosts docker, ou seja, com sua utilização os containers de um determinado host docker poderão acessar nativamente containers de um outro ambiente docker.

59Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Cansei, relaxar . . . 

root@dockerdf:~# mkdir relaxarroot@dockerdf:~# cd relaxarroot@dockerdf:~/relaxar# vi Dockerfileroot@dockerdf:~/relaxar# more Dockerfile FROM ubuntuMAINTAINER DockerDF <dockerdf@gmail.com>RUN ["apt­get", "update"]RUN ["apt­get", "install", "­y", "frozen­bubble"]RUN ["useradd", "player", "­u", "1000", "­g", "100", "­m", "­d", "/home/player", "­s", "/bin/bash"]USER player# ENTRYPOINT define o comando que executará quando o contêiner# for executado a partir da imagem.ENTRYPOINT ["/usr/games/frozen­bubble"] ­­­> Running in 9b541ce680b9 ­­­> 615b31d902d3Removing intermediate container 9b541ce680b9Step 7 : ENTRYPOINT /usr/games/frozen­bubble ­­­> Running in c80cb93f136d ­­­> ece9fc943718Removing intermediate container c80cb93f136dSuccessfully built ece9fc943718

60Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . . Cansei, relaxar . . . 

root@dockerdf:~/relaxar# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZErelaxar             game                ece9fc943718        4 minutes ago       312.1 MB

root@dockerdf:~/relaxar# docker run ­ti ­­rm ­e "DISPLAY=unix:0" ­v /tmp/.X11­unix:/tmp/.X11­unix ­v $HOME/Pictures:/home/player relaxar:game

61Meetup Mão na massa – DOCKER - DF

Nadando de braçada . . .

62Meetup Mão na massa – DOCKER - DF

● E agora ? ? ?

Chegamos .. . e ai ?

http://www.meetup.com/pt-BR/Docker-Meetup/

63Meetup Mão na massa – DOCKER - DF

● E agora ? ? ?

Chegamos .. . e ai ?

https://www.facebook.com/dockerdf/

64Meetup Mão na massa – DOCKER - DF

● E agora ? ? ?

Chegamos .. . e ai ?

https://dockerdf.slack.com

65Meetup Mão na massa – DOCKER - DF

● E agora ? ? ?

Chegamos .. . e ai ?

66Meetup Mão na massa – DOCKER - DF

Chegamos .. . e ai ?

67Meetup Mão na massa – DOCKER - DF

● ReferênciasPalestra de Solomon Hykes - https://youtu.be/wW9CAH9nSLs

Site oficial - https://www.docker.com/

Livro do Gomex - https://leanpub.com/dockerparadesenvolvedores

Site do Gomex - http://techfree.com.br/

Treinamento do Docker - https://training.docker.com/

Mundo Docker - http://www.mundodocker.com.br/o-que-e-docker/

Devops Brasil - http://devops-br.org/

Primeiro Passo - http://www.diego-garcia.info/2015/02/15/docker-por-onde-comecar/

Segundo passo - http://blog.concretesolutions.com.br/2015/07/como-dockerizar-aplicacao-linux/

Nadando . . .

68Meetup Mão na massa – DOCKER - DF

● ReferênciasTelegram - https://telegram.me/dockerbr

Luiz Carlos Faria - http://luizcarlosfaria.net/docker/

Devops e Infra Ágil - http://gutocarvalho.net/octopress/2013/03/16/o-que-e-um-devops-afinal/

DevopsDay – Porto Alegre - https://goo.gl/asyvdP

LinuxTips - https://goo.gl/htkaLM

Nadando . . .

69Meetup Mão na massa – DOCKER - DF

FIM