SlideShare uma empresa Scribd logo
1
Oque é 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
Oque são containers
3
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 deversõ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.
Breve história
4
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 GOcriada peloGoogle.
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.
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 d
a população
daIslândia!
Aadoçã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.
5
Alguns outros fatos sobreDocker
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.
Uma análise de janeiro 2017 dos perfis do LinkedIn, mostra que as skils sobre Docker cresceram
160 em2016.
No GitHub existem quase 150 mil repositórios com algum código ou artefato Docker.
6
Alguns outros fatos sobreDocker
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.
Comunidade
Meetups DockerBrasil
7
Principaisbuscas
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. dockercontainers
15. docker images
Oque estão falando por aí | GoogleTrends
Comparação com outros termospopulares
Docker
BigData
Micro Services
2013 2017
8
Oque estão falando por aí | StackOverflow
Comparação com outros termospopulares
Docker
BigData
Micro Services
2013 2017
9
Quem estáusando
…
e muitas outras empresas eprojetos!
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.
11
VM vs Docker
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.
12
VM vsDocker
VM vsDocker
Guest OS
Bins/Libs
App 01
Server
Host OS
Hypervisor
Estrutura VM (Virtual Machine)
Guest OS
Bins/Libs
App 02
VM 02
VM 01
VM
s
MV
Estrutura Docker
Server
Host OS
Docker Engine
Bins/Libs
App 01
Bins/Libs
App 02
CONT 02 CONT 01
Container
s
Docker
13
Partes principais doDocker
network
container
data volumes
image
Client
dockerCLI
REST API
Server
dockerdaemon
ciador
gere
n
ciador
gere
n
dor
gerencia
dor
14
gerencia
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
15
total dos mesmos.
Elementos doDocker
isolamento parcial ou
Algumas características doscontainers
● Portabilidade deaplicação
● Isolamento deprocessos
● Prevenção de violaçãoexterna
● Gerenciamento de consumo derecursos
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 doDocker
Kernel
Java8
Image
Minha App01
Image
Container
01
Debian
Base Image
Wildfly 8
Image
Minha App02
Image
Node JS
Image
Nginx
Image
Minha App03
Image
Alpine
Base Image
Apache
Image
Minha App04
Imagem
Container
02
Container 03
Container
04
Container 06
Container
05
16
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 doDocker
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”]
17
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.
18
Elementos doDocker
Dockerhost
Images
Partes principais doDocker
Client
dockerCLI
docker build
docker pull
docker run
Containers
dockerregistry
REST API
docker daemon
19
Comandos Docker
20
Tipo deparâmetro Descrição
<valor> parâmetro obrigatório
[valor] parâmetro opcional
[valor...] ou<valor...> parâmetro multivalorado
Comandos Docker | dockerhelp
docker <COMAND>--help
Exibe a forma de execução do comando e seus possíveis parâmetros
Exemplo
$ 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
21
Comandos Docker | dockerinfo
$ 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
22
docker info
Exibe as informações de execução dodocker
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 | dockerlogin
$ 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="}}
23
Exemplo
Comandos Docker | dockerlogout
docker logout <SERVER>
Faz login em um servidor de registro Docker
Exemplo
$ docker logout docker-registro.meuservidor.com.br
> Removing login credentials for docker-registro.meuservidor.com.br
24
docker images[OPTIONS]
Lista as imagensbaixadas
Parâmetros
-a Mostrar todas imagens (por padrão oculta as intermediárias)
Comandos Docker | dockerimages
$
>
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
> redis latest 74d8f543ac97 6 days ago 184 MB
> ubuntu latest f49eec89601e 2 weeks ago 129 MB
25
$ 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 daimagem
Comandos Docker | dockerpull
$ 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
26
Exemplo
docker search [OPTIONS]<TERM>
Pesquisa nos repositóriosimagens
Parâmetros
--limit <quantidadeResultados> Limita a consulta a um númerode resultados
Comandos Docker | dockersearch
AUTOMATED
27
$ docker search redis
> NAME
> redis
DESCRIPTION
Redis is an open source key-value store th...
STARS
3336
OFFICIAL
[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 umcontainer)
28
Parâmetros
-e Define uma variável deambiente
--env-file Local de uma arquivo com variáveis deambiente
--link Adicionar link a outrocontainer
-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 | dockerrun
Parâmetros
-p Mapeia uma porta entre o container e o host
--restart
Tipo de política de reinicialização docontainer
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 desucesso)
always - Sempre reinicia quando o serviço docker for iniciado, independente do status
--rm
Remover o container automaticamente quando ele for terminado (default false)
--runtimeTempo de execução para usar neste container
-v Vincular um volume
--storage-opt Opções do storage docontainer
-d Roda o container embackgroud
29
Comandos Docker | dockerrun
Comandos Docker | dockerrun
Exemplo
$ 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
30
Comandos Docker | docker run--link
# 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
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.
Exemplo
Comandos Docker | docker run-v
$ 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
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.
Exemplo
Comandos Docker | dockerinspect
>
>
>
>
>
>
>
33
"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
> ]
docker inspect <CONTAINER>
Mostra os metadados do container, como os volumes associados, mantenedor etc.
Exemplo
$ docker inspect db
> [
docker exec [OPTIONS] <CONTAINER><COMMAND>[ARG...]
Executa um comando em um container em execução
Parâmetros
-d Executa o comando embackgroud
-e Define variáveis deambiente
-it Entra em modoiterativo
Comandos Docker | dockerexec
$ 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
34
Exemplo
docker create [OPTIONS] <IMAGE> <COMMAND>[ARG...]
Criar um novo container a partir de uma imagem
35
Comandos Docker | dockercreate
Parâmetros
-e Define uma variável deambiente
--env-file Local de uma arquivo com variáveis deambiente
--link Adicionar link a outrocontainer
-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 docontainer
--rm
Remover o container automaticamente quando ele for terminado (default false)
--runtimeTempo de execução para usar neste container
-v Vincular um volume
--storage-opt Opções do storage docontainer
36
Comandos Docker | dockercreate
Comandos Docker | dockercreate
Exemplo
$ 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
37
docker stop [OPTIONS] <CONTAINER...>
Para um ou maiscontainers
Parâmetros
-t
<tempo> Quantidade em segundos que o docker espera para parar o container
Comandos Docker | dockerstop
$ docker stop redisLocal
> redisLocal
$ docker stop -t 100 redisLocal
> redisLocal
38
Exemplo
Comandos Docker | dockerkill
docker kill <CONTAINER...>
Mataum ou mais containers
Exemplo
$ docker kill redisLocal
> redisLocal
39
docker ps [OPTIONS]
Lista oscontainers
Parâmetros
-a Mostrar todos os containers (por padrão mostra apenas os em execução)
-q Exibi apenas os ids
Comandos Docker | dockerps
$ 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
39e65a58f
9f40f0ffb
-q
40
Exemplo
Comandos Docker | dockerstart
$ docker start redisLocal
> redisLocal
41
docker start [OPTIONS] <CONTAINER...>
Inicia um ou maiscontainers
Exemplo
docker restart [OPTIONS] <CONTAINER...>
Reinicia um ou maiscontainers
Parâmetros
-t
<tempo>
Quantidade em segundos que o docker espera para reiniciar o container, default são10
segundos
Comandos Docker | dockerrestart
$ docker restart redisLocal
> redisLocal
$ docker restart -t 100 redisLocal
> redisLocal
42
Exemplo
Comandos Docker | dockerstats
$
>
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
43
docker stats
Exibir as estatísticas de usocontainers
Exemplo
Comandos Docker | dockerrename
$ docker rename redisLocal redisCacheLocal
44
docker rename <CONTAINER><NEW_NAME>
Renomeia um container
Exemplo
docker rm [OPTIONS]<CONTAINER...>
Remove um ou maiscontainers
Parâmetros
-f Força a remoção, podendo remover containers emexecução
Comandos Docker | dockerrm
$ docker rm 768e388fa2c9
> 768e388fa2c9
$ docker rm meuPhp
> meuPhp
45
Exemplo
docker update [OPTIONS] <CONTAINER...>
Atualiza as configurações um ou maiscontainers
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 | dockerupdate
$ docker update -m 1000m --memory-swap 1300m redisLocal
> redisLocal
46
Exemplo
Comandos Docker | dockerpause
docker pause <CONTAINER...>
Pausar todos os processos dentro de um ou mais containers
Exemplo
$ docker pause redisLocal
> redisLocal
47
Comandos Docker | dockerunpause
docker unpause <CONTAINER...>
Inicia os processos anteriormente pausados de um ou mais containers
Exemplo
$ docker unpause redisLocal
> redisLocal
48
docker logs [OPTIONS]<CONTAINER>
Exibe os logs de umcontainer
Parâmetros
--tail
<quantidadeLinhas> Limita a quantidade de linhas que será exibido, começando do fim para o inicio
-f Continua exibindo olog
Comandos Docker | dockerlogs
$ 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.
49
Exemplo
docker rmi [OPTIONS]<CONTAINER....>
Remover uma ou maisimagens
Parâmetros
-f Força remoção, podendo remover imagens com containersvinculados
Comandos Docker | dockerrmi
$ docker rmi java
> Untagged: java:latest
> Untagged: java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
> Deleted: sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742a5b27080d8a4a8
> Deleted: sha256:0132aeca1bc9ac49d397635d34675915693a8727b103639ddee3cc5438e0f60
50
Exemplo
docker commit [OPTIONS] <CONTAINER>[REPOSITORY[:TAG]]
Criar uma nova imagem a partir das alterações de um container existente
Parâmetros
-a Autor dacommit
-m Mensagem decommit
Comandos Docker | dockercommit
$ docker commit meuBancoDeDados
> sha256:37f6ba54d41c106df337d027a7345b582fe5b023aee1ca21c3719915d706b9e8
$ docker commit -a "andrejusti" -m "Container com registros já existentes" meuBancoDeDados
> sha256:393236a4cf00ab1295b07dbe09668b01c741888d502d98e5ccbb544a8abd043a
51
Exemplo
Comandos Docker | dockertag
docker tag <SOURCE_IMAGE[:TAG]><TARGET_IMAGE[:TAG]>
Cria uma tag a partir de uma imagem existente
Exemplo
$ docker tag redis:latest redis:minhaTag
52
Comandos Docker | dockerpush
docker push [OPTIONS]<NAME>[:TAG]
Envia ao registro docker umaimagem
Exemplo
$ 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
53
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
54
Parâmetros
-f Nome do arquivo de build (defaulté Dockerfile)
-t Nome e opcionalmente uma tag no formato 'name: tag'
Comandos Docker | dockerbuild
Comandos Docker | dockerbuild
Exemplo
$ 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
55
Dockerfile
# Comentario
INSTRUCAO argumentos
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.
Formato
# Meu teste
FROM ubuntu
56
Ainstrução não faz distinção entre maiúsculas e minúsculas. Porém a convenção diz para as
instruções serem MAIÚSCULASpara distinguir dos argumentos mais facilmente.
ODocker executa as instruções do Dockerfile em ordem. Aprimeira instrução deve ser “FROM” para
especificar a Imagem Base da qual você estáconstruindo.
Formato
Dockerfile |FROM
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
Informa a partir de qual imagem será gerada a nova image
Utilização
FROM ubuntu
FROM ubuntu:latest
FROM ubuntu@d2b1b8e4a217
57
Exemplo
Dockerfile |MAINTAINER
MAINTAINER <name>
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 LABELfica como LABELmaintainer "André Justi <justi.andre@gmail.com>
<www.andrejusti.com.br>", assim quando é feito o comando docker inspect essa informação é
mostrada
Utilização
MAINTAINER "André Justi"
58
Exemplo
Dockerfile |LABEL
LABEL <chave>=<valor> <chave>=<valor>
Adiciona metadados da imagem, informações adicionais que servirão para identificar versão, tipo de
licença, mantenedor eetc
Utilização
LABEL chave=valor
LABEL "chave"="valor"
LABEL "chave1"="valor1" "chave2"="valor2" "chave3"="valor3"
LABEL "chave1"="valor1" 
"chave2"="valor2" 
"chave3"="valor3"
59
Exemplo
Dockerfile |ENV
ENV <chave>=<valor>
ENV <chave> <valor>
Instrução que cria e atribui uma variável de ambiente dentro da imagem. Épossível informar mais de
uma label
Utilização
ENV chave=valor
ENV chave valor
60
Exemplo
Dockerfile |WORKDIR
WORKDIR diretorio
Define qual será o diretório de trabalho (lugar onde serão copiados os arquivos, e criadas novas
pastas etc)
Utilização
WORKDIR /data
61
Exemplo
Dockerfile | ADDe COPY
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
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 dearquivos
Utilização
Dockerfile | ADDe COPY
Exemplo
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"]
63
Dockerfile | ADDe COPY
# 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
64
Diferença entre ADDeCOPY
● ADDPermite <src> ser umURL
● Seestiver 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>
Exemplo
Dockerfile | RUN, CMD e ENTRYPOINT
INSTRUCAO executavel parametro01 parametro02
Shell eExec
As instruções RUN,CMDe ENTRYPOINTsuportam duas formas diferentes de execução: o formulário
shell e o formulário exec.
Exemplo Shell
INSTRUCAO ["executavel","parametro01","parametro02"]
65
ExemploExec
Dockerfile | RUN, CMD e ENTRYPOINT
FROM ubuntu:trusty
CMD ping localhost
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 exemplo
> CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
> 52fec6512a86 teste:shell "/bin/sh -c 'ping ..." 7 sec Up 6 sec gifted
66
Execução
$ docker build -t nome:tag caminhoDockerfile
$ docker ps
Dockerfile | RUN, CMD e ENTRYPOINT
FROM ubuntu:trusty
CMD ["/bin/ping","localhost"]
Uma opção melhor é usar o formulário exec nas instruções. Observe que o conteúdo do exec é
formado como uma matrizJSON.
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 ENTRYPOINTeCMD.
Dockerfile exemplo
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
0eab086cbe58 teste:exec "/bin/ping localhost" 12 sec Up 11 sec gallant
67
Execução
$ docker build -t nome:tag caminhoDockerfile
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 CMDsó pode ser declarado uma vez.
ENTRYPOINT :Específica o que será executado ao iniciar o container.
68
Dockerfile | RUN, CMD e ENTRYPOINT
Dockerfile |EXPOSE
EXPOSE <port> [<port>...]
Expõem uma ou mais portas, isso quer dizer que o container quando iniciado poderá ser acessível
através dessasporta
Utilização
EXPOSE 8080 8081
69
Exemplo
Dockerfile |VOLUME
VOLUME ["/diretorio"]
VOLUME /diretorio
Mapeia um diretório do host para ser acessível pelo container
Utilização
VOLUME ["/var/log"]
VOLUME /var/log
70
Exemplo
Dockerfile |USER
USER usuario
Define com qual usuário serão executadas as instruções durante a geração da image
Utilização
USER root
71
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çosdefinidos.
72
Próximos passos |Machine
Docker machine é a ferramenta usada para instalação e gerência de docker hosts remotos de forma
fácil edireta.
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
Livro: Containers com Docker
Do desenvolvimento à produção
Casa doCódigo
Livro: Caixa de FerramentasDevOps
Umguia para construção,
administração earquitetura de
sistemas modernos
Casa doCódigo
Site: https://docs.docker.com
Documentação oficialDocker
Site: http://mundodocker.com.br
Site de umacomunidade brasileira
Livro: Docker: Up & Running
Shipping Reliable Containersin
Production
O’Reilly
Site: http://techfree.com.br
Site com várias dicas e posts sobre
Docker
75

Mais conteúdo relacionado

PDF
Apresentação Docker
PDF
Treinamento Docker Básico
PPTX
Conheça o Docker
PDF
Introdução-a-Docker-compactado.pdf
PDF
Oficina docker
PPTX
Docker meetup
PDF
Docker.io:
Apresentação Docker
Treinamento Docker Básico
Conheça o Docker
Introdução-a-Docker-compactado.pdf
Oficina docker
Docker meetup
Docker.io:

Semelhante a apresentação e introdução aos comandos básicos docker (20)

PPTX
Containers com docker #CPRecife4
PDF
Introdução ao docker
PPTX
PDF
Freedomday2016 - Fique na caixinha, docker
PDF
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
PPTX
Docker e suas tecnologias
PPTX
Docker e suas tecnologias por @cesarnog
PDF
Docker basicão e sem mistérios
PDF
Orquestrando Docker Containers: Machine, Swarm e Compose
PDF
Aula-18-Semana-06-Dockers Aula em formato ppt.pdf
PPTX
Usando Docker no desenvolvimento .NET
PDF
O que é docker?
PDF
Iniciando com docker
PDF
Apresentacao docker
ODP
O que é Docker?
PDF
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
PPTX
Docker - Básico
PDF
Docker - Tutorial for beginners
PPTX
Docker Itix
PDF
Iniciando com docker
Containers com docker #CPRecife4
Introdução ao docker
Freedomday2016 - Fique na caixinha, docker
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
Docker e suas tecnologias
Docker e suas tecnologias por @cesarnog
Docker basicão e sem mistérios
Orquestrando Docker Containers: Machine, Swarm e Compose
Aula-18-Semana-06-Dockers Aula em formato ppt.pdf
Usando Docker no desenvolvimento .NET
O que é docker?
Iniciando com docker
Apresentacao docker
O que é Docker?
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Docker - Básico
Docker - Tutorial for beginners
Docker Itix
Iniciando com docker
Anúncio

Mais de Antonio Lobato (12)

PPT
cap08 sistemas operacionais continuação…
PPT
cap09 sistemas operacionais em sua essência
PDF
performance para qualidade de desenvolvimento de software
PPTX
kubernetes-devops.pptx
PDF
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
PDF
aula03_uml_diagrama_classe.pdf
PPT
3-BasesNumericas.ppt
PDF
aula02_uml.pdf
PDF
slide engenharia.pdf
PDF
aula01_computador_Info_Cont.pdf
PDF
aula1introducaoarquitetura.pdf
PDF
Aula02-RI-Modelo-Booleano.pdf
cap08 sistemas operacionais continuação…
cap09 sistemas operacionais em sua essência
performance para qualidade de desenvolvimento de software
kubernetes-devops.pptx
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
aula03_uml_diagrama_classe.pdf
3-BasesNumericas.ppt
aula02_uml.pdf
slide engenharia.pdf
aula01_computador_Info_Cont.pdf
aula1introducaoarquitetura.pdf
Aula02-RI-Modelo-Booleano.pdf
Anúncio

apresentação e introdução aos comandos básicos docker

  • 1. 1
  • 2. Oque é 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. Oque são containers 3 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 deversõ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.
  • 4. Breve história 4 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 GOcriada peloGoogle. 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.
  • 5. 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 d a população daIslândia! Aadoçã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. 5 Alguns outros fatos sobreDocker 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.
  • 6. Uma análise de janeiro 2017 dos perfis do LinkedIn, mostra que as skils sobre Docker cresceram 160 em2016. No GitHub existem quase 150 mil repositórios com algum código ou artefato Docker. 6 Alguns outros fatos sobreDocker
  • 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. Comunidade Meetups DockerBrasil 7
  • 8. Principaisbuscas 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. dockercontainers 15. docker images Oque estão falando por aí | GoogleTrends Comparação com outros termospopulares Docker BigData Micro Services 2013 2017 8
  • 9. Oque estão falando por aí | StackOverflow Comparação com outros termospopulares Docker BigData Micro Services 2013 2017 9
  • 10. Quem estáusando … e muitas outras empresas eprojetos! 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. 11 VM vs Docker
  • 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. 12 VM vsDocker
  • 13. VM vsDocker Guest OS Bins/Libs App 01 Server Host OS Hypervisor Estrutura VM (Virtual Machine) Guest OS Bins/Libs App 02 VM 02 VM 01 VM s MV Estrutura Docker Server Host OS Docker Engine Bins/Libs App 01 Bins/Libs App 02 CONT 02 CONT 01 Container s Docker 13
  • 14. Partes principais doDocker network container data volumes image Client dockerCLI REST API Server dockerdaemon ciador gere n ciador gere n dor gerencia dor 14 gerencia 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 15 total dos mesmos. Elementos doDocker isolamento parcial ou Algumas características doscontainers ● Portabilidade deaplicação ● Isolamento deprocessos ● Prevenção de violaçãoexterna ● Gerenciamento de consumo derecursos
  • 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 doDocker Kernel Java8 Image Minha App01 Image Container 01 Debian Base Image Wildfly 8 Image Minha App02 Image Node JS Image Nginx Image Minha App03 Image Alpine Base Image Apache Image Minha App04 Imagem Container 02 Container 03 Container 04 Container 06 Container 05 16
  • 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 doDocker 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”] 17
  • 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. 18 Elementos doDocker
  • 19. Dockerhost Images Partes principais doDocker Client dockerCLI docker build docker pull docker run Containers dockerregistry REST API docker daemon 19
  • 20. Comandos Docker 20 Tipo deparâmetro Descrição <valor> parâmetro obrigatório [valor] parâmetro opcional [valor...] ou<valor...> parâmetro multivalorado
  • 21. Comandos Docker | dockerhelp docker <COMAND>--help Exibe a forma de execução do comando e seus possíveis parâmetros Exemplo $ 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 21
  • 22. Comandos Docker | dockerinfo $ 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 22 docker info Exibe as informações de execução dodocker 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 | dockerlogin $ 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="}} 23 Exemplo
  • 24. Comandos Docker | dockerlogout docker logout <SERVER> Faz login em um servidor de registro Docker Exemplo $ docker logout docker-registro.meuservidor.com.br > Removing login credentials for docker-registro.meuservidor.com.br 24
  • 25. docker images[OPTIONS] Lista as imagensbaixadas Parâmetros -a Mostrar todas imagens (por padrão oculta as intermediárias) Comandos Docker | dockerimages $ > docker images REPOSITORY TAG IMAGE ID CREATED SIZE > redis latest 74d8f543ac97 6 days ago 184 MB > ubuntu latest f49eec89601e 2 weeks ago 129 MB 25 $ 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 daimagem Comandos Docker | dockerpull $ 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 26 Exemplo
  • 27. docker search [OPTIONS]<TERM> Pesquisa nos repositóriosimagens Parâmetros --limit <quantidadeResultados> Limita a consulta a um númerode resultados Comandos Docker | dockersearch AUTOMATED 27 $ docker search redis > NAME > redis DESCRIPTION Redis is an open source key-value store th... STARS 3336 OFFICIAL [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 umcontainer) 28 Parâmetros -e Define uma variável deambiente --env-file Local de uma arquivo com variáveis deambiente --link Adicionar link a outrocontainer -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 | dockerrun
  • 29. Parâmetros -p Mapeia uma porta entre o container e o host --restart Tipo de política de reinicialização docontainer 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 desucesso) always - Sempre reinicia quando o serviço docker for iniciado, independente do status --rm Remover o container automaticamente quando ele for terminado (default false) --runtimeTempo de execução para usar neste container -v Vincular um volume --storage-opt Opções do storage docontainer -d Roda o container embackgroud 29 Comandos Docker | dockerrun
  • 30. Comandos Docker | dockerrun Exemplo $ 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 30
  • 31. Comandos Docker | docker run--link # 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 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. Exemplo
  • 32. Comandos Docker | docker run-v $ 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 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. Exemplo
  • 33. Comandos Docker | dockerinspect > > > > > > > 33 "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 > ] docker inspect <CONTAINER> Mostra os metadados do container, como os volumes associados, mantenedor etc. Exemplo $ docker inspect db > [
  • 34. docker exec [OPTIONS] <CONTAINER><COMMAND>[ARG...] Executa um comando em um container em execução Parâmetros -d Executa o comando embackgroud -e Define variáveis deambiente -it Entra em modoiterativo Comandos Docker | dockerexec $ 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 34 Exemplo
  • 35. docker create [OPTIONS] <IMAGE> <COMMAND>[ARG...] Criar um novo container a partir de uma imagem 35 Comandos Docker | dockercreate Parâmetros -e Define uma variável deambiente --env-file Local de uma arquivo com variáveis deambiente --link Adicionar link a outrocontainer -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 docontainer --rm Remover o container automaticamente quando ele for terminado (default false) --runtimeTempo de execução para usar neste container -v Vincular um volume --storage-opt Opções do storage docontainer 36 Comandos Docker | dockercreate
  • 37. Comandos Docker | dockercreate Exemplo $ 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 37
  • 38. docker stop [OPTIONS] <CONTAINER...> Para um ou maiscontainers Parâmetros -t <tempo> Quantidade em segundos que o docker espera para parar o container Comandos Docker | dockerstop $ docker stop redisLocal > redisLocal $ docker stop -t 100 redisLocal > redisLocal 38 Exemplo
  • 39. Comandos Docker | dockerkill docker kill <CONTAINER...> Mataum ou mais containers Exemplo $ docker kill redisLocal > redisLocal 39
  • 40. docker ps [OPTIONS] Lista oscontainers Parâmetros -a Mostrar todos os containers (por padrão mostra apenas os em execução) -q Exibi apenas os ids Comandos Docker | dockerps $ 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 39e65a58f 9f40f0ffb -q 40 Exemplo
  • 41. Comandos Docker | dockerstart $ docker start redisLocal > redisLocal 41 docker start [OPTIONS] <CONTAINER...> Inicia um ou maiscontainers Exemplo
  • 42. docker restart [OPTIONS] <CONTAINER...> Reinicia um ou maiscontainers Parâmetros -t <tempo> Quantidade em segundos que o docker espera para reiniciar o container, default são10 segundos Comandos Docker | dockerrestart $ docker restart redisLocal > redisLocal $ docker restart -t 100 redisLocal > redisLocal 42 Exemplo
  • 43. Comandos Docker | dockerstats $ > 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 43 docker stats Exibir as estatísticas de usocontainers Exemplo
  • 44. Comandos Docker | dockerrename $ docker rename redisLocal redisCacheLocal 44 docker rename <CONTAINER><NEW_NAME> Renomeia um container Exemplo
  • 45. docker rm [OPTIONS]<CONTAINER...> Remove um ou maiscontainers Parâmetros -f Força a remoção, podendo remover containers emexecução Comandos Docker | dockerrm $ docker rm 768e388fa2c9 > 768e388fa2c9 $ docker rm meuPhp > meuPhp 45 Exemplo
  • 46. docker update [OPTIONS] <CONTAINER...> Atualiza as configurações um ou maiscontainers 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 | dockerupdate $ docker update -m 1000m --memory-swap 1300m redisLocal > redisLocal 46 Exemplo
  • 47. Comandos Docker | dockerpause docker pause <CONTAINER...> Pausar todos os processos dentro de um ou mais containers Exemplo $ docker pause redisLocal > redisLocal 47
  • 48. Comandos Docker | dockerunpause docker unpause <CONTAINER...> Inicia os processos anteriormente pausados de um ou mais containers Exemplo $ docker unpause redisLocal > redisLocal 48
  • 49. docker logs [OPTIONS]<CONTAINER> Exibe os logs de umcontainer Parâmetros --tail <quantidadeLinhas> Limita a quantidade de linhas que será exibido, começando do fim para o inicio -f Continua exibindo olog Comandos Docker | dockerlogs $ 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. 49 Exemplo
  • 50. docker rmi [OPTIONS]<CONTAINER....> Remover uma ou maisimagens Parâmetros -f Força remoção, podendo remover imagens com containersvinculados Comandos Docker | dockerrmi $ docker rmi java > Untagged: java:latest > Untagged: java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d > Deleted: sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742a5b27080d8a4a8 > Deleted: sha256:0132aeca1bc9ac49d397635d34675915693a8727b103639ddee3cc5438e0f60 50 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 dacommit -m Mensagem decommit Comandos Docker | dockercommit $ docker commit meuBancoDeDados > sha256:37f6ba54d41c106df337d027a7345b582fe5b023aee1ca21c3719915d706b9e8 $ docker commit -a "andrejusti" -m "Container com registros já existentes" meuBancoDeDados > sha256:393236a4cf00ab1295b07dbe09668b01c741888d502d98e5ccbb544a8abd043a 51 Exemplo
  • 52. Comandos Docker | dockertag docker tag <SOURCE_IMAGE[:TAG]><TARGET_IMAGE[:TAG]> Cria uma tag a partir de uma imagem existente Exemplo $ docker tag redis:latest redis:minhaTag 52
  • 53. Comandos Docker | dockerpush docker push [OPTIONS]<NAME>[:TAG] Envia ao registro docker umaimagem Exemplo $ 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 53
  • 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 54 Parâmetros -f Nome do arquivo de build (defaulté Dockerfile) -t Nome e opcionalmente uma tag no formato 'name: tag' Comandos Docker | dockerbuild
  • 55. Comandos Docker | dockerbuild Exemplo $ 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 55
  • 56. Dockerfile # Comentario INSTRUCAO argumentos 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. Formato # Meu teste FROM ubuntu 56 Ainstrução não faz distinção entre maiúsculas e minúsculas. Porém a convenção diz para as instruções serem MAIÚSCULASpara distinguir dos argumentos mais facilmente. ODocker executa as instruções do Dockerfile em ordem. Aprimeira instrução deve ser “FROM” para especificar a Imagem Base da qual você estáconstruindo. Formato
  • 57. Dockerfile |FROM FROM <image> FROM <image>:<tag> FROM <image>@<digest> Informa a partir de qual imagem será gerada a nova image Utilização FROM ubuntu FROM ubuntu:latest FROM ubuntu@d2b1b8e4a217 57 Exemplo
  • 58. Dockerfile |MAINTAINER MAINTAINER <name> 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 LABELfica como LABELmaintainer "André Justi <justi.andre@gmail.com> <www.andrejusti.com.br>", assim quando é feito o comando docker inspect essa informação é mostrada Utilização MAINTAINER "André Justi" 58 Exemplo
  • 59. Dockerfile |LABEL LABEL <chave>=<valor> <chave>=<valor> Adiciona metadados da imagem, informações adicionais que servirão para identificar versão, tipo de licença, mantenedor eetc Utilização LABEL chave=valor LABEL "chave"="valor" LABEL "chave1"="valor1" "chave2"="valor2" "chave3"="valor3" LABEL "chave1"="valor1" "chave2"="valor2" "chave3"="valor3" 59 Exemplo
  • 60. Dockerfile |ENV ENV <chave>=<valor> ENV <chave> <valor> Instrução que cria e atribui uma variável de ambiente dentro da imagem. Épossível informar mais de uma label Utilização ENV chave=valor ENV chave valor 60 Exemplo
  • 61. Dockerfile |WORKDIR WORKDIR diretorio Define qual será o diretório de trabalho (lugar onde serão copiados os arquivos, e criadas novas pastas etc) Utilização WORKDIR /data 61 Exemplo
  • 62. Dockerfile | ADDe COPY 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 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 dearquivos Utilização
  • 63. Dockerfile | ADDe COPY Exemplo 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"] 63
  • 64. Dockerfile | ADDe COPY # 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 64 Diferença entre ADDeCOPY ● ADDPermite <src> ser umURL ● Seestiver 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> Exemplo
  • 65. Dockerfile | RUN, CMD e ENTRYPOINT INSTRUCAO executavel parametro01 parametro02 Shell eExec As instruções RUN,CMDe ENTRYPOINTsuportam duas formas diferentes de execução: o formulário shell e o formulário exec. Exemplo Shell INSTRUCAO ["executavel","parametro01","parametro02"] 65 ExemploExec
  • 66. Dockerfile | RUN, CMD e ENTRYPOINT FROM ubuntu:trusty CMD ping localhost 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 exemplo > CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES > 52fec6512a86 teste:shell "/bin/sh -c 'ping ..." 7 sec Up 6 sec gifted 66 Execução $ docker build -t nome:tag caminhoDockerfile $ docker ps
  • 67. Dockerfile | RUN, CMD e ENTRYPOINT FROM ubuntu:trusty CMD ["/bin/ping","localhost"] Uma opção melhor é usar o formulário exec nas instruções. Observe que o conteúdo do exec é formado como uma matrizJSON. 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 ENTRYPOINTeCMD. Dockerfile exemplo $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES 0eab086cbe58 teste:exec "/bin/ping localhost" 12 sec Up 11 sec gallant 67 Execução $ docker build -t nome:tag caminhoDockerfile
  • 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 CMDsó pode ser declarado uma vez. ENTRYPOINT :Específica o que será executado ao iniciar o container. 68 Dockerfile | RUN, CMD e ENTRYPOINT
  • 69. Dockerfile |EXPOSE EXPOSE <port> [<port>...] Expõem uma ou mais portas, isso quer dizer que o container quando iniciado poderá ser acessível através dessasporta Utilização EXPOSE 8080 8081 69 Exemplo
  • 70. Dockerfile |VOLUME VOLUME ["/diretorio"] VOLUME /diretorio Mapeia um diretório do host para ser acessível pelo container Utilização VOLUME ["/var/log"] VOLUME /var/log 70 Exemplo
  • 71. Dockerfile |USER USER usuario Define com qual usuário serão executadas as instruções durante a geração da image Utilização USER root 71 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çosdefinidos. 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 edireta. 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 Livro: Containers com Docker Do desenvolvimento à produção Casa doCódigo Livro: Caixa de FerramentasDevOps Umguia para construção, administração earquitetura de sistemas modernos Casa doCódigo Site: https://docs.docker.com Documentação oficialDocker Site: http://mundodocker.com.br Site de umacomunidade brasileira Livro: Docker: Up & Running Shipping Reliable Containersin Production O’Reilly Site: http://techfree.com.br Site com várias dicas e posts sobre Docker 75