Aula 05 - Primeiros passos
Para iniciar o Docker pela linha de comando digitamos:
$ docker run nome_imagem
Caso não tenhamos a imagem ele irá fazer o download e a instalação automaticamente.
A seguir vamos descrever alguns comandos do docker:
$ docker images: lista as imagens instaladas no sistema.
$ docker ps: mostra os containers em execução no sistema.
$ docker ps -a: mostra todos os containers disponíveis para execução no sistema.
$ docker stop container_id : para a execução do container.
$ docker rm container_id : apaga o container (não a imagem). Quando iniciamos um container ele persiste mesmo quando o paramos. Cada vez que rodamos o comando docker run iniciamos um novo container com aquela imagem. Para reiniciar um container já criado utilizamos o comando docker start container_id.
$ docker rmi image_id : apaga a imagem do container.

$ docker run nome_imagem
Caso não tenhamos a imagem ele irá fazer o download e a instalação automaticamente.
A seguir vamos descrever alguns comandos do docker:
$ docker images: lista as imagens instaladas no sistema.
$ docker ps: mostra os containers em execução no sistema.
$ docker ps -a: mostra todos os containers disponíveis para execução no sistema.
$ docker stop container_id : para a execução do container.
$ docker rm container_id : apaga o container (não a imagem). Quando iniciamos um container ele persiste mesmo quando o paramos. Cada vez que rodamos o comando docker run iniciamos um novo container com aquela imagem. Para reiniciar um container já criado utilizamos o comando docker start container_id.
$ docker rmi image_id : apaga a imagem do container.
Aula 06 - Criando container do Nginx e expondo portas
Para pesquisar imagens de containers do Docker podemos consultar o
site docker hub. Esse site é
um repositório de imagens Docker com images oficiais e
verificadas.
Quando executamos um container com o comando docker run ele inicializa o container e mantém o prompt na visualização da execução do processo. Para apenas inicializar o container sem manter o processo aberto podemos executar o comando com a flag -d:
docker run -d nome_da_imagem
Quando iniciamos um container devemos fazer o direcionamento das portas de acordo com o tipo de aplicação. Para expor uma porta de um container devemos executá-lo com o seguinte comando:
$ docker run -d -p 8080:80 apache Nesse comando estamos direcionando a porta 80 do container para a porta 8080 do nosso host local.
Outra possibilidade é alterar o nome do container que é atribuido aleatoriamente pelo docker. Para isso utilizamos a flag '--name':
$ docker run -d -p 8080:80 --name nome_atribuido nginx

Quando executamos um container com o comando docker run ele inicializa o container e mantém o prompt na visualização da execução do processo. Para apenas inicializar o container sem manter o processo aberto podemos executar o comando com a flag -d:
docker run -d nome_da_imagem
Quando iniciamos um container devemos fazer o direcionamento das portas de acordo com o tipo de aplicação. Para expor uma porta de um container devemos executá-lo com o seguinte comando:
$ docker run -d -p 8080:80 apache Nesse comando estamos direcionando a porta 80 do container para a porta 8080 do nosso host local.
Outra possibilidade é alterar o nome do container que é atribuido aleatoriamente pelo docker. Para isso utilizamos a flag '--name':
$ docker run -d -p 8080:80 --name nome_atribuido nginx
Aula 07 - Executando comandos dentro de containers
Para executar os comandos em containers Docker utilizamos o
comando exec:
$ docker exec container_id comando
Já para acessarmos um console com o container em execução utilizamos as flags -ti (TTY e interativo) e definimos o termminal a utilizar:
$ docker exec -ti container_id /bin/bash
Com isso temos um terminal bash em linha de comando no container.
A partir desse terminal podemos executar os comandos de terminal que desejarmos, inclusive o apt-get para atualização e download de pacotes para complementar a imagem (verificar quais as versões de SO utulizadas nas imagens).

$ docker exec container_id comando
Já para acessarmos um console com o container em execução utilizamos as flags -ti (TTY e interativo) e definimos o termminal a utilizar:
$ docker exec -ti container_id /bin/bash
Com isso temos um terminal bash em linha de comando no container.
A partir desse terminal podemos executar os comandos de terminal que desejarmos, inclusive o apt-get para atualização e download de pacotes para complementar a imagem (verificar quais as versões de SO utulizadas nas imagens).
Aula 09 a 11 - Criando uma imagem a partir de um container /
Entendendo volumes / Compartilhando volumes
Quando tivermos um container personalizad com aplicações e dados
salvos podemos criar uma imagem desse container para poder
instancia-lo novamente ou mesmo compartilhar com outros usuários ou
dispositivos. Para isso utilizamos o comando
commit passando o nome da imagem e a versão:
$ docker commit container_id nome_imagem:tag_versão
Os containers não são feitos para persistir dados. Os dados devem ser armazenados no host local. Para manter os dados de um container devemos criar volumes. Os volumes são mantidos mesmo quando o container é interrompido.
Um volume é instanciado quando o container é criado e ele pode ser compartilhado.
Para iniciar um volume utilizamos a flag '-v /nome_volume':
$ docker run -v /data -d -p 8081:80 --name nginx_vol nginx
Com isso criamos um container nginx com um volume '/data'.
Podemos também mapear diretórios do host local para o container. Para isso devemos passar o caminho do diretório a compartilhar no host, o caminho do diretório que será mapeado no container e o nome que será compartilhado.
$ docker run -v /c/git_repo/Cursos:/usr/share/nginx/html -d -p 8082:80 --name cursos_nginx nginx Com isso criamos uma rota para a pasta local do host na pasta html do NGINX.
Um modelo de rota criada para a execução de meus projetos com o PHP já configurado é:
$ docker run -v /d/git-repo/Cursos:/var/www/html -d -p 8081:80 --name cursos_apache php:7.4-apache Quando compartilhamos os volumes do host no container as alterações feitas nos arquivos tanto no primeiro quanto no segundo são persistidas em tempo real.
Após criarmos um compartilhamento podemos criar novos containers utilizando como base o mesmo compartilhamento. Para isso utilizamos a opção do comando run --volumes-from:
$ docker run --volumes-from cursos_apache -d -p 8082:80 --name cursos_apache_2 php:7.4-apache Essa opção apenas cria um container com os mesmos compartilhamentos. As aplicações personalizadas na imagem não são importadas. Podemos criar o container utilizando outra imagem também (diferente da do container original).

$ docker commit container_id nome_imagem:tag_versão
Os containers não são feitos para persistir dados. Os dados devem ser armazenados no host local. Para manter os dados de um container devemos criar volumes. Os volumes são mantidos mesmo quando o container é interrompido.
Um volume é instanciado quando o container é criado e ele pode ser compartilhado.
Para iniciar um volume utilizamos a flag '-v /nome_volume':
$ docker run -v /data -d -p 8081:80 --name nginx_vol nginx
Com isso criamos um container nginx com um volume '/data'.
Podemos também mapear diretórios do host local para o container. Para isso devemos passar o caminho do diretório a compartilhar no host, o caminho do diretório que será mapeado no container e o nome que será compartilhado.
$ docker run -v /c/git_repo/Cursos:/usr/share/nginx/html -d -p 8082:80 --name cursos_nginx nginx Com isso criamos uma rota para a pasta local do host na pasta html do NGINX.
Um modelo de rota criada para a execução de meus projetos com o PHP já configurado é:
$ docker run -v /d/git-repo/Cursos:/var/www/html -d -p 8081:80 --name cursos_apache php:7.4-apache Quando compartilhamos os volumes do host no container as alterações feitas nos arquivos tanto no primeiro quanto no segundo são persistidas em tempo real.
Após criarmos um compartilhamento podemos criar novos containers utilizando como base o mesmo compartilhamento. Para isso utilizamos a opção do comando run --volumes-from:
$ docker run --volumes-from cursos_apache -d -p 8082:80 --name cursos_apache_2 php:7.4-apache Essa opção apenas cria um container com os mesmos compartilhamentos. As aplicações personalizadas na imagem não são importadas. Podemos criar o container utilizando outra imagem também (diferente da do container original).
Aula 12 - Linkando containers na prática
Para entender como fazer a comunicação entre containers vamos criar
um container com uma instancia do MySQL.
Para criarmos um container MySQL devemos utilizar a opção -e que serve para setar variáveis de ambiente. No nosso caso vamos setar os dados de usuário do MySQL.
$ docker run --name mysql_server -e MYSQL_ROOT_PASSWORD=aczf0704 -e MYSQL_DATABASE=wordpress -d -p 3308:3306 mysql:8.0.28 No exemplo criamos um container com um banco de dados já definido e utilizando a versão 8.0.28. PAra informações sobre as variáveis que podem ser setadas e as tags que podem ser utilizadas consultar o repositório do container em docker hub - MySQL Para nosso exemplo vamos também utilizar uma imagem do Wordpress. Para a configuração do container do Wordpress ver o repositório docker hub - Wordpress. Para criar o container devemos indicar qual o container que será linkado com o MySQL. $ docker run --name wordpress --link mysql_server:mysql -d -p 8085:80 wordpress Para acessar a configuração inicial do Wordpress devemos acessar o container com o endereço:
endereço_container:porta/wp-admin/setup-config.php
Não consegui conectar o container Wordpress com o container MySQL muito embora o caminho para o container do MySQL esteja devidamente configurado no arquivo hosts do container Wordpress. Testar depois com outras versões de imagem.

Para criarmos um container MySQL devemos utilizar a opção -e que serve para setar variáveis de ambiente. No nosso caso vamos setar os dados de usuário do MySQL.
$ docker run --name mysql_server -e MYSQL_ROOT_PASSWORD=aczf0704 -e MYSQL_DATABASE=wordpress -d -p 3308:3306 mysql:8.0.28 No exemplo criamos um container com um banco de dados já definido e utilizando a versão 8.0.28. PAra informações sobre as variáveis que podem ser setadas e as tags que podem ser utilizadas consultar o repositório do container em docker hub - MySQL Para nosso exemplo vamos também utilizar uma imagem do Wordpress. Para a configuração do container do Wordpress ver o repositório docker hub - Wordpress. Para criar o container devemos indicar qual o container que será linkado com o MySQL. $ docker run --name wordpress --link mysql_server:mysql -d -p 8085:80 wordpress Para acessar a configuração inicial do Wordpress devemos acessar o container com o endereço:
endereço_container:porta/wp-admin/setup-config.php
Não consegui conectar o container Wordpress com o container MySQL muito embora o caminho para o container do MySQL esteja devidamente configurado no arquivo hosts do container Wordpress. Testar depois com outras versões de imagem.
Aula 13 - Dockerfile
Podemos criar um arquivo Dockerfile que terá a estrutura de
criação de uma imagem, como se fosse um script Linux. Passamos os
comandos necessários para a instalação, configuração e execução de
serviços de modo a criar uma imagem personalizada e automatizada.
Com o arquivo Dockerfile criado executamos utilizando o comando:
docker build -t imagem_personal:1.0 . Esse comando cria uma imagem do container configurado que pode ser executado quantas vezes for necessário.

Com o arquivo Dockerfile criado executamos utilizando o comando:
docker build -t imagem_personal:1.0 . Esse comando cria uma imagem do container configurado que pode ser executado quantas vezes for necessário.
Aula 14 - Docker-Compose
Com o Docker-Compose criamos um script para iniciar um
conjunto de containers com todos os parametros, diretórios e
volumes.
No exemplo iniciamos uma conjunto de containers com DB e Wordpress. Para executar o arquivo docker.yml devemos executar o comando:
$ docker-compose.exe up -d

No exemplo iniciamos uma conjunto de containers com DB e Wordpress. Para executar o arquivo docker.yml devemos executar o comando:
$ docker-compose.exe up -d