SlideShare uma empresa Scribd logo
1 de 76
Baixar para ler offline
1
André Justi
O que é Docker
O Docker é uma tecnologia Open Source que permite criar, executar, testar e implantar aplicações
distribuídas dentro de containers de software. Ele permite que você empacote um software de uma
padronizada para o desenvolvimento de software, contendo tudo que é necessário para a execução:
código, runtime, ferramentas, bibliotecas, etc. O Docker permite que você implante aplicações
rapidamente, de modo confiável e estável, em qualquer ambiente.
2
O que são containers
Os containers são um método de virtualização em nível de sistema operacional que permite executar
uma aplicação e suas dependências em processos com recursos isolados. Os containers permitem
empacotar facilmente o código, as configurações e as dependências de uma aplicação em elementos
fundamentais que oferecem consistência ambiental, eficiência operacional, produtividade de
desenvolvedores e controle de versões.
Os containers podem ajudar a garantir rapidez, confiabilidade e consistência de implantação,
independentemente do ambiente de implantação. Além disso, os containers oferecem um controle
mais granular dos recursos, aumentando a eficiência da infraestrutura.
3
Breve história
A construção do Docker foi iniciada por Solomon Hykes, na França, dentro da empresa DotCloud,
Docker representa a evolução da tecnologia proprietária da DotCloud.
Docker foi lançado como Open Source em março de 2013, e em março de 2014 com o lançamento da
versão 0.9 Docker que deixou LXC como ambiente de execução padrão para usar sua própria
libcontainer, que é escrita na linguagem GO criada pelo Google.
No dia 24 de outubro de 2015 o projeto tornou-se o 20º mais estrelado, como mais de 6.800 fork’s,
como mais de 1100 colaboradores. Uma breve análise de 2016 mostrou DotCloud, Cisco, Google,
IBM, Microsoft e Red Hat como as principais contribuidoras do Docker.
4
Existem mais de 500 mil aplicações Dockerizadas, um crescimento de 3100% ao longo de 2 anos.
Mais de 4 bilhões de containers já foram puxados até hoje.
Docker é apoiado por uma grande e crescente comunidade de colaboradores e usuários; Como
exemplo, há 150 mil membros de Meetups Docker em todo o mundo. Isso é cerca de 40% da
população da Islândia!
A adoção do Docker aumentou mais de 30% no último ano.
Cerca de 30% dos containers Dockers estão rodando em produção.
29% das empresas que já ouviram falar em Docker planejam usá-lo.
Alguns outros fatos sobre Docker
5
Uma análise de janeiro 2017 dos perfis do LinkedIn, mostra que as skils sobre Docker cresceram
160% em 2016.
No GitHub existem quase 150 mil repositórios com algum código ou artefato Docker.
Alguns outros fatos sobre Docker
6
Com certeza a comunidade Docker é um
dos seus pontos fortes, são centenas de
grupos de meetups espalhados pelo
mundo, além de fóruns, grupos de facebook
e milhares de contribuidores no Twitter,
GitHub, YouTube, SlideShare etc.
7
Comunidade
Meetups Docker Brasil
Principais buscas
1. docker
2. container docker
3. container
4. install docker
5. dockerfile
6. ubuntu docker
7. docker image
8. linux docker
9. docker run
10. docker windows
11. hub docker
12. docker file
13. docker compose
14. docker containers
15. docker images
O que estão falando por aí | Google Trends
8
Comparação com outros termos populares
Docker
Big Data
Micro Services
2013 2017
O que estão falando por aí | Stack Overflow
9
Comparação com outros termos populares
Docker
Big Data
Micro Services
2013 2017
Quem está usando
… e muitas outras empresas e projetos!
10
VM
O objetivo desse modelo é compartilhar os recursos físicos entre vários ambientes isolados, sendo
que cada um deles tem sob sua tutela uma máquina inteira, com memória, disco, processador, rede e
outros periféricos, todos entregues via abstração de virtualização.
É como se dentro de uma máquina física criasse máquinas menores e independentes entre sí. Cada
máquina dessa tem seu próprio sistema operacional completo, que por sua vez interage com todos
os hardwares virtuais que lhe foi entregue pelo modelo de virtualização a nível de máquina.
Vale ressaltar que o sistema operacional instalado dentro de uma máquina virtual fará interação com
os hardwares virtuais e não com o hardware real.
VM vs Docker
11
Docker
Esse modelo de virtualização está no nível de sistema operacional, ou seja, ao contrário da máquina
virtual um container não tem visão de uma máquina inteira, ele é apenas um processo em execução
em um kernel compartilhado entre todos os outros containers.
Ele utiliza o namespace para prover o devido isolamento de memória RAM, processamento, disco e
acesso a rede, mesmo compartilhamento o mesmo kernel, esse processo em execução tem a visão
de estar usando um sistema operacional dedicado.
VM vs Docker
12
VM vs Docker
13
Guest OS
Bins/Libs
App 01
Server
Host OS
Hypervisor
Estrutura VM (Virtual Machine)
Guest OS
Bins/Libs
App 02
VM 02VM 01
VMs
MV
Estrutura Docker
Server
Host OS
Docker Engine
Bins/Libs
App 01
Bins/Libs
App 02
CONT 02 CONT 01
Containers
Docker
Partes principais do Docker
14
network
container
data volumes
image
Client
docker CLI
REST API
Server
docker daemon
gerenciador
gerenciador
gerenciador
gerenciador
Docker usa uma arquitetura cliente-servidor.
A parte cliente fala com o Docker daemon,
que faz o trabalho pesado de construção,
execução e distribuição de seus containers e
imagens Docker, também controla os
recursos executados.
O cliente Docker e Docker daemon, podem
ser executados no mesmo sistema, também
é possível conectar um cliente Docker a um
Docker daemon remoto. O cliente Docker e
daemon se comunicam através de uma API
REST, através de sockets UNIX ou uma
interface de rede, para execuções de
comandos ou scripts.
Containers docker - Containers tem como base sempre uma imagem, pense como na seguinte
analogia do mundo Java, uma imagem é uma classe e um container é como um objeto instância
dessa classe, então podemos através de uma imagem “instanciar” vários containers, também
através de recursos chroot, Cgroups é possível definirmos limitações de recursos recursos e
isolamento parcial ou total dos mesmos.
Elementos do Docker
15
Algumas características dos containers
● Portabilidade de aplicação
● Isolamento de processos
● Prevenção de violação externa
● Gerenciamento de consumo de recursos
imagens docker - Imagens são templates para criação de containers, como falado no slide anterior,
imagens são imutáveis, para executá-las é necessário criar uma instância dela o “container”, também
vale ressaltar que as imagens são construídas em camadas, o que facilita sua reutilização e
manutenção. Em resumo uma imagem nada mais é do que um ambiente totalmente encapsulado e
pronto para ser replicado onde desejar
Elementos do Docker
16
Kernel
Java8
Image
Minha App 01
Image
Container
01
Debian
Base Image
Wildfly 8
Image
Minha App 02
Image
Node JS
Image
Nginx
Image
Minha App 03
Image
Alpine
Base Image
Apache
Image
Minha App 04
Imagem
Container
02
Container 03
Container
04
Container 06
Container
05
Dockerfile - São scripts com uma série de comandos para criação de uma imagem, nesses scripts
podemos fazer uma séries de coisas como executar comandos sh, criar variáveis de ambiente, copiar
arquivos e pastas do host para dentro da imagem etc.
Exemplo
Elementos do Docker
17
FROM ubuntu
MAINTAINER andrejusti
RUN apt-get update
RUN apt-get install -y nginx && apt-get clean
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 8080
ENTRYPOINT [“/usr/sbin/nginx”]
CMD [“start”, “-g”]
Docker Registry - É como um repositório GIT, onde as imagens podem ser versionadas, comitadas,
“puxadas” etc, quando recuperamos uma imagem, usando o comando docker pull por exemplo,
estamos normalmente baixando a imagem de um registro Docker, o repositório oficial do Docker é o
Docker HUB, onde é possível hospedar e versionar imagens públicas e privadas.
Elementos do Docker
18
Docker host
Images
Partes principais do Docker
19
Client
docker CLI
docker build
docker pull
docker run
Containers
docker registry
REST API
docker daemon
Comandos Docker
20
Tipo de parâmetro Descrição
<valor> parâmetro obrigatório
[valor] parâmetro opcional
[valor...] ou <valor...> parâmetro multivalorado
Comandos Docker | docker help
21
docker <COMAND> --help
Exibe a forma de execução do comando e seus possíveis parâmetros
$ docker logs --help
> Usage: docker logs [OPTIONS] CONTAINER
> Fetch the logs of a container
> Options:
> --details Show extra details provided to logs
> -f, --follow Follow log output
> --help Print usage
> --since string Show logs since timestamp
> --tail string Number of lines to show from the end of the logs (default ""all"")
> -t, --timestamps Show timestamps
Exemplo
Comandos Docker | docker info
22
docker info
Exibe as informações de execução do docker
$ docker info
> Containers: 5
> Running: 1
> Paused: 0
> Stopped: 4
> Images: 17
> Server Version: 1.13.0
> Storage Driver: overlay2
> Backing Filesystem: extfs
> Supports d_type: true
> Native Overlay Diff: true
> Logging Driver: json-file
> Cgroup Driver: cgroupfs
> Plugins:
> Volume: local
> Network: bridge host macvlan null overlay
Exemplo
docker login [OPTIONS] <SERVER>
Faz login em um servidor de registro Docker
Parâmetros
-u Login do registro docker
-p Senha do registro docker
Comandos Docker | docker login
23
$ docker login -u meuLogin -p minhaSenha docker-registro.meuservidor.com.br
> Login Succeeded
#Exibir servidores logado
$ cat $HOME/.docker/config.json
> "auths": {"docker-registro.meuservidor.com.br": {"auth": "c2FqYWR2OkBTb2Z0cGxhbjIwMTI="}}
Exemplo
docker logout <SERVER>
Faz login em um servidor de registro Docker
Comandos Docker | docker logout
24
$ docker logout docker-registro.meuservidor.com.br
> Removing login credentials for docker-registro.meuservidor.com.br
Exemplo
docker images [OPTIONS]
Lista as imagens baixadas
Parâmetros
-a Mostrar todas imagens (por padrão oculta as intermediárias)
Comandos Docker | docker images
25
$ docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> redis latest 74d8f543ac97 6 days ago 184 MB
> ubuntu latest f49eec89601e 2 weeks ago 129 MB
$ docker images -a
> REPOSITORY TAG IMAGE ID CREATED SIZE
> redis latest 74d8f543ac97 6 days ago 184 MB
> ubuntu latest f49eec89601e 2 weeks ago 129 MB
> java latest d23bdf5b1b1b 2 weeks ago 643 MB
Exemplo
docker pull [OPTIONS] <NAME>[:TAG]
Baixa uma imagem
Parâmetros
-a Baixa todas tags da imagem
Comandos Docker | docker pull
26
$ docker pull php:latest
> latest: Pulling from library/php
> 5040bd298390: Already exists
> 568dce68541a: Pull complete
> 6a832068e64c: Pull complete
> Digest: sha256:cdd9431e016e974cc84bb103e22152195e02f54591ac48fe705d66b1384d6a08
> Status: Downloaded newer image for php:latest
Exemplo
docker search [OPTIONS] <TERM>
Pesquisa nos repositórios imagens
Parâmetros
--limit <quantidadeResultados> Limita a consulta a um número de resultados
Comandos Docker | docker search
27
$ docker search redis
> NAME DESCRIPTION STARS OFFICIAL AUTOMATED
> redis Redis is an open source key-value store th... 3336 [OK]
> sameersbn/redis 43 [OK]
> bitnami/redis Bitnami Redis Docker Image 36 [OK]
> torusware/speedus-redis Always updated official Redis docker image... 32 [OK]
$ docker search --limit 1 redis
> NAME DESCRIPTION STARS OFFICIAL AUTOMATED
> redis Redis is an open source key-value store th... 3336 [OK]
> sameersbn/redis 43 [OK]
Exemplo
docker run [OPTIONS] <IMAGE> <COMMAND> [ARG...]
Executa uma imagem (criando um container)
Parâmetros
-e Define uma variável de ambiente
--env-file Local de uma arquivo com variáveis de ambiente
--link Adicionar link a outro container
-m
<quantidadeDeMemoria>
Define o limite de memória que o container pode usar do host
--memory-swap
<quantidadeDeMemoria>
Define o limite de memória swap que o container pode usar (-1 para deixar ilimitado)
--name Nome do container
Comandos Docker | docker run
28
Parâmetros
-p Mapeia uma porta entre o container e o host
--restart
Tipo de política de reinicialização do container
Opções:
no - Não reinicie quando o serviço for inicial
failure - Reinicia somente se o container foi encerrado com status diferente de zero
(diferente de sucesso)
always - Sempre reinicia quando o serviço docker for iniciado, independente do status
--rm
Remover o container automaticamente quando ele for terminado (default false)
--runtime Tempo de execução para usar neste container
-v Vincular um volume
--storage-opt Opções do storage do container
-d Roda o container em backgroud
Comandos Docker | docker run
29
Comandos Docker | docker run
30
$ docker run -d -e MINHA_VARIAVEL=minhaVariavel redis:latest
> 840bf6fa81cb026d15fd2c514e25bd5d2b36bea6f98650428adfd786eb559f3a
$ docker run -d -m 100m --memory-swap 120m redis:latest
> 01bf438ccf92043c3b67bfe06215b05ce6f898dd83d73465279ca3cbd7a97e61
$ docker run --rm -u root redis:latest
> 27b6da614858f24c9757b8a4f27d4d3526809b1592be725ba251b71d23960727
$ docker run -v $HOME/dev/temp:/docker --name meuRedis redis:latest
> 0471a8bd44ef5833ae81a5de8b6863451b5a1bc1047d5a34e7003720a4c34068
Exemplo
LINKS - Comunicação via Link
O Link permite que você trafegue informações entre os containers de forma segura, pois quem
conhece um container conhece apenas o seu par definido no link. Quando você configura um link,
você cria um elo de ligação entre um container de origem e um container de destino. Para criar um
link, você deve utilizar o parâmetro –link no comando docker run. Em primeiro lugar, deve-se criar um
container que será origem de dados para outro container.
OBS: Isso também pode ser feito deixando uma porta acessível do container para outro se contactar.
Comandos Docker | docker run --link
31
# Isso criará um novo container chamado db a partir da imagem do postgres, que contém um banco de dados
PostgreSQL.
$ docker run -d --name db training/postgres
# Isso criará um novo container chamado web e irá vincular ao container chamado db.
$ docker run -d -P --name web --link db:db training/webapp python app.py
# Isso irá mostrar que os dois container web tem acesso ao container db.
$ docker exec web ping db
> PING db (172.17.0.2) 56(84) bytes of data.
> 64 bytes from db (172.17.0.2): icmp_seq=1 ttl=64 time=0.098 ms
> 64 bytes from db (172.17.0.2): icmp_seq=2 ttl=64 time=0.224 ms
Exemplo
O volume do Docker é a única maneira de preservar os dados do container em execução, visto que
uma vez que o container é removido ele perde todos seus dados, através do volume então é possível,
mapear uma pasta no host ou em outro container para uma pasta do container em execução, assim
uma vez que um arquivo for criado, atualizado, deletado e etc no container de execução isso será
persistido em outro local assim sendo possível preservar esses dados.
Comandos Docker | docker run -v
32
$ docker run --name redis-test -v $HOME/temp/docker:/data/temp/docker redis
> 36939054e8653242a1be06163e6f6c75420381a3edb4a52b06e62a2844be1914
$ docker exec redis-teste touch /data/temp/docker/arquivo.txt
$ ls $HOME/temp/docker
> arquivo.txt
Exemplo
docker inspect <CONTAINER>
Mostra os metadados do container, como os volumes associados, mantenedor etc.
Comandos Docker | docker inspect
33
$ docker inspect db
> [
> "Id": "1045cb2ec8f89b5846bcaca3303dae7b1d6416cffbfc2d314203006221e7c352",
> "Created": "2017-03-06T18:57:04.851794871Z",
> "Path": "su",
> "Args": [
> "postgres",
> "-c",
> "/usr/lib/postgresql/$PG_VERSION/bin/postgres -D /var/lib/postgresql/$PG_VERSION/main/ -c
config_file=/etc/postgresql/$PG_VERSION/main/postgresql.conf"
> # Outras informações
> ]
Exemplo
docker exec [OPTIONS] <CONTAINER> <COMMAND> [ARG...]
Executa um comando em um container em execução
Parâmetros
-d Executa o comando em backgroud
-e Define variáveis ​​de ambiente
-it Entra em modo iterativo
Comandos Docker | docker exec
34
$ docker exec -e MINHA_VARIAVEL=meuValor ubuntuLocal env | grep MINHA_VARIAVEL
> MINHA_VARIAVEL=meuValor
$ docker exec -d ubuntuLocal touch meuArquivo
$ docker exec AdvDBPostgres ls | grep meuArquivo
> meuArquivo
$ docker exec -it ubuntuLocal bash
Exemplo
docker create [OPTIONS] <IMAGE> <COMMAND> [ARG...]
Criar um novo container a partir de uma imagem
Comandos Docker | docker create
35
Parâmetros
-e Define uma variável de ambiente
--env-file Local de uma arquivo com variáveis de ambiente
--link Adicionar link a outro container
-m
<quantidadeDeMemoria>
Define o limite de memória que o container pode usar do host
--memory-swap
<quantidadeDeMemoria>
Define o limite de memória swap que o container pode usar (-1 para deixar ilimitado)
--name Nome do container
Parâmetros
-p Mapeia uma porta entre o container e o host
--restart Tipo de política de reinicialização do container
--rm
Remover o container automaticamente quando ele for terminado (default false)
--runtime Tempo de execução para usar neste container
-v Vincular um volume
--storage-opt Opções do storage do container
Comandos Docker | docker create
36
Comandos Docker | docker create
37
$ docker create -e MINHA_VARIAVEL=minhaVariavel redis:latest
> 840bf6fa81cb026d15fd2c514e25bd5d2b36bea6f98650428adfd786eb559f3a
$ docker create -m 100m --memory-swap 120m redis:latest
> 01bf438ccf92043c3b67bfe06215b05ce6f898dd83d73465279ca3cbd7a97e61
$ docker create --rm -u root redis:latest
> 27b6da614858f24c9757b8a4f27d4d3526809b1592be725ba251b71d23960727
$ docker create -v $HOME/dev/temp:/docker --name --storage-opt size=10G meuRedis redis:latest
> 0471a8bd44ef5833ae81a5de8b6863451b5a1bc1047d5a34e7003720a4c34068
> docker create -p 8989:8989 redis:latest
> 7ab5a99ec88f1220ed4cf98fb5d7c265faed76ac6a3806219bd75fb74366417e
Exemplo
docker stop [OPTIONS] <CONTAINER...>
Para um ou mais containers
Parâmetros
-t
<tempo>
Quantidade em segundos que o docker espera para parar o container
Comandos Docker | docker stop
38
$ docker stop redisLocal
> redisLocal
$ docker stop -t 100 redisLocal
> redisLocal
Exemplo
docker kill <CONTAINER...>
Mata um ou mais containers
Comandos Docker | docker kill
39
Exemplo
$ docker kill redisLocal
> redisLocal
docker ps [OPTIONS]
Lista os containers
Parâmetros
-a Mostrar todos os containers (por padrão mostra apenas os em execução)
-q Exibi apenas os ids
Comandos Docker | docker ps
40
$ docker ps
> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
> 39e65a58f redis "docker" 16 sec Up 15 seconds 6379/tcp gallant
$ docker ps -a
> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
> 39e65a58f redis "docker" About a min Exit 18 sec ago gallant
> 9f40f0ffb ubuntu "/bin/bash" 12 min ago Exit 12 min ago mystifying
$ docker ps -q
> 39e65a58f
> 9f40f0ffb
Exemplo
Comandos Docker | docker start
41
docker start [OPTIONS] <CONTAINER...>
Inicia um ou mais containers
$ docker start redisLocal
> redisLocal
Exemplo
docker restart [OPTIONS] <CONTAINER...>
Reinicia um ou mais containers
Parâmetros
-t
<tempo>
Quantidade em segundos que o docker espera para reiniciar o container, default são 10
segundos
Comandos Docker | docker restart
42
$ docker restart redisLocal
> redisLocal
$ docker restart -t 100 redisLocal
> redisLocal
Exemplo
Comandos Docker | docker stats
43
docker stats
Exibir as estatísticas de uso containers
$ docker stats
> CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
> bbd788e30cce 0.08% 6.309 MiB / 7.704 GiB 0.08% 6.79 kB / 648 B 0 B / 0 B 3
> 237abe728103 0.07% 6.305 MiB / 7.704 GiB 0.08% 8.33 kB / 648 B 0 B / 0 B 3
> f4b319f2c636 0.06% 6.309 MiB / 7.704 GiB 0.08% 9.66 kB / 648 B 0 B / 0 B 3
Exemplo
Comandos Docker | docker rename
44
docker rename <CONTAINER> <NEW_NAME>
Renomeia um container
$ docker rename redisLocal redisCacheLocal
Exemplo
docker rm [OPTIONS] <CONTAINER...>
Remove um ou mais containers
Parâmetros
-f Força a remoção, podendo remover containers em execução
Comandos Docker | docker rm
45
$ docker rm 768e388fa2c9
> 768e388fa2c9
$ docker rm meuPhp
> meuPhp
Exemplo
docker update [OPTIONS] <CONTAINER...>
Atualiza as configurações um ou mais containers
Parâmetros
-m
<quantidadeDeMemoria>
Define o limite de memória que o container pode usar do host
--memory-swap
<quantidadeDeMemoria>
Define o limite de memória swap que o container pode usar (-1 para deixar ilimitado)
Comandos Docker | docker update
46
$ docker update -m 1000m --memory-swap 1300m redisLocal
> redisLocal
Exemplo
docker pause <CONTAINER...>
Pausar todos os processos dentro de um ou mais containers
Comandos Docker | docker pause
47
$ docker pause redisLocal
> redisLocal
Exemplo
docker unpause <CONTAINER...>
Inicia os processos anteriormente pausados de um ou mais containers
Comandos Docker | docker unpause
48
$ docker unpause redisLocal
> redisLocal
Exemplo
docker logs [OPTIONS] <CONTAINER>
Exibe os logs de um container
Parâmetros
--tail
<quantidadeLinhas>
Limita a quantidade de linhas que será exibido, começando do fim para o inicio
-f Continua exibindo o log
Comandos Docker | docker logs
49
$ docker logs --tail 5 redisLocal
> # Warning: no config file specified, using the default config. In order to specify a config file use
redis-server /path/to/redis.conf
> Redis 3.2.7 (00000000/0) 64 bit
> Running in standalone mode
> Port: 6379
> # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set
to the lower value of 128.
Exemplo
docker rmi [OPTIONS] <CONTAINER....>
Remover uma ou mais imagens
Parâmetros
-f Força remoção, podendo remover imagens com containers vinculados
Comandos Docker | docker rmi
50
$ docker rmi java
> Untagged: java:latest
> Untagged: java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
> Deleted: sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742a5b27080d8a4a8
> Deleted: sha256:0132aeca1bc9ac49d397635d34675915693a8727b103639ddee3cc5438e0f60
Exemplo
docker commit [OPTIONS] <CONTAINER> [REPOSITORY[:TAG]]
Criar uma nova imagem a partir das alterações de um container existente
Parâmetros
-a Autor da commit
-m Mensagem de commit
Comandos Docker | docker commit
51
$ docker commit meuBancoDeDados
> sha256:37f6ba54d41c106df337d027a7345b582fe5b023aee1ca21c3719915d706b9e8
$ docker commit -a "andrejusti" -m "Container com registros já existentes" meuBancoDeDados
> sha256:393236a4cf00ab1295b07dbe09668b01c741888d502d98e5ccbb544a8abd043a
Exemplo
docker tag <SOURCE_IMAGE[:TAG]> <TARGET_IMAGE[:TAG]>
Cria uma tag a partir de uma imagem existente
Comandos Docker | docker tag
52
$ docker tag redis:latest redis:minhaTag
Exemplo
docker push [OPTIONS] <NAME>[:TAG]
Envia ao registro docker uma imagem
Comandos Docker | docker push
53
$ docker push minhaApp:releaseAws
> The push refers to a repository [docker-registro.meuservidor.com.br]
> 66d6e6240063: Layer already exists
> c35a5a30ce33: Layer already exists
> 656dc710f6e5: Layer already exists
> 8b8fbd29ed3e: Layer already exists
> fa4045f123ae: Layer already exists
> 8d705ae62407: Layer already exists
> c56b7dabbc7a: Layer already exists
> releaseAws: digest: sha256:b4ce72e1a87bf03d7cf870746e9a8c46c7b6e8c2 size: 2624
Exemplo
docker build [OPTIONS] <PATH | URL>
Criar uma imagem a partir de um Dockerfile, também é possível criar de um Dockerfile remoto, como
em um repositório git no github
Parâmetros
-f Nome do arquivo de build (default é Dockerfile)
-t Nome e opcionalmente uma tag no formato 'name: tag'
Comandos Docker | docker build
54
Comandos Docker | docker build
55
$ docker build localDockerFile
> Sending build context to Docker daemon 14.54 MB
> Step 1/4 : FROM anapsix/alpine-java --> 0e0d2021d670
> Step 2/4 : ADD target/app.jar /data/ --> c7ba906b9ba9
> Step 3/4 : EXPOSE 8080 --> c44bfacb345f
> Step 4/4 : CMD java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /data/app.jar --> a84461f1d4e5
> Successfully built a84461f1d4e5
$ docker build -t minha-image:minha-tag -f Dockerfile.develop localDockerFile
> Sending build context to Docker daemon 14.54 MB
> Step 1/4 : FROM anapsix/alpine-java --> 0e0d2021d670
> Step 2/4 : ADD target/app.jar /data/ --> c7ba906b9ba9
> Step 3/4 : EXPOSE 8080 --> c44bfacb345f
> Step 4/4 : CMD java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /data/app.jar --> a84461f1d4e5
> Successfully built a84461f1d4e5
Exemplo
Docker pode construir imagens automaticamente lendo as instruções do arquivo Dockerfile. O
Dockerfile é um arquivo de texto que contém todos os comandos necessários para se criar uma
imagem, usando o comando docker build podemos então criar a imagem a partir do Dockerfile.
Dockerfile
56
# Comentario
INSTRUCAO argumentos
Formato
A instrução não faz distinção entre maiúsculas e minúsculas. Porém a convenção diz para as
instruções serem MAIÚSCULAS para distinguir dos argumentos mais facilmente.
O Docker executa as instruções do Dockerfile em ordem. A primeira instrução deve ser “FROM” para
especificar a Imagem Base da qual você está construindo.
# Meu teste
FROM ubuntu
Formato
Informa a partir de qual imagem será gerada a nova image
Dockerfile | FROM
57
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
Utilização
FROM ubuntu
FROM ubuntu:latest
FROM ubuntu@d2b1b8e4a217
Exemplo
Campo opcional, que informa o nome do mantenedor da nova image, não recomendado, é
recomendado usar o campo LABEL, onde é possível adicionar mais informações, o MAINTAINER no
campo LABEL fica como LABEL maintainer "André Justi <justi.andre@gmail.com>
<www.andrejusti.com.br>", assim quando é feito o comando docker inspect essa informação é
mostrada
Dockerfile | MAINTAINER
58
MAINTAINER <name>
Utilização
MAINTAINER "André Justi"
Exemplo
Adiciona metadados da imagem, informações adicionais que servirão para identificar versão, tipo de
licença, mantenedor e etc
Dockerfile | LABEL
59
LABEL <chave>=<valor> <chave>=<valor>
Utilização
LABEL chave=valor
LABEL "chave"="valor"
LABEL "chave1"="valor1" "chave2"="valor2" "chave3"="valor3"
LABEL "chave1"="valor1" 
"chave2"="valor2" 
"chave3"="valor3"
Exemplo
Instrução que cria e atribui uma variável de ambiente dentro da imagem. É possível informar mais de
uma label
Dockerfile | ENV
60
ENV <chave>=<valor>
ENV <chave> <valor>
Utilização
ENV chave=valor
ENV chave valor
Exemplo
Define qual será o diretório de trabalho (lugar onde serão copiados os arquivos, e criadas novas
pastas etc)
Dockerfile | WORKDIR
61
WORKDIR diretorio
Utilização
WORKDIR /data
Exemplo
Adiciona ou copia arquivos locais ou que estejam em uma url (no caso do ADD), para dentro da
imagem
O <dest> é um caminho absoluto, ou um caminho relativo a WORKDIR, caso o diretório destino não
exista, ele será criado
Se <src> for um diretório, todo o conteúdo do diretório será copiado, incluindo os metadados do
sistema de arquivos
Dockerfile | ADD e COPY
62
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] # Essa forma é necessário para caminhos que contêm espaços em branco
COPY <src>... <dest>
COPY ["<src>",... "<dest>"] # Essa forma é necessário para caminhos que contêm espaços em branco
Utilização
Dockerfile | ADD e COPY
63
ADD minhaPasta/meuarquivo.txt /pastaRaiz/
ADD ["Área de trabalho/meu arquivo.txt", "pasta raiz"]
COPY minhaPasta/meuarquivo.txt /pastaRaiz/
COPY ["Área de trabalho/meu arquivo.txt", "pasta raiz"]
Exemplo
Diferença entre ADD e COPY
● ADD Permite <src> ser um URL
● Se estiver executando um ADD é o <src> é um arquivo em um formato de compactação
reconhecido, o docker irá descompactá-lo e irá copiar os arquivos para o <dist>
Dockerfile | ADD e COPY
64
# Copiando arquivos compactados no formato tar para o container
# ADD
ADD resources/jdk-8.tar.gz /usr/local/
# COPY
COPY resources/jdk-8.tar.gz /tmp/
RUN tar -zxvf /tmp/jdk-8.tar.gz -C /usr/local
RUN rm /tmp/jdk-8.tar.gz
Exemplo
Shell e Exec
As instruções RUN, CMD e ENTRYPOINT suportam duas formas diferentes de execução: o formulário
shell e o formulário exec .
Dockerfile | RUN, CMD e ENTRYPOINT
65
INSTRUCAO executavel parametro01 parametro02
Exemplo Shell
INSTRUCAO ["executavel","parametro01","parametro02"]
Exemplo Exec
Ao usar o formulário shell, o comando especificado é executado com uma invocação do shell usando
/bin/sh -c. É possível ver isso claramente ao executar um docker ps
Dockerfile | RUN, CMD e ENTRYPOINT
66
FROM ubuntu:trusty
CMD ping localhost
Dockerfile exemplo
$ docker build -t nome:tag caminhoDockerfile
$ docker ps
> CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
> 52fec6512a86 teste:shell "/bin/sh -c 'ping ..." 7 sec Up 6 sec gifted
Execução
Uma opção melhor é usar o formulário exec nas instruções. Observe que o conteúdo do exec é
formado como uma matriz JSON.
Quando a forma exec da instrução é usada, o comando será executado sem um shell.
OBS: É recomendado sempre usar o formulário exec nas instruções ENTRYPOINT e CMD.
Dockerfile | RUN, CMD e ENTRYPOINT
67
FROM ubuntu:trusty
CMD ["/bin/ping","localhost"]
Dockerfile exemplo
$ docker build -t nome:tag caminhoDockerfile
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
0eab086cbe58 teste:exec "/bin/ping localhost" 12 sec Up 11 sec gallant
Execução
RUN: São as instruções que serão executadas para criação da imagem em questão, normalmente
instalações de pacotes, esse comando também pode ser substituído ao iniciar o container, é possível
declarar várias instruções RUN, porém cada uma cria uma nova camada da aplicação.
CMD: São instruções padrão do container, normalmente usadas para declarar como a aplicação deve
iniciar, ou quais serviços deve iniciar ao executar, o CMD só pode ser declarado uma vez.
ENTRYPOINT : Específica o que será executado ao iniciar o container.
Dockerfile | RUN, CMD e ENTRYPOINT
68
Expõem uma ou mais portas, isso quer dizer que o container quando iniciado poderá ser acessível
através dessas porta
Dockerfile | EXPOSE
69
EXPOSE <port> [<port>...]
Utilização
EXPOSE 8080 8081
Exemplo
Mapeia um diretório do host para ser acessível pelo container
Dockerfile | VOLUME
70
VOLUME ["/diretorio"]
VOLUME /diretorio
Utilização
VOLUME ["/var/log"]
VOLUME /var/log
Exemplo
Define com qual usuário serão executadas as instruções durante a geração da image
Dockerfile | USER
71
USER usuario
Utilização
USER root
Exemplo
Próximos passos | Compose
O Docker Compose é uma ferramenta para a criação e execução de múltiplos containers de maneira
padronizada e que facilite a comunicação entre eles. Com o Compose, é possível usar um único
arquivo para definir como será o ambiente de uma aplicação e usando um único comando possível
criará e iniciará todos os serviços definidos.
72
Próximos passos | Machine
Docker machine é a ferramenta usada para instalação e gerência de docker hosts remotos de forma
fácil e direta.
73
Próximos passos | Swarm
O Docker Swarm é uma ferramenta que permite a criação de clusters de Docker, ou seja, podemos
fazer com que diversos hosts de Docker estejam dentro do mesmo pool de recursos, facilitando
assim o deploy de containers. É possível por exemplo criar um container sem necessariamente saber
em qual host ele está, Swarm disponibilidade uma API de integração, onde é possível realizar grande
parte das atividades administrativas de um container
74
Referências
75
Livro: Containers com Docker
Do desenvolvimento à produção
Casa do Código
Livro: Caixa de Ferramentas DevOps
Um guia para construção,
administração e arquitetura de
sistemas modernos
Casa do Código
Site: https://docs.docker.com
Documentação oficial Docker
Site: http://mundodocker.com.br
Site de uma comunidade brasileira
Livro: Docker: Up & Running
Shipping Reliable Containers in
Production
O’Reilly
Site: http://techfree.com.br
Site com várias dicas e posts sobre
Docker
76
OBRIGADO!!!
André Justi
justi.andre@gmail.com
+55 48 996542190

Mais conteúdo relacionado

Mais procurados

What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...Edureka!
 
Docker introduction for the beginners
Docker introduction for the beginnersDocker introduction for the beginners
Docker introduction for the beginnersJuneyoung Oh
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de SoftwareAricelio Souza
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker, Inc.
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to dockerInstruqt
 
Introduction to Docker - IndiaOpsUG
Introduction to Docker - IndiaOpsUGIntroduction to Docker - IndiaOpsUG
Introduction to Docker - IndiaOpsUGAjeet Singh Raina
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Herofazalraja
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Aula 1. apresentação + frameworks
Aula 1. apresentação + frameworksAula 1. apresentação + frameworks
Aula 1. apresentação + frameworksandreluizlc
 
Chicago alm user group tfs version control poster - tfvc and git
Chicago alm user group   tfs version control poster - tfvc and gitChicago alm user group   tfs version control poster - tfvc and git
Chicago alm user group tfs version control poster - tfvc and gitDave Burnison
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvcleopp
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with DockerRavindu Fernando
 
Docker Commands With Examples | Docker Tutorial | DevOps Tutorial | Docker Tr...
Docker Commands With Examples | Docker Tutorial | DevOps Tutorial | Docker Tr...Docker Commands With Examples | Docker Tutorial | DevOps Tutorial | Docker Tr...
Docker Commands With Examples | Docker Tutorial | DevOps Tutorial | Docker Tr...Edureka!
 
Docker introduction
Docker introductionDocker introduction
Docker introductiondotCloud
 
Leveraging Azure DevOps across the Enterprise
Leveraging Azure DevOps across the EnterpriseLeveraging Azure DevOps across the Enterprise
Leveraging Azure DevOps across the EnterpriseAndrew Kelleher
 

Mais procurados (20)

What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
 
Docker introduction for the beginners
Docker introduction for the beginnersDocker introduction for the beginners
Docker introduction for the beginners
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Introduction to Docker - IndiaOpsUG
Introduction to Docker - IndiaOpsUGIntroduction to Docker - IndiaOpsUG
Introduction to Docker - IndiaOpsUG
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Aula 1. apresentação + frameworks
Aula 1. apresentação + frameworksAula 1. apresentação + frameworks
Aula 1. apresentação + frameworks
 
Chicago alm user group tfs version control poster - tfvc and git
Chicago alm user group   tfs version control poster - tfvc and gitChicago alm user group   tfs version control poster - tfvc and git
Chicago alm user group tfs version control poster - tfvc and git
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Introduction to container based virtualization with docker
Introduction to container based virtualization with dockerIntroduction to container based virtualization with docker
Introduction to container based virtualization with docker
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvc
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with Docker
 
Docker Commands With Examples | Docker Tutorial | DevOps Tutorial | Docker Tr...
Docker Commands With Examples | Docker Tutorial | DevOps Tutorial | Docker Tr...Docker Commands With Examples | Docker Tutorial | DevOps Tutorial | Docker Tr...
Docker Commands With Examples | Docker Tutorial | DevOps Tutorial | Docker Tr...
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Docker Ecosystem on Azure
Docker Ecosystem on AzureDocker Ecosystem on Azure
Docker Ecosystem on Azure
 
Leveraging Azure DevOps across the Enterprise
Leveraging Azure DevOps across the EnterpriseLeveraging Azure DevOps across the Enterprise
Leveraging Azure DevOps across the Enterprise
 

Destaque

Artigo Filme "Axé- canto do povo de um lugar" (Por Jurema Paes)
Artigo Filme "Axé- canto do povo de um lugar" (Por Jurema Paes)Artigo Filme "Axé- canto do povo de um lugar" (Por Jurema Paes)
Artigo Filme "Axé- canto do povo de um lugar" (Por Jurema Paes)AfroeducAÇÃO
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
Imagenes torch
Imagenes torchImagenes torch
Imagenes torchMony Fel
 
Wordpress ile Ücretsiz Blog ve Site kurulumu
Wordpress ile Ücretsiz Blog ve Site kurulumuWordpress ile Ücretsiz Blog ve Site kurulumu
Wordpress ile Ücretsiz Blog ve Site kurulumuAli Cevat ÜNSAL
 
tesis problemas alimenticios en venezuela
tesis problemas alimenticios en venezuela tesis problemas alimenticios en venezuela
tesis problemas alimenticios en venezuela 4to c
 
registro de pozoz
registro de pozozregistro de pozoz
registro de pozozopulento22
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerBruno Ricardo Siqueira
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerStefan Teixeira
 
Healthtakaful arabic
Healthtakaful arabicHealthtakaful arabic
Healthtakaful arabicNour Elbader
 
March 7 filipino pang abay na pamamaraan
March 7 filipino pang abay na pamamaraanMarch 7 filipino pang abay na pamamaraan
March 7 filipino pang abay na pamamaraanMARIA LOVI TATEL
 
Medición de la productividad del valor agregado
Medición de la productividad del valor agregadoMedición de la productividad del valor agregado
Medición de la productividad del valor agregadobianmarys_07
 
Tükrözött osztályterem
Tükrözött osztályteremTükrözött osztályterem
Tükrözött osztályteremDumitru Farkas
 
La Restauración de las 12 Puertas - 5ª La puerta del Muladar
La Restauración de las 12 Puertas - 5ª La puerta del MuladarLa Restauración de las 12 Puertas - 5ª La puerta del Muladar
La Restauración de las 12 Puertas - 5ª La puerta del MuladarValentin Moraleja
 
Método Dalcroze. Fundamentos
Método Dalcroze. FundamentosMétodo Dalcroze. Fundamentos
Método Dalcroze. FundamentosFundación Bigott
 

Destaque (20)

Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Artigo Filme "Axé- canto do povo de um lugar" (Por Jurema Paes)
Artigo Filme "Axé- canto do povo de um lugar" (Por Jurema Paes)Artigo Filme "Axé- canto do povo de um lugar" (Por Jurema Paes)
Artigo Filme "Axé- canto do povo de um lugar" (Por Jurema Paes)
 
Taller Innivador
Taller InnivadorTaller Innivador
Taller Innivador
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
Instructivo sistema de gestión de tickets
Instructivo sistema de gestión de ticketsInstructivo sistema de gestión de tickets
Instructivo sistema de gestión de tickets
 
Imagenes torch
Imagenes torchImagenes torch
Imagenes torch
 
Wordpress ile Ücretsiz Blog ve Site kurulumu
Wordpress ile Ücretsiz Blog ve Site kurulumuWordpress ile Ücretsiz Blog ve Site kurulumu
Wordpress ile Ücretsiz Blog ve Site kurulumu
 
tesis problemas alimenticios en venezuela
tesis problemas alimenticios en venezuela tesis problemas alimenticios en venezuela
tesis problemas alimenticios en venezuela
 
registro de pozoz
registro de pozozregistro de pozoz
registro de pozoz
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de Docker
 
Healthtakaful arabic
Healthtakaful arabicHealthtakaful arabic
Healthtakaful arabic
 
March 7 filipino pang abay na pamamaraan
March 7 filipino pang abay na pamamaraanMarch 7 filipino pang abay na pamamaraan
March 7 filipino pang abay na pamamaraan
 
Medición de la productividad del valor agregado
Medición de la productividad del valor agregadoMedición de la productividad del valor agregado
Medición de la productividad del valor agregado
 
Tükrözött osztályterem
Tükrözött osztályteremTükrözött osztályterem
Tükrözött osztályterem
 
La Restauración de las 12 Puertas - 5ª La puerta del Muladar
La Restauración de las 12 Puertas - 5ª La puerta del MuladarLa Restauración de las 12 Puertas - 5ª La puerta del Muladar
La Restauración de las 12 Puertas - 5ª La puerta del Muladar
 
Método Dalcroze. Fundamentos
Método Dalcroze. FundamentosMétodo Dalcroze. Fundamentos
Método Dalcroze. Fundamentos
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao Docker
 

Semelhante a Apresentação Docker

Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfdadalt1
 
Docker basicão e sem mistérios
Docker basicão e sem mistériosDocker basicão e sem mistérios
Docker basicão e sem mistériosIsaac Maciel
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)TechCobli
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogCesar Augusto Nogueira
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerAécio Pires
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDextra Sistemas / Etec Itu
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersFrancisco Gonçalves
 

Semelhante a Apresentação Docker (20)

Olá docker
Olá dockerOlá docker
Olá docker
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
 
Docker basicão e sem mistérios
Docker basicão e sem mistériosDocker basicão e sem mistérios
Docker basicão e sem mistérios
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Docker meetup
Docker meetupDocker meetup
Docker meetup
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Docker
DockerDocker
Docker
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com Docker
 
O que é Docker?
O que é Docker?O que é Docker?
O que é Docker?
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Docker
DockerDocker
Docker
 
Usando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NETUsando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NET
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
Workshop Docker
Workshop DockerWorkshop Docker
Workshop Docker
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
 
O que é docker?
O que é docker?O que é docker?
O que é docker?
 

Mais de André Justi

Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - KotlinAndré Justi
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)André Justi
 

Mais de André Justi (6)

Java VS Kotlin
Java VS KotlinJava VS Kotlin
Java VS Kotlin
 
Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - Kotlin
 
Intro à Graphql
Intro à GraphqlIntro à Graphql
Intro à Graphql
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 

Apresentação Docker

  • 2. O que é Docker O Docker é uma tecnologia Open Source que permite criar, executar, testar e implantar aplicações distribuídas dentro de containers de software. Ele permite que você empacote um software de uma padronizada para o desenvolvimento de software, contendo tudo que é necessário para a execução: código, runtime, ferramentas, bibliotecas, etc. O Docker permite que você implante aplicações rapidamente, de modo confiável e estável, em qualquer ambiente. 2
  • 3. O que são containers Os containers são um método de virtualização em nível de sistema operacional que permite executar uma aplicação e suas dependências em processos com recursos isolados. Os containers permitem empacotar facilmente o código, as configurações e as dependências de uma aplicação em elementos fundamentais que oferecem consistência ambiental, eficiência operacional, produtividade de desenvolvedores e controle de versões. Os containers podem ajudar a garantir rapidez, confiabilidade e consistência de implantação, independentemente do ambiente de implantação. Além disso, os containers oferecem um controle mais granular dos recursos, aumentando a eficiência da infraestrutura. 3
  • 4. Breve história A construção do Docker foi iniciada por Solomon Hykes, na França, dentro da empresa DotCloud, Docker representa a evolução da tecnologia proprietária da DotCloud. Docker foi lançado como Open Source em março de 2013, e em março de 2014 com o lançamento da versão 0.9 Docker que deixou LXC como ambiente de execução padrão para usar sua própria libcontainer, que é escrita na linguagem GO criada pelo Google. No dia 24 de outubro de 2015 o projeto tornou-se o 20º mais estrelado, como mais de 6.800 fork’s, como mais de 1100 colaboradores. Uma breve análise de 2016 mostrou DotCloud, Cisco, Google, IBM, Microsoft e Red Hat como as principais contribuidoras do Docker. 4
  • 5. Existem mais de 500 mil aplicações Dockerizadas, um crescimento de 3100% ao longo de 2 anos. Mais de 4 bilhões de containers já foram puxados até hoje. Docker é apoiado por uma grande e crescente comunidade de colaboradores e usuários; Como exemplo, há 150 mil membros de Meetups Docker em todo o mundo. Isso é cerca de 40% da população da Islândia! A adoção do Docker aumentou mais de 30% no último ano. Cerca de 30% dos containers Dockers estão rodando em produção. 29% das empresas que já ouviram falar em Docker planejam usá-lo. Alguns outros fatos sobre Docker 5
  • 6. Uma análise de janeiro 2017 dos perfis do LinkedIn, mostra que as skils sobre Docker cresceram 160% em 2016. No GitHub existem quase 150 mil repositórios com algum código ou artefato Docker. Alguns outros fatos sobre Docker 6
  • 7. Com certeza a comunidade Docker é um dos seus pontos fortes, são centenas de grupos de meetups espalhados pelo mundo, além de fóruns, grupos de facebook e milhares de contribuidores no Twitter, GitHub, YouTube, SlideShare etc. 7 Comunidade Meetups Docker Brasil
  • 8. Principais buscas 1. docker 2. container docker 3. container 4. install docker 5. dockerfile 6. ubuntu docker 7. docker image 8. linux docker 9. docker run 10. docker windows 11. hub docker 12. docker file 13. docker compose 14. docker containers 15. docker images O que estão falando por aí | Google Trends 8 Comparação com outros termos populares Docker Big Data Micro Services 2013 2017
  • 9. O que estão falando por aí | Stack Overflow 9 Comparação com outros termos populares Docker Big Data Micro Services 2013 2017
  • 10. Quem está usando … e muitas outras empresas e projetos! 10
  • 11. VM O objetivo desse modelo é compartilhar os recursos físicos entre vários ambientes isolados, sendo que cada um deles tem sob sua tutela uma máquina inteira, com memória, disco, processador, rede e outros periféricos, todos entregues via abstração de virtualização. É como se dentro de uma máquina física criasse máquinas menores e independentes entre sí. Cada máquina dessa tem seu próprio sistema operacional completo, que por sua vez interage com todos os hardwares virtuais que lhe foi entregue pelo modelo de virtualização a nível de máquina. Vale ressaltar que o sistema operacional instalado dentro de uma máquina virtual fará interação com os hardwares virtuais e não com o hardware real. VM vs Docker 11
  • 12. Docker Esse modelo de virtualização está no nível de sistema operacional, ou seja, ao contrário da máquina virtual um container não tem visão de uma máquina inteira, ele é apenas um processo em execução em um kernel compartilhado entre todos os outros containers. Ele utiliza o namespace para prover o devido isolamento de memória RAM, processamento, disco e acesso a rede, mesmo compartilhamento o mesmo kernel, esse processo em execução tem a visão de estar usando um sistema operacional dedicado. VM vs Docker 12
  • 13. VM vs Docker 13 Guest OS Bins/Libs App 01 Server Host OS Hypervisor Estrutura VM (Virtual Machine) Guest OS Bins/Libs App 02 VM 02VM 01 VMs MV Estrutura Docker Server Host OS Docker Engine Bins/Libs App 01 Bins/Libs App 02 CONT 02 CONT 01 Containers Docker
  • 14. Partes principais do Docker 14 network container data volumes image Client docker CLI REST API Server docker daemon gerenciador gerenciador gerenciador gerenciador Docker usa uma arquitetura cliente-servidor. A parte cliente fala com o Docker daemon, que faz o trabalho pesado de construção, execução e distribuição de seus containers e imagens Docker, também controla os recursos executados. O cliente Docker e Docker daemon, podem ser executados no mesmo sistema, também é possível conectar um cliente Docker a um Docker daemon remoto. O cliente Docker e daemon se comunicam através de uma API REST, através de sockets UNIX ou uma interface de rede, para execuções de comandos ou scripts.
  • 15. Containers docker - Containers tem como base sempre uma imagem, pense como na seguinte analogia do mundo Java, uma imagem é uma classe e um container é como um objeto instância dessa classe, então podemos através de uma imagem “instanciar” vários containers, também através de recursos chroot, Cgroups é possível definirmos limitações de recursos recursos e isolamento parcial ou total dos mesmos. Elementos do Docker 15 Algumas características dos containers ● Portabilidade de aplicação ● Isolamento de processos ● Prevenção de violação externa ● Gerenciamento de consumo de recursos
  • 16. imagens docker - Imagens são templates para criação de containers, como falado no slide anterior, imagens são imutáveis, para executá-las é necessário criar uma instância dela o “container”, também vale ressaltar que as imagens são construídas em camadas, o que facilita sua reutilização e manutenção. Em resumo uma imagem nada mais é do que um ambiente totalmente encapsulado e pronto para ser replicado onde desejar Elementos do Docker 16 Kernel Java8 Image Minha App 01 Image Container 01 Debian Base Image Wildfly 8 Image Minha App 02 Image Node JS Image Nginx Image Minha App 03 Image Alpine Base Image Apache Image Minha App 04 Imagem Container 02 Container 03 Container 04 Container 06 Container 05
  • 17. Dockerfile - São scripts com uma série de comandos para criação de uma imagem, nesses scripts podemos fazer uma séries de coisas como executar comandos sh, criar variáveis de ambiente, copiar arquivos e pastas do host para dentro da imagem etc. Exemplo Elementos do Docker 17 FROM ubuntu MAINTAINER andrejusti RUN apt-get update RUN apt-get install -y nginx && apt-get clean RUN ln -sf /dev/stdout /var/log/nginx/access.log RUN ln -sf /dev/stderr /var/log/nginx/error.log RUN echo "daemon off;" >> /etc/nginx/nginx.conf EXPOSE 8080 ENTRYPOINT [“/usr/sbin/nginx”] CMD [“start”, “-g”]
  • 18. Docker Registry - É como um repositório GIT, onde as imagens podem ser versionadas, comitadas, “puxadas” etc, quando recuperamos uma imagem, usando o comando docker pull por exemplo, estamos normalmente baixando a imagem de um registro Docker, o repositório oficial do Docker é o Docker HUB, onde é possível hospedar e versionar imagens públicas e privadas. Elementos do Docker 18
  • 19. Docker host Images Partes principais do Docker 19 Client docker CLI docker build docker pull docker run Containers docker registry REST API docker daemon
  • 20. Comandos Docker 20 Tipo de parâmetro Descrição <valor> parâmetro obrigatório [valor] parâmetro opcional [valor...] ou <valor...> parâmetro multivalorado
  • 21. Comandos Docker | docker help 21 docker <COMAND> --help Exibe a forma de execução do comando e seus possíveis parâmetros $ docker logs --help > Usage: docker logs [OPTIONS] CONTAINER > Fetch the logs of a container > Options: > --details Show extra details provided to logs > -f, --follow Follow log output > --help Print usage > --since string Show logs since timestamp > --tail string Number of lines to show from the end of the logs (default ""all"") > -t, --timestamps Show timestamps Exemplo
  • 22. Comandos Docker | docker info 22 docker info Exibe as informações de execução do docker $ docker info > Containers: 5 > Running: 1 > Paused: 0 > Stopped: 4 > Images: 17 > Server Version: 1.13.0 > Storage Driver: overlay2 > Backing Filesystem: extfs > Supports d_type: true > Native Overlay Diff: true > Logging Driver: json-file > Cgroup Driver: cgroupfs > Plugins: > Volume: local > Network: bridge host macvlan null overlay Exemplo
  • 23. docker login [OPTIONS] <SERVER> Faz login em um servidor de registro Docker Parâmetros -u Login do registro docker -p Senha do registro docker Comandos Docker | docker login 23 $ docker login -u meuLogin -p minhaSenha docker-registro.meuservidor.com.br > Login Succeeded #Exibir servidores logado $ cat $HOME/.docker/config.json > "auths": {"docker-registro.meuservidor.com.br": {"auth": "c2FqYWR2OkBTb2Z0cGxhbjIwMTI="}} Exemplo
  • 24. docker logout <SERVER> Faz login em um servidor de registro Docker Comandos Docker | docker logout 24 $ docker logout docker-registro.meuservidor.com.br > Removing login credentials for docker-registro.meuservidor.com.br Exemplo
  • 25. docker images [OPTIONS] Lista as imagens baixadas Parâmetros -a Mostrar todas imagens (por padrão oculta as intermediárias) Comandos Docker | docker images 25 $ docker images > REPOSITORY TAG IMAGE ID CREATED SIZE > redis latest 74d8f543ac97 6 days ago 184 MB > ubuntu latest f49eec89601e 2 weeks ago 129 MB $ docker images -a > REPOSITORY TAG IMAGE ID CREATED SIZE > redis latest 74d8f543ac97 6 days ago 184 MB > ubuntu latest f49eec89601e 2 weeks ago 129 MB > java latest d23bdf5b1b1b 2 weeks ago 643 MB Exemplo
  • 26. docker pull [OPTIONS] <NAME>[:TAG] Baixa uma imagem Parâmetros -a Baixa todas tags da imagem Comandos Docker | docker pull 26 $ docker pull php:latest > latest: Pulling from library/php > 5040bd298390: Already exists > 568dce68541a: Pull complete > 6a832068e64c: Pull complete > Digest: sha256:cdd9431e016e974cc84bb103e22152195e02f54591ac48fe705d66b1384d6a08 > Status: Downloaded newer image for php:latest Exemplo
  • 27. docker search [OPTIONS] <TERM> Pesquisa nos repositórios imagens Parâmetros --limit <quantidadeResultados> Limita a consulta a um número de resultados Comandos Docker | docker search 27 $ docker search redis > NAME DESCRIPTION STARS OFFICIAL AUTOMATED > redis Redis is an open source key-value store th... 3336 [OK] > sameersbn/redis 43 [OK] > bitnami/redis Bitnami Redis Docker Image 36 [OK] > torusware/speedus-redis Always updated official Redis docker image... 32 [OK] $ docker search --limit 1 redis > NAME DESCRIPTION STARS OFFICIAL AUTOMATED > redis Redis is an open source key-value store th... 3336 [OK] > sameersbn/redis 43 [OK] Exemplo
  • 28. docker run [OPTIONS] <IMAGE> <COMMAND> [ARG...] Executa uma imagem (criando um container) Parâmetros -e Define uma variável de ambiente --env-file Local de uma arquivo com variáveis de ambiente --link Adicionar link a outro container -m <quantidadeDeMemoria> Define o limite de memória que o container pode usar do host --memory-swap <quantidadeDeMemoria> Define o limite de memória swap que o container pode usar (-1 para deixar ilimitado) --name Nome do container Comandos Docker | docker run 28
  • 29. Parâmetros -p Mapeia uma porta entre o container e o host --restart Tipo de política de reinicialização do container Opções: no - Não reinicie quando o serviço for inicial failure - Reinicia somente se o container foi encerrado com status diferente de zero (diferente de sucesso) always - Sempre reinicia quando o serviço docker for iniciado, independente do status --rm Remover o container automaticamente quando ele for terminado (default false) --runtime Tempo de execução para usar neste container -v Vincular um volume --storage-opt Opções do storage do container -d Roda o container em backgroud Comandos Docker | docker run 29
  • 30. Comandos Docker | docker run 30 $ docker run -d -e MINHA_VARIAVEL=minhaVariavel redis:latest > 840bf6fa81cb026d15fd2c514e25bd5d2b36bea6f98650428adfd786eb559f3a $ docker run -d -m 100m --memory-swap 120m redis:latest > 01bf438ccf92043c3b67bfe06215b05ce6f898dd83d73465279ca3cbd7a97e61 $ docker run --rm -u root redis:latest > 27b6da614858f24c9757b8a4f27d4d3526809b1592be725ba251b71d23960727 $ docker run -v $HOME/dev/temp:/docker --name meuRedis redis:latest > 0471a8bd44ef5833ae81a5de8b6863451b5a1bc1047d5a34e7003720a4c34068 Exemplo
  • 31. LINKS - Comunicação via Link O Link permite que você trafegue informações entre os containers de forma segura, pois quem conhece um container conhece apenas o seu par definido no link. Quando você configura um link, você cria um elo de ligação entre um container de origem e um container de destino. Para criar um link, você deve utilizar o parâmetro –link no comando docker run. Em primeiro lugar, deve-se criar um container que será origem de dados para outro container. OBS: Isso também pode ser feito deixando uma porta acessível do container para outro se contactar. Comandos Docker | docker run --link 31 # Isso criará um novo container chamado db a partir da imagem do postgres, que contém um banco de dados PostgreSQL. $ docker run -d --name db training/postgres # Isso criará um novo container chamado web e irá vincular ao container chamado db. $ docker run -d -P --name web --link db:db training/webapp python app.py # Isso irá mostrar que os dois container web tem acesso ao container db. $ docker exec web ping db > PING db (172.17.0.2) 56(84) bytes of data. > 64 bytes from db (172.17.0.2): icmp_seq=1 ttl=64 time=0.098 ms > 64 bytes from db (172.17.0.2): icmp_seq=2 ttl=64 time=0.224 ms Exemplo
  • 32. O volume do Docker é a única maneira de preservar os dados do container em execução, visto que uma vez que o container é removido ele perde todos seus dados, através do volume então é possível, mapear uma pasta no host ou em outro container para uma pasta do container em execução, assim uma vez que um arquivo for criado, atualizado, deletado e etc no container de execução isso será persistido em outro local assim sendo possível preservar esses dados. Comandos Docker | docker run -v 32 $ docker run --name redis-test -v $HOME/temp/docker:/data/temp/docker redis > 36939054e8653242a1be06163e6f6c75420381a3edb4a52b06e62a2844be1914 $ docker exec redis-teste touch /data/temp/docker/arquivo.txt $ ls $HOME/temp/docker > arquivo.txt Exemplo
  • 33. docker inspect <CONTAINER> Mostra os metadados do container, como os volumes associados, mantenedor etc. Comandos Docker | docker inspect 33 $ docker inspect db > [ > "Id": "1045cb2ec8f89b5846bcaca3303dae7b1d6416cffbfc2d314203006221e7c352", > "Created": "2017-03-06T18:57:04.851794871Z", > "Path": "su", > "Args": [ > "postgres", > "-c", > "/usr/lib/postgresql/$PG_VERSION/bin/postgres -D /var/lib/postgresql/$PG_VERSION/main/ -c config_file=/etc/postgresql/$PG_VERSION/main/postgresql.conf" > # Outras informações > ] Exemplo
  • 34. docker exec [OPTIONS] <CONTAINER> <COMMAND> [ARG...] Executa um comando em um container em execução Parâmetros -d Executa o comando em backgroud -e Define variáveis ​​de ambiente -it Entra em modo iterativo Comandos Docker | docker exec 34 $ docker exec -e MINHA_VARIAVEL=meuValor ubuntuLocal env | grep MINHA_VARIAVEL > MINHA_VARIAVEL=meuValor $ docker exec -d ubuntuLocal touch meuArquivo $ docker exec AdvDBPostgres ls | grep meuArquivo > meuArquivo $ docker exec -it ubuntuLocal bash Exemplo
  • 35. docker create [OPTIONS] <IMAGE> <COMMAND> [ARG...] Criar um novo container a partir de uma imagem Comandos Docker | docker create 35 Parâmetros -e Define uma variável de ambiente --env-file Local de uma arquivo com variáveis de ambiente --link Adicionar link a outro container -m <quantidadeDeMemoria> Define o limite de memória que o container pode usar do host --memory-swap <quantidadeDeMemoria> Define o limite de memória swap que o container pode usar (-1 para deixar ilimitado) --name Nome do container
  • 36. Parâmetros -p Mapeia uma porta entre o container e o host --restart Tipo de política de reinicialização do container --rm Remover o container automaticamente quando ele for terminado (default false) --runtime Tempo de execução para usar neste container -v Vincular um volume --storage-opt Opções do storage do container Comandos Docker | docker create 36
  • 37. Comandos Docker | docker create 37 $ docker create -e MINHA_VARIAVEL=minhaVariavel redis:latest > 840bf6fa81cb026d15fd2c514e25bd5d2b36bea6f98650428adfd786eb559f3a $ docker create -m 100m --memory-swap 120m redis:latest > 01bf438ccf92043c3b67bfe06215b05ce6f898dd83d73465279ca3cbd7a97e61 $ docker create --rm -u root redis:latest > 27b6da614858f24c9757b8a4f27d4d3526809b1592be725ba251b71d23960727 $ docker create -v $HOME/dev/temp:/docker --name --storage-opt size=10G meuRedis redis:latest > 0471a8bd44ef5833ae81a5de8b6863451b5a1bc1047d5a34e7003720a4c34068 > docker create -p 8989:8989 redis:latest > 7ab5a99ec88f1220ed4cf98fb5d7c265faed76ac6a3806219bd75fb74366417e Exemplo
  • 38. docker stop [OPTIONS] <CONTAINER...> Para um ou mais containers Parâmetros -t <tempo> Quantidade em segundos que o docker espera para parar o container Comandos Docker | docker stop 38 $ docker stop redisLocal > redisLocal $ docker stop -t 100 redisLocal > redisLocal Exemplo
  • 39. docker kill <CONTAINER...> Mata um ou mais containers Comandos Docker | docker kill 39 Exemplo $ docker kill redisLocal > redisLocal
  • 40. docker ps [OPTIONS] Lista os containers Parâmetros -a Mostrar todos os containers (por padrão mostra apenas os em execução) -q Exibi apenas os ids Comandos Docker | docker ps 40 $ docker ps > CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > 39e65a58f redis "docker" 16 sec Up 15 seconds 6379/tcp gallant $ docker ps -a > CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > 39e65a58f redis "docker" About a min Exit 18 sec ago gallant > 9f40f0ffb ubuntu "/bin/bash" 12 min ago Exit 12 min ago mystifying $ docker ps -q > 39e65a58f > 9f40f0ffb Exemplo
  • 41. Comandos Docker | docker start 41 docker start [OPTIONS] <CONTAINER...> Inicia um ou mais containers $ docker start redisLocal > redisLocal Exemplo
  • 42. docker restart [OPTIONS] <CONTAINER...> Reinicia um ou mais containers Parâmetros -t <tempo> Quantidade em segundos que o docker espera para reiniciar o container, default são 10 segundos Comandos Docker | docker restart 42 $ docker restart redisLocal > redisLocal $ docker restart -t 100 redisLocal > redisLocal Exemplo
  • 43. Comandos Docker | docker stats 43 docker stats Exibir as estatísticas de uso containers $ docker stats > CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS > bbd788e30cce 0.08% 6.309 MiB / 7.704 GiB 0.08% 6.79 kB / 648 B 0 B / 0 B 3 > 237abe728103 0.07% 6.305 MiB / 7.704 GiB 0.08% 8.33 kB / 648 B 0 B / 0 B 3 > f4b319f2c636 0.06% 6.309 MiB / 7.704 GiB 0.08% 9.66 kB / 648 B 0 B / 0 B 3 Exemplo
  • 44. Comandos Docker | docker rename 44 docker rename <CONTAINER> <NEW_NAME> Renomeia um container $ docker rename redisLocal redisCacheLocal Exemplo
  • 45. docker rm [OPTIONS] <CONTAINER...> Remove um ou mais containers Parâmetros -f Força a remoção, podendo remover containers em execução Comandos Docker | docker rm 45 $ docker rm 768e388fa2c9 > 768e388fa2c9 $ docker rm meuPhp > meuPhp Exemplo
  • 46. docker update [OPTIONS] <CONTAINER...> Atualiza as configurações um ou mais containers Parâmetros -m <quantidadeDeMemoria> Define o limite de memória que o container pode usar do host --memory-swap <quantidadeDeMemoria> Define o limite de memória swap que o container pode usar (-1 para deixar ilimitado) Comandos Docker | docker update 46 $ docker update -m 1000m --memory-swap 1300m redisLocal > redisLocal Exemplo
  • 47. docker pause <CONTAINER...> Pausar todos os processos dentro de um ou mais containers Comandos Docker | docker pause 47 $ docker pause redisLocal > redisLocal Exemplo
  • 48. docker unpause <CONTAINER...> Inicia os processos anteriormente pausados de um ou mais containers Comandos Docker | docker unpause 48 $ docker unpause redisLocal > redisLocal Exemplo
  • 49. docker logs [OPTIONS] <CONTAINER> Exibe os logs de um container Parâmetros --tail <quantidadeLinhas> Limita a quantidade de linhas que será exibido, começando do fim para o inicio -f Continua exibindo o log Comandos Docker | docker logs 49 $ docker logs --tail 5 redisLocal > # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf > Redis 3.2.7 (00000000/0) 64 bit > Running in standalone mode > Port: 6379 > # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. Exemplo
  • 50. docker rmi [OPTIONS] <CONTAINER....> Remover uma ou mais imagens Parâmetros -f Força remoção, podendo remover imagens com containers vinculados Comandos Docker | docker rmi 50 $ docker rmi java > Untagged: java:latest > Untagged: java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d > Deleted: sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742a5b27080d8a4a8 > Deleted: sha256:0132aeca1bc9ac49d397635d34675915693a8727b103639ddee3cc5438e0f60 Exemplo
  • 51. docker commit [OPTIONS] <CONTAINER> [REPOSITORY[:TAG]] Criar uma nova imagem a partir das alterações de um container existente Parâmetros -a Autor da commit -m Mensagem de commit Comandos Docker | docker commit 51 $ docker commit meuBancoDeDados > sha256:37f6ba54d41c106df337d027a7345b582fe5b023aee1ca21c3719915d706b9e8 $ docker commit -a "andrejusti" -m "Container com registros já existentes" meuBancoDeDados > sha256:393236a4cf00ab1295b07dbe09668b01c741888d502d98e5ccbb544a8abd043a Exemplo
  • 52. docker tag <SOURCE_IMAGE[:TAG]> <TARGET_IMAGE[:TAG]> Cria uma tag a partir de uma imagem existente Comandos Docker | docker tag 52 $ docker tag redis:latest redis:minhaTag Exemplo
  • 53. docker push [OPTIONS] <NAME>[:TAG] Envia ao registro docker uma imagem Comandos Docker | docker push 53 $ docker push minhaApp:releaseAws > The push refers to a repository [docker-registro.meuservidor.com.br] > 66d6e6240063: Layer already exists > c35a5a30ce33: Layer already exists > 656dc710f6e5: Layer already exists > 8b8fbd29ed3e: Layer already exists > fa4045f123ae: Layer already exists > 8d705ae62407: Layer already exists > c56b7dabbc7a: Layer already exists > releaseAws: digest: sha256:b4ce72e1a87bf03d7cf870746e9a8c46c7b6e8c2 size: 2624 Exemplo
  • 54. docker build [OPTIONS] <PATH | URL> Criar uma imagem a partir de um Dockerfile, também é possível criar de um Dockerfile remoto, como em um repositório git no github Parâmetros -f Nome do arquivo de build (default é Dockerfile) -t Nome e opcionalmente uma tag no formato 'name: tag' Comandos Docker | docker build 54
  • 55. Comandos Docker | docker build 55 $ docker build localDockerFile > Sending build context to Docker daemon 14.54 MB > Step 1/4 : FROM anapsix/alpine-java --> 0e0d2021d670 > Step 2/4 : ADD target/app.jar /data/ --> c7ba906b9ba9 > Step 3/4 : EXPOSE 8080 --> c44bfacb345f > Step 4/4 : CMD java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /data/app.jar --> a84461f1d4e5 > Successfully built a84461f1d4e5 $ docker build -t minha-image:minha-tag -f Dockerfile.develop localDockerFile > Sending build context to Docker daemon 14.54 MB > Step 1/4 : FROM anapsix/alpine-java --> 0e0d2021d670 > Step 2/4 : ADD target/app.jar /data/ --> c7ba906b9ba9 > Step 3/4 : EXPOSE 8080 --> c44bfacb345f > Step 4/4 : CMD java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /data/app.jar --> a84461f1d4e5 > Successfully built a84461f1d4e5 Exemplo
  • 56. Docker pode construir imagens automaticamente lendo as instruções do arquivo Dockerfile. O Dockerfile é um arquivo de texto que contém todos os comandos necessários para se criar uma imagem, usando o comando docker build podemos então criar a imagem a partir do Dockerfile. Dockerfile 56 # Comentario INSTRUCAO argumentos Formato A instrução não faz distinção entre maiúsculas e minúsculas. Porém a convenção diz para as instruções serem MAIÚSCULAS para distinguir dos argumentos mais facilmente. O Docker executa as instruções do Dockerfile em ordem. A primeira instrução deve ser “FROM” para especificar a Imagem Base da qual você está construindo. # Meu teste FROM ubuntu Formato
  • 57. Informa a partir de qual imagem será gerada a nova image Dockerfile | FROM 57 FROM <image> FROM <image>:<tag> FROM <image>@<digest> Utilização FROM ubuntu FROM ubuntu:latest FROM ubuntu@d2b1b8e4a217 Exemplo
  • 58. Campo opcional, que informa o nome do mantenedor da nova image, não recomendado, é recomendado usar o campo LABEL, onde é possível adicionar mais informações, o MAINTAINER no campo LABEL fica como LABEL maintainer "André Justi <justi.andre@gmail.com> <www.andrejusti.com.br>", assim quando é feito o comando docker inspect essa informação é mostrada Dockerfile | MAINTAINER 58 MAINTAINER <name> Utilização MAINTAINER "André Justi" Exemplo
  • 59. Adiciona metadados da imagem, informações adicionais que servirão para identificar versão, tipo de licença, mantenedor e etc Dockerfile | LABEL 59 LABEL <chave>=<valor> <chave>=<valor> Utilização LABEL chave=valor LABEL "chave"="valor" LABEL "chave1"="valor1" "chave2"="valor2" "chave3"="valor3" LABEL "chave1"="valor1" "chave2"="valor2" "chave3"="valor3" Exemplo
  • 60. Instrução que cria e atribui uma variável de ambiente dentro da imagem. É possível informar mais de uma label Dockerfile | ENV 60 ENV <chave>=<valor> ENV <chave> <valor> Utilização ENV chave=valor ENV chave valor Exemplo
  • 61. Define qual será o diretório de trabalho (lugar onde serão copiados os arquivos, e criadas novas pastas etc) Dockerfile | WORKDIR 61 WORKDIR diretorio Utilização WORKDIR /data Exemplo
  • 62. Adiciona ou copia arquivos locais ou que estejam em uma url (no caso do ADD), para dentro da imagem O <dest> é um caminho absoluto, ou um caminho relativo a WORKDIR, caso o diretório destino não exista, ele será criado Se <src> for um diretório, todo o conteúdo do diretório será copiado, incluindo os metadados do sistema de arquivos Dockerfile | ADD e COPY 62 ADD <src>... <dest> ADD ["<src>",... "<dest>"] # Essa forma é necessário para caminhos que contêm espaços em branco COPY <src>... <dest> COPY ["<src>",... "<dest>"] # Essa forma é necessário para caminhos que contêm espaços em branco Utilização
  • 63. Dockerfile | ADD e COPY 63 ADD minhaPasta/meuarquivo.txt /pastaRaiz/ ADD ["Área de trabalho/meu arquivo.txt", "pasta raiz"] COPY minhaPasta/meuarquivo.txt /pastaRaiz/ COPY ["Área de trabalho/meu arquivo.txt", "pasta raiz"] Exemplo
  • 64. Diferença entre ADD e COPY ● ADD Permite <src> ser um URL ● Se estiver executando um ADD é o <src> é um arquivo em um formato de compactação reconhecido, o docker irá descompactá-lo e irá copiar os arquivos para o <dist> Dockerfile | ADD e COPY 64 # Copiando arquivos compactados no formato tar para o container # ADD ADD resources/jdk-8.tar.gz /usr/local/ # COPY COPY resources/jdk-8.tar.gz /tmp/ RUN tar -zxvf /tmp/jdk-8.tar.gz -C /usr/local RUN rm /tmp/jdk-8.tar.gz Exemplo
  • 65. Shell e Exec As instruções RUN, CMD e ENTRYPOINT suportam duas formas diferentes de execução: o formulário shell e o formulário exec . Dockerfile | RUN, CMD e ENTRYPOINT 65 INSTRUCAO executavel parametro01 parametro02 Exemplo Shell INSTRUCAO ["executavel","parametro01","parametro02"] Exemplo Exec
  • 66. Ao usar o formulário shell, o comando especificado é executado com uma invocação do shell usando /bin/sh -c. É possível ver isso claramente ao executar um docker ps Dockerfile | RUN, CMD e ENTRYPOINT 66 FROM ubuntu:trusty CMD ping localhost Dockerfile exemplo $ docker build -t nome:tag caminhoDockerfile $ docker ps > CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES > 52fec6512a86 teste:shell "/bin/sh -c 'ping ..." 7 sec Up 6 sec gifted Execução
  • 67. Uma opção melhor é usar o formulário exec nas instruções. Observe que o conteúdo do exec é formado como uma matriz JSON. Quando a forma exec da instrução é usada, o comando será executado sem um shell. OBS: É recomendado sempre usar o formulário exec nas instruções ENTRYPOINT e CMD. Dockerfile | RUN, CMD e ENTRYPOINT 67 FROM ubuntu:trusty CMD ["/bin/ping","localhost"] Dockerfile exemplo $ docker build -t nome:tag caminhoDockerfile $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES 0eab086cbe58 teste:exec "/bin/ping localhost" 12 sec Up 11 sec gallant Execução
  • 68. RUN: São as instruções que serão executadas para criação da imagem em questão, normalmente instalações de pacotes, esse comando também pode ser substituído ao iniciar o container, é possível declarar várias instruções RUN, porém cada uma cria uma nova camada da aplicação. CMD: São instruções padrão do container, normalmente usadas para declarar como a aplicação deve iniciar, ou quais serviços deve iniciar ao executar, o CMD só pode ser declarado uma vez. ENTRYPOINT : Específica o que será executado ao iniciar o container. Dockerfile | RUN, CMD e ENTRYPOINT 68
  • 69. Expõem uma ou mais portas, isso quer dizer que o container quando iniciado poderá ser acessível através dessas porta Dockerfile | EXPOSE 69 EXPOSE <port> [<port>...] Utilização EXPOSE 8080 8081 Exemplo
  • 70. Mapeia um diretório do host para ser acessível pelo container Dockerfile | VOLUME 70 VOLUME ["/diretorio"] VOLUME /diretorio Utilização VOLUME ["/var/log"] VOLUME /var/log Exemplo
  • 71. Define com qual usuário serão executadas as instruções durante a geração da image Dockerfile | USER 71 USER usuario Utilização USER root Exemplo
  • 72. Próximos passos | Compose O Docker Compose é uma ferramenta para a criação e execução de múltiplos containers de maneira padronizada e que facilite a comunicação entre eles. Com o Compose, é possível usar um único arquivo para definir como será o ambiente de uma aplicação e usando um único comando possível criará e iniciará todos os serviços definidos. 72
  • 73. Próximos passos | Machine Docker machine é a ferramenta usada para instalação e gerência de docker hosts remotos de forma fácil e direta. 73
  • 74. Próximos passos | Swarm O Docker Swarm é uma ferramenta que permite a criação de clusters de Docker, ou seja, podemos fazer com que diversos hosts de Docker estejam dentro do mesmo pool de recursos, facilitando assim o deploy de containers. É possível por exemplo criar um container sem necessariamente saber em qual host ele está, Swarm disponibilidade uma API de integração, onde é possível realizar grande parte das atividades administrativas de um container 74
  • 75. Referências 75 Livro: Containers com Docker Do desenvolvimento à produção Casa do Código Livro: Caixa de Ferramentas DevOps Um guia para construção, administração e arquitetura de sistemas modernos Casa do Código Site: https://docs.docker.com Documentação oficial Docker Site: http://mundodocker.com.br Site de uma comunidade brasileira Livro: Docker: Up & Running Shipping Reliable Containers in Production O’Reilly Site: http://techfree.com.br Site com várias dicas e posts sobre Docker