🐳 Sejam bem-vindos ao treinamento DOCKER! 🐳
Vamos conhecer alguns comandos e suas aplicações.
✔ Docker Instalado!
Livro Descomplicando Docker - Jefferson Linuxtip
Apostila Curso de Docker - Cod3r.com.br
Docker DCA Curse - Caio Delgado
A instalação do docker pode ser feita de várias maneiras, dependendo do seu SO. Para instalação no Ubuntu, você pode utilizar o script abaixo ou consultar a documentação oficial.
- Script
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Utilizando docker sem sudo
sudo usermod -aG docker $USER
- Listar os comandos disponíveis
docker
ou
docker container
- Verificar a versão do docker
docker version
- Listar os container em execução
docker container ls
- Listar as imagens presentes no host
docker image ls
- Listar todos os container, inclusive os parados
docker container ls -a
Principais comandos:
docker containerdocker imagedocker networkdocker systemdocker volume
Com esse comando, conseguimos ver algumas informações sobre os containers, como id, nome, a imagem baseada, comando inicial, etc.
- Executando seu primeiro container
docker container run hello-world
- O container está em execução?
- Alguma imagem foi baixada?
- Listar os containers que forma criados e suas informações.
- Executar um container Linux
docker container run -it debian bash- O que aconteceu com esse container? Por que ele é executado e destruido?
Utilize a sequencia de teclas <CTRL> + <P> + <Q> para se desconectar do container sem que ele seja parado. Este comando é chamado de Read escape sequence.
<CTRL> + <P> + <Q>
docker container lsNote que agora o container ainda está em execução.
docker container run --help
O comando run aceita a informação de qual versão de uma determinada imagem gostaríamos de utilizar. Para isso, basta informarmos através de uma tag.
docker container run debian:buster
docker run ubuntu:18.04 cat /etc/issue
O parâmetro -it do docker container run indica ao Docker para iniciar o container em iterativo.
docker container run -it debian
O parâmetro -d do docker container run indica ao Docker para iniciar o container em background (modo daemon).
O nome dos contêineres devem ser únicos, como percebido, o docker cria automáticamento o nome para você. Você pode definir o nome que achar melhor, desde que siga a regra de nomes únicos.
docker container run --name meudebian -d debian
- Funcionou corretanmente?
docker container run --name meudebian2 -d sleep 20
- Não é possível ter dois container com o mesmo nome, para isso é necessário excluir o contaneir.
-
Crei um container Alpine no modo iterativo
-
Crie uma arquivo de texto dentro do container com o comando touch
-
Saia do container
-
Utilize o comando run novamente para criar o container Alpine
-
Busque pelo arquivo criado anteriormente com o comando ls
Para iniciar um container novamente, basta utilizar o comando start, com as flags -a (attach) -i (Interactive)
docker container start -ai meudebian
touch docker.txt
exit
docker container start -ai meudebian
ls docker.txt
exit
- Funcionou corretamente?
-
Crie um contanier do CentOS ou outra distribuição linux.
-
Verifique as imagens que você tem baixadas.
-
Executo e comando sleep e suspenda o SO por 2000 segundos
-
Verifique os containers em execução.
-
Finalize todos os containers em execução.
É um "Registry" usado para hospedar e baixar diversas imagens. Pode ser visto como uma plataforma SaaS de compartilhamento e gerenciamento de imagens.
- Acesse e faça seu cadastro.
-
Docker Hub é um public registry padrão do Docker é biblioteca pública de armazenamento de imagens.
-
Private registries: Docker Trusted Registry, harbir, GitLab Container Registry
-
Public registries: Google Container Registry (CGR), Amazon Elastic Container Registry (ECR), Azure Container Registry (ACR).
Fonte: Caio Delgado
- Listar as camadas de uma imagem
docker image history debian
- Inspecionar uma imagem
docker image inspect debian
-
Listar os containers
-
Outras ações com container em Background
# reinicar um container
docker container restart <nome ou id>
# Parar um container
docker container stop <nome ou id>
# Iniciar um container
docker container start <nome ou id>
https://docs.docker.com/engine/reference/commandline/inspect/
docker container inspect
https://docs.docker.com/engine/reference/commandline/exec/
docker container exec
https://docs.docker.com/engine/reference/commandline/logs/
docker container logs
GOMES, Rafael. Docker para desenvolvedores. Leanpub: Instruct 9Bravos, 2020. Disponível em: https://leanpub.com/dockerparadesenvolvedores. Acesso em: 01 out. 2021. ls
É possível mapear portas, permitindo o acesso através de toda a rede. O parâmetro -p recebe as duas portas como por exemplo: -p 8080:80 onde o primeiro é do host e o segundo é do container.
docker container run -p 8080:80 nginx
- Verificar se a porta 8080 está respondendo.
https://hub.docker.com/_/mysql
docker pull mysql
docker container run mysql
- Ao executar o comando run, funcionou?
docker container run -e MYSQL_ROOT_PASSWORD=root mysql
Criando container MySQL com paramêtros e expondo a porta
docker container run -e MYSQL_ROOT_PASSWORD=root --name=mysql_server -d -p 3306:3306 mysql
- Você pode acessar o Server do MySQL através de um client.
O exemplo anterior é uma maneira simples de trabalhar com network, exitem outras maneiras de se trabalhar com network no docker, recomendo a leitura:
*** Atenção: Se você estiver utilizando o Katacoda, pode não funcionar.
É possível mapear tanto diretórios no host como entidades especiais conhecidas como volumes para diretórios no container. Por enquanto vamos nos concentrar no mapeamento mais simples, uma diretório no host para um diretório no container. O método mais comum para este fim é o parâmetro -v no comando docker container run, o -v recebe um parâmetro que normalmente é composto por dois caminhos absolutos separados por : (dois pontos). Assim como diversos outros parâmetros, o primeiro é no host e o segundo é no container. (GOMES, 2020)
- Subir o container e testar o acesso
docker container run -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html -d nginx
- Criar o diretório html e criar o arquivo (caso não exista) html/index.html conforme exemplo:
<h1> Hello World </h1>
-
Acessar o host e verificar as mensagem de saida!
-
Editar o arquivo html com o container rodando e verifica se as alterações foram aplicadas em tempo real.
- Subindo um container em background
docker container run -d --name ex-deamon -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html nginx
O exemplo anterior é uma maneira simples de trabalhar com volumes, exitem outras maneiras de se trabalhar com volumes no docker, recomendo a leitura:
Fonte: https://takacsmark.com/dockerfile-tutorial-by-example-dockerfile-best-practices-2018/
- Cria um diretório e dentre dele crie seu arquivo Dockerfile com o conteúdo abaixo:
FROM alpine:3.4
RUN apk update
RUN apk add vim
RUN apk add curl
- Buildando a imagem
docker build -t patrickjcardoso/alpine-leve:1.0 .
- Criando um container da imagem
docker run --rm -ti patrickjcardoso/alpine-leve:1.0 /bin/sh
- Susbstitua a linha que contém o curl por git
FROM alpine:3.4
RUN apk update
RUN apk add vim
RUN apk add git
- Buld novamenta a imagem e observe as saídas!
FROM alpine:3.4
RUN apk update && \
apk add curl && \
apk add vim && \
apk add git
OU
FROM alpine:3.4
RUN apk update && apk add \
curl \
git \
vim
Nesta atividade vamos implantar uma aplicação simples, para isso, vamos utilizar um tutorial que pode ser acessado pelo container abaixo.
docker run -dp 80:80 docker/getting-started
Fonte: Blog Matheus Castiglioni
Dockerfile
FROM nginx
LABEL version="1.0.0" description="Disponibilizando site com NGINX" maintainer="Seu Nome<seuemail@gmail.com>"
RUN cd / && mkdir Arquivos && chmod 777 -R Arquivos/
COPY ./site/index.html /usr/share/nginx/html/
VOLUME /Arquivos/
EXPOSE 80
ENV API_URL=http://localhost:8000/api/
ENV API_BANCO=meu_site
WORKDIR /usr/share/nginx/html/
ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-g", "daemon off;"]
index.html
<html>
<body>
<h1>Meu site com Docker</h1>
</body>
</html>
https://docs.docker.com/get-started/02_our_app/
Agora chegou sua hora de por em prático os conhecimentos adquiridos até aqui!
- Crie uma nova pasta e:
mkdir exemplo01 && cd exemplo01
- Crie uma pasta chamada wordpress
- Crie outra pasta chamada db
- Crie um arquivo chamado docker-compose.yml ** Cole neste arquivo o conteúdo da próxima seção
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- ./wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./db:/var/lib/mysql
Leitura Recomendada sobre docker-compose
-
Execute docker-compose up
-
Acesse localhost:8080
-
Abra um novo terminal e verifique os conteineres em execução.
-
Verifique também se existem volumes no docker.
-
Verifique também se existem redes no docker.
Para encerrar, volte para o terminal e aperte CTRL+C
Prof. Patrick J. Cardoso
GOMES, Rafael. Docker para desenvolvedores. Leanpub: Instruct 9Bravos, 2020. Disponível em: https://leanpub.com/dockerparadesenvolvedores. Acesso em: 01 out. 2021.