docker – mão na massafiles.meetup.com/18269148/meetup2_mao_na_massa.pdf · 2013 em um lighting...
TRANSCRIPT
1Meetup Mão na massa – DOCKER - DF
Docker – Mão na massa
Eustáquio Mendes Guimarães – [email protected]
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 helloworld
26Meetup Mão na massa – DOCKER - DF
Nadando de braçada . . . root@dockerdf:/etc/apt# docker run helloworldUnable to find image 'helloworld:latest' locallylatest: Pulling from library/helloworldc04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9Status: Downloaded newer image for helloworld: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 "helloworld" 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 wheezybackports main #Ajuste de acordo com a sua versão do Debian
aptget updateaptget install apttransporthttps cacertificatesaptkey adv keyserver hkp://p80.pool.skskeyservers.net:80 recvkeys 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 debianwheezy main
Debian Jessie
deb https://apt.dockerproject.org/repo debianjessie main
Debian Stretch/Sid
deb https://apt.dockerproject.org/repo debianstretch main
aptget update
sudo aptget install dockerenginesudo service docker startsudo docker run helloworld
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/dockercompose`uname s``uname m` > /usr/local/bin/dockercompose % 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/dockercomposeroot@dockerdf:~# dockercompose versiondockercompose version 1.8.0, build f3628c7dockerpy 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/dockermachine`uname s``uname m` > /usr/local/bin/dockermachine % 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/dockermachineroot@dockerdf:~# dockermachine versiondockermachine 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 MBhelloworld 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": "20160722T15: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 MBhelloworld 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/debianvers" 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/lsbrelease" 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 helloworld "/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/debianvers" 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 MBhelloworld 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 MBhelloworld latest c54a2cc56cbb 5 weeks ago 1.848 kBroot@dockerdf:~# docker run it name ubunudf ubuntu bashroot@334aa1d388e8:/#
Instalar o nginx nele
root@334aa1d388e8:/# aptget update && aptget install nginx y && exit
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]Get:2 http://archive.ubuntu.com/ubuntu xenialupdates InRelease [95.7 kB]Get:3 http://archive.ubuntu.com/ubuntu xenialsecurity 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 nginxcommon (1.10.00ubuntu0.16.04.2) ...Setting up nginxcore (1.10.00ubuntu0.16.04.2) ...invokerc.d: could not determine current runlevelinvokerc.d: policyrc.d denied execution of start.Setting up nginx (1.10.00ubuntu0.16.04.2) ...Processing triggers for libcbin (2.230ubuntu3) ...Processing triggers for sgmlbase (1.26+nmu4ubuntu1) ...Processing triggers for systemd (2294ubuntu6) ...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 MBhelloworld 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/Conffiles/Unpacked/halFconf/Halfinst/trigaWait/Trigpend|/ Err?=(none)/Reinstrequired (Status,Err: uppercase=bad)||/ Name Version Architecture Description+++=======================================================================ii nginx 1.10.00ubun 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 aptget update && aptget 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 aptget update && aptget 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 MBhelloworld latest c54a2cc56cbb 5 weeks ago 1.848 kBroot@dockerdf:~# root@dockerdf:~# docker run it rm ubuntunovo:web_auto ls l /tmptotal 0rwrr 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 aptget update && aptget install nginx yRUN aptget 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 aptget update && aptget install nginx y > Using cache > 8b4bb9bc5548Step 3 : RUN aptget 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 mimesupport phpcommon php7.0cli php7.0common php7.0fpm php7.0json php7.0opcache php7.0readline psmiscSuggested packages: phppearThe following NEW packages will be installed: file libbsd0 libedit2 libmagic1 mimesupport phpcommon php7.0 php7.0cli php7.0common php7.0fpm php7.0json php7.0opcache php7.0readline 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.252ubuntu1 [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/apachephpUnable to find image 'tutum/apachephp:latest' locallylatest: Pulling from tutum/apachephp
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/apachephp: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 MBhelloworld latest c54a2cc56cbb 5 weeks ago 1.848 kBalpine latest 4e38e38c8ce0 6 weeks ago 4.799 MBtutum/apachephp 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 <[email protected]>RUN ["aptget", "update"]RUN ["aptget", "install", "y", "frozenbubble"]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/frozenbubble"] > Running in 9b541ce680b9 > 615b31d902d3Removing intermediate container 9b541ce680b9Step 7 : ENTRYPOINT /usr/games/frozenbubble > 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/.X11unix:/tmp/.X11unix 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 – [email protected]
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 helloworld
26Meetup Mão na massa – DOCKER - DF
Nadando de braçada . . . root@dockerdf:/etc/apt# docker run helloworldUnable to find image 'helloworld:latest' locallylatest: Pulling from library/helloworldc04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9Status: Downloaded newer image for helloworld: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 "helloworld" 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 wheezybackports main #Ajuste de acordo com a sua versão do Debian
aptget updateaptget install apttransporthttps cacertificatesaptkey adv keyserver hkp://p80.pool.skskeyservers.net:80 recvkeys 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 debianwheezy main
Debian Jessie
deb https://apt.dockerproject.org/repo debianjessie main
Debian Stretch/Sid
deb https://apt.dockerproject.org/repo debianstretch main
aptget update
sudo aptget install dockerenginesudo service docker startsudo docker run helloworld
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/dockercompose`uname s``uname m` > /usr/local/bin/dockercompose % 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/dockercomposeroot@dockerdf:~# dockercompose versiondockercompose version 1.8.0, build f3628c7dockerpy 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/dockermachine`uname s``uname m` > /usr/local/bin/dockermachine % 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/dockermachineroot@dockerdf:~# dockermachine versiondockermachine 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 MBhelloworld 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": "20160722T15: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 MBhelloworld 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/debianvers" 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/lsbrelease" 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 helloworld "/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/debianvers" 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 MBhelloworld 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 MBhelloworld latest c54a2cc56cbb 5 weeks ago 1.848 kBroot@dockerdf:~# docker run it name ubunudf ubuntu bashroot@334aa1d388e8:/#
Instalar o nginx nele
root@334aa1d388e8:/# aptget update && aptget install nginx y && exit
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]Get:2 http://archive.ubuntu.com/ubuntu xenialupdates InRelease [95.7 kB]Get:3 http://archive.ubuntu.com/ubuntu xenialsecurity 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 nginxcommon (1.10.00ubuntu0.16.04.2) ...Setting up nginxcore (1.10.00ubuntu0.16.04.2) ...invokerc.d: could not determine current runlevelinvokerc.d: policyrc.d denied execution of start.Setting up nginx (1.10.00ubuntu0.16.04.2) ...Processing triggers for libcbin (2.230ubuntu3) ...Processing triggers for sgmlbase (1.26+nmu4ubuntu1) ...Processing triggers for systemd (2294ubuntu6) ...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 MBhelloworld 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/Conffiles/Unpacked/halFconf/Halfinst/trigaWait/Trigpend|/ Err?=(none)/Reinstrequired (Status,Err: uppercase=bad)||/ Name Version Architecture Description+++=======================================================================ii nginx 1.10.00ubun 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 aptget update && aptget 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 aptget update && aptget 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 MBhelloworld latest c54a2cc56cbb 5 weeks ago 1.848 kBroot@dockerdf:~# root@dockerdf:~# docker run it rm ubuntunovo:web_auto ls l /tmptotal 0rwrr 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 aptget update && aptget install nginx yRUN aptget 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 aptget update && aptget install nginx y > Using cache > 8b4bb9bc5548Step 3 : RUN aptget 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 mimesupport phpcommon php7.0cli php7.0common php7.0fpm php7.0json php7.0opcache php7.0readline psmiscSuggested packages: phppearThe following NEW packages will be installed: file libbsd0 libedit2 libmagic1 mimesupport phpcommon php7.0 php7.0cli php7.0common php7.0fpm php7.0json php7.0opcache php7.0readline 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.252ubuntu1 [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/apachephpUnable to find image 'tutum/apachephp:latest' locallylatest: Pulling from tutum/apachephp
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/apachephp: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 MBhelloworld latest c54a2cc56cbb 5 weeks ago 1.848 kBalpine latest 4e38e38c8ce0 6 weeks ago 4.799 MBtutum/apachephp 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 <[email protected]>RUN ["aptget", "update"]RUN ["aptget", "install", "y", "frozenbubble"]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/frozenbubble"] > Running in 9b541ce680b9 > 615b31d902d3Removing intermediate container 9b541ce680b9Step 7 : ENTRYPOINT /usr/games/frozenbubble > 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/.X11unix:/tmp/.X11unix 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