Docker
Um Pouco Além do HelloWorld….
thiago.soares.jr@gmail.com
O que seria essa tal de Docker ?
Docker é uma plataforma Open Source escrito em Go, que é
uma linguagem de programação de alto desempenho
desenvolvida dentro do Google, que facilita a criação e
administração de ambientes isolados.
Containers são tipo Máquinas virtuais ?
Containers são Máquinas virtuais ?
Hello World - 01
● docker --version
● docker info
● docker images
● docker container run hello-world
● docker container ls
What happened ?
● CHECK
● PULL
● RUN
● KILL
Imagem? Container?
● Images
○ “São as aplicações que queremos rodar.”
○ With a container image, we bundle the application along with its runtime and dependencies. We
use that image to create an isolated executable environment, also known as container. We can
deploy containers from a given image on the platform of our choice, such as desktops, VMs,
cloud, etc.
● Containers
○ Containers are an application-centric way to deliver high-performing, scalable applications on the
infrastructure of your choice.
○ Um Container é uma instância da imagem rodando como um processo no host.
○ São as imagens em execução
Imagem? Container?
E o Docker Hub?
E o Docker Hub ?
HandsOn: NGinx
● Hub: https://hub.docker.com/_/nginx/
● Imagens Oficiais e de Usuários
● Versões de Imagens
○ Latest
○ Stable
○ Alpine
HandsOn: Redis
● docker container run -p 80:80 nginx
● CTRL+C
● docker container run -p 80:80 nginx
● docker container run -p 81:80 nginx
Docker CLI
● https://docs.docker.com/engine/reference/run/
● docker --version
● docker info
● docker container run
● docker container ls
● docker container ls -a
Docker CLI
● docker stop
○ docker stop ID/nome
● docker start
○ reinicia containers parados
○ docker container start ID/nome
● docker rm
○ docker rm ID/nome
○ Apenas para containers parados
Docker CLI
● Opção --detached ou -d
● Opção --name
○ docker container run -p 80:80 -d --name webserver nginx
● Opção --help
○ docker --help
○ docker container --help
○ E muito outros …
HandsOn: Ubuntu
● Hub: https://hub.docker.com/_/ubuntu/
● docker container run -a stdin -a stdout -i -t ubuntu /bin/bash
○ Opção -a / --attach
■ STDIN: Entradas do Teclado
■ STDOUT: Saídas do console
■ SDTERROR: Saídas de erros
○ Opcao -i
■ Mantém o SDTIN aberto funcionando, recebendo comandos
○ Opção -t
■ Habilita o TTY, terminal da maquina/container
○ /bin/bash
■ Comando a ser executado após a criação do container.
■ Neste caso, coisa do ubuntu
HandsOn: Ubuntu
● Mais simples:
○ docker container run -it ubuntu /bin/bash
● Mas isso é realmente um ubuntu ?
○ cat /etc/*release
● TASK: Criar um arquivo
● TASK: Instalar o GIT
○ apt-get update
○ apt-get install git
○ git -version
HandsOn: Ubuntu
● Parar o container
● Reiniciar o container
○ docker container ls -a
○ docker start ID/NAME
● Como executar comandos no container ?
○ docker container exec -it ID/NAME ls -ls
○ docker container exec -it ID/NAME touch teste.txt
● Como entrar no container ?
○ docker container exec -it ID/NAME /bin/bash
○ docker container attach ID/NAME
Salvando Tudo
● Commit
○ Commits gravam as alterações criadas pelo usuário em uma nova imagem
○ Cada alteração será uma nova Layer
● docker container commit -m “alguma coisa” ID_CONTAINER TAG
● docker images
● Push
○ docker login
○ docker image push TAG
Layers
Volumes
Containers são descartáveis, os dados não!
Volumes
HandsOn: MongoDB
● docker container run -it --name meu-mongo -d -p 27017:27017 mongo
● Os dados persistem se eu parar o container ?
● E se eu remover o container ?
HandsOn: MongoDB
● docker container run -it --name meu-mongo
-v /opt/TMP/javaday:/data/db
-d -p 27017:27017 mongo
DockerFile
E antes de contiuar …..
Dockerfile
● Dockerfile é um documento de texto que contém todos os comandos
que o usuário pode chamar para construir uma imagem.
● Referências
○ https://docs.docker.com/engine/reference/builder/
● Exemplos
○ https://hub.docker.com/_/ubuntu/
○ https://hub.docker.com/_/debian/
○ https://hub.docker.com/_/nginx/
Dockerfile - FROM
● Indica qual será a imagem base
● Exemplo:
FROM ubuntu:latest
LABEL maintainer = “the docker guru”
Dockerfile - RUN
● Executa comandos no shell para a construção da imagem
● Cada comando resulta em uma nova layer na imagem
● Exemplo:
RUN echo “Hello Docker World”
RUN adduser -D -s /bin/sh docker.user
Dockerfile - EXPOSE
● Informa ao docker quais portas estão disponíveis para ser exportadas
● Exemplo:
EXPOSE 8080
EXPOSE 5432
Dockerfile - CMD
● Define instruções que serão executadas quando um container for
criado.
● Exemplo
CMD ["/usr/bin/wc","--help"]
CMD ["catalina.sh", "run"]
Dockerfile - ADD ou COPY
● Ambos irão copiar arquivos do host para a imagem no momento do
build. As diferenças são mínimas, mas o ADD pode adicionar arquivos
da rede ou extrair arquivos tar.bz, enquanto o COPY não pode.
● Exemplo:
ADD *.war app.war
COPY demo.war /tomcat/webapps
Demo 01 - Rest Simples
Demo 02 - Registry
Demo 03 - Rest + Redis
Demo 04 - Registry 2
E o que vem agora ?
● Fault-tolerant
● Scale on-demand
● Resources optimally
● Registry: Discover applications
automatically, and communicate with
each other
● External world access
● Update/rollback without any
downtime.
● ……………….
Next time …..
Samples
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: spring-boot-postgres-sample
namespace: default
spec:
replicas: 1
template:
metadata:
name: spring-boot-postgres-sample
labels:
app: spring-boot-postgres-sample
spec:
containers:
- name: spring-boot-postgres-sample
env:
- name: POSTGRES_USER
valueFrom:
configMapKeyRef:
name: postgres-config
key: postgres_user
- name: POSTGRES_PASSWORD
valueFrom:
configMapKeyRef:
name: postgres-config
key: postgres_password
- name: POSTGRES_HOST
valueFrom:
configMapKeyRef:
name: hostname-config
key: postgres_host
image: <your Docker Hub account>/spring-boot-postgres-on-k8s:v1
Dicas Finais
● https://labs.play-with-docker.com/
● https://labs.play-with-k8s.com/
Dica final. E mais importante!
Thanks!
thiago.soares.jr@gmail.com
https://www.linkedin.com/in/thiagofsoares/

JavaDay2018 - Docker - Além do HelloWorld

  • 1.
    Docker Um Pouco Alémdo HelloWorld…. thiago.soares.jr@gmail.com
  • 2.
    O que seriaessa tal de Docker ? Docker é uma plataforma Open Source escrito em Go, que é uma linguagem de programação de alto desempenho desenvolvida dentro do Google, que facilita a criação e administração de ambientes isolados.
  • 3.
    Containers são tipoMáquinas virtuais ?
  • 4.
  • 5.
    Hello World -01 ● docker --version ● docker info ● docker images ● docker container run hello-world ● docker container ls
  • 6.
    What happened ? ●CHECK ● PULL ● RUN ● KILL
  • 7.
    Imagem? Container? ● Images ○“São as aplicações que queremos rodar.” ○ With a container image, we bundle the application along with its runtime and dependencies. We use that image to create an isolated executable environment, also known as container. We can deploy containers from a given image on the platform of our choice, such as desktops, VMs, cloud, etc. ● Containers ○ Containers are an application-centric way to deliver high-performing, scalable applications on the infrastructure of your choice. ○ Um Container é uma instância da imagem rodando como um processo no host. ○ São as imagens em execução
  • 8.
  • 9.
  • 10.
  • 12.
    HandsOn: NGinx ● Hub:https://hub.docker.com/_/nginx/ ● Imagens Oficiais e de Usuários ● Versões de Imagens ○ Latest ○ Stable ○ Alpine
  • 13.
    HandsOn: Redis ● dockercontainer run -p 80:80 nginx ● CTRL+C ● docker container run -p 80:80 nginx ● docker container run -p 81:80 nginx
  • 14.
    Docker CLI ● https://docs.docker.com/engine/reference/run/ ●docker --version ● docker info ● docker container run ● docker container ls ● docker container ls -a
  • 15.
    Docker CLI ● dockerstop ○ docker stop ID/nome ● docker start ○ reinicia containers parados ○ docker container start ID/nome ● docker rm ○ docker rm ID/nome ○ Apenas para containers parados
  • 16.
    Docker CLI ● Opção--detached ou -d ● Opção --name ○ docker container run -p 80:80 -d --name webserver nginx ● Opção --help ○ docker --help ○ docker container --help ○ E muito outros …
  • 18.
    HandsOn: Ubuntu ● Hub:https://hub.docker.com/_/ubuntu/ ● docker container run -a stdin -a stdout -i -t ubuntu /bin/bash ○ Opção -a / --attach ■ STDIN: Entradas do Teclado ■ STDOUT: Saídas do console ■ SDTERROR: Saídas de erros ○ Opcao -i ■ Mantém o SDTIN aberto funcionando, recebendo comandos ○ Opção -t ■ Habilita o TTY, terminal da maquina/container ○ /bin/bash ■ Comando a ser executado após a criação do container. ■ Neste caso, coisa do ubuntu
  • 19.
    HandsOn: Ubuntu ● Maissimples: ○ docker container run -it ubuntu /bin/bash ● Mas isso é realmente um ubuntu ? ○ cat /etc/*release ● TASK: Criar um arquivo ● TASK: Instalar o GIT ○ apt-get update ○ apt-get install git ○ git -version
  • 20.
    HandsOn: Ubuntu ● Pararo container ● Reiniciar o container ○ docker container ls -a ○ docker start ID/NAME ● Como executar comandos no container ? ○ docker container exec -it ID/NAME ls -ls ○ docker container exec -it ID/NAME touch teste.txt ● Como entrar no container ? ○ docker container exec -it ID/NAME /bin/bash ○ docker container attach ID/NAME
  • 21.
    Salvando Tudo ● Commit ○Commits gravam as alterações criadas pelo usuário em uma nova imagem ○ Cada alteração será uma nova Layer ● docker container commit -m “alguma coisa” ID_CONTAINER TAG ● docker images ● Push ○ docker login ○ docker image push TAG
  • 22.
  • 23.
  • 24.
  • 25.
    HandsOn: MongoDB ● dockercontainer run -it --name meu-mongo -d -p 27017:27017 mongo ● Os dados persistem se eu parar o container ? ● E se eu remover o container ?
  • 26.
    HandsOn: MongoDB ● dockercontainer run -it --name meu-mongo -v /opt/TMP/javaday:/data/db -d -p 27017:27017 mongo
  • 27.
  • 28.
    E antes decontiuar …..
  • 31.
    Dockerfile ● Dockerfile éum documento de texto que contém todos os comandos que o usuário pode chamar para construir uma imagem. ● Referências ○ https://docs.docker.com/engine/reference/builder/ ● Exemplos ○ https://hub.docker.com/_/ubuntu/ ○ https://hub.docker.com/_/debian/ ○ https://hub.docker.com/_/nginx/
  • 32.
    Dockerfile - FROM ●Indica qual será a imagem base ● Exemplo: FROM ubuntu:latest LABEL maintainer = “the docker guru”
  • 33.
    Dockerfile - RUN ●Executa comandos no shell para a construção da imagem ● Cada comando resulta em uma nova layer na imagem ● Exemplo: RUN echo “Hello Docker World” RUN adduser -D -s /bin/sh docker.user
  • 34.
    Dockerfile - EXPOSE ●Informa ao docker quais portas estão disponíveis para ser exportadas ● Exemplo: EXPOSE 8080 EXPOSE 5432
  • 35.
    Dockerfile - CMD ●Define instruções que serão executadas quando um container for criado. ● Exemplo CMD ["/usr/bin/wc","--help"] CMD ["catalina.sh", "run"]
  • 36.
    Dockerfile - ADDou COPY ● Ambos irão copiar arquivos do host para a imagem no momento do build. As diferenças são mínimas, mas o ADD pode adicionar arquivos da rede ou extrair arquivos tar.bz, enquanto o COPY não pode. ● Exemplo: ADD *.war app.war COPY demo.war /tomcat/webapps
  • 39.
    Demo 01 -Rest Simples
  • 40.
    Demo 02 -Registry
  • 41.
    Demo 03 -Rest + Redis
  • 42.
    Demo 04 -Registry 2
  • 43.
    E o quevem agora ?
  • 44.
    ● Fault-tolerant ● Scaleon-demand ● Resources optimally ● Registry: Discover applications automatically, and communicate with each other ● External world access ● Update/rollback without any downtime. ● ……………….
  • 46.
  • 47.
    Samples apiVersion: extensions/v1beta1 kind: Deployment metadata: name:spring-boot-postgres-sample namespace: default spec: replicas: 1 template: metadata: name: spring-boot-postgres-sample labels: app: spring-boot-postgres-sample spec: containers: - name: spring-boot-postgres-sample env: - name: POSTGRES_USER valueFrom: configMapKeyRef: name: postgres-config key: postgres_user - name: POSTGRES_PASSWORD valueFrom: configMapKeyRef: name: postgres-config key: postgres_password - name: POSTGRES_HOST valueFrom: configMapKeyRef: name: hostname-config key: postgres_host image: <your Docker Hub account>/spring-boot-postgres-on-k8s:v1
  • 48.
  • 49.
    Dica final. Emais importante!
  • 51.