👉 Repositório relacionado ao artigo Docker na prática.
- Contexto
- Docker com Banco de dados Mysql
- Docker com Backend Python
- Docker Compose
- Desafio
- Referências
Esse projeto é composto de 2 módulos:
- um backend em Python usando FastAPI na pasta
backend
. - as configurações do banco de dados usando mysql na pasta
mysql
.
Na pasta mysql
do repositório, existe um arquivo Dockerfile a partir do qual podemos contruir uma imagem do nosso database
:
docker build -t company-database .
Conferir que a imagem foi gerada:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
company-database latest 89b38d78dc16 20 seconds ago 431MB
docker run -d -p 3306:3306 --name company-database -e MYSQL_ROOT_PASSWORD=RootPassword company-database
Será possível consultar que o container está up
usando o comando docker ps
.
docker exec -it company-database bash
mysql -uroot -p
Enter password: (RootPassword)
Nota: Você pode rodar o comando exit
em qualquer momento para sair do mysql ou do container do Docker.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Company |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use Company;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-------------------+
| Tables_in_company |
+-------------------+
| employees |
+-------------------+
1 row in set (0.00 sec)
mysql> show columns from employees;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| first_name | varchar(25) | YES | | NULL | |
| last_name | varchar(25) | YES | | NULL | |
| department | varchar(15) | YES | | NULL | |
| email | varchar(50) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> select * from employees;
+------------+-----------+------------+-----------------------+
| first_name | last_name | department | email |
+------------+-----------+------------+-----------------------+
| John | Doe | IT | johndoe@mail.com |
| Bill | Campbell | HR | billcampbell@mail.com |
+------------+-----------+------------+-----------------------+
2 rows in set (0.01 sec)
Após ter saido do container (usando o comando exit
), ele continuará Up
até você parar-lo.
Confere usando o comando docker ps
que aparece ainda um container usando a imagem e o nome company-database
.
Para parar-lo, use o comando docker kill <CONTAINER_ID>
(após selecionar o CONTAINER ID que deseje parar).
Através do comando docker ps -a
agora, é possível conferir que o estado do container é Exited
.
Para remover-lo definitivamente dessa lista e conseguir subir um novo container usando o mesmo nome, basta executar docker rm <CONTAINER_ID>
.
Após isso, até a lista retornada pelo comando docker ps -a
estará vazia.
Na pasta backend
do repositório, existe um arquivo Dockerfile a partir do qual podemos contruir uma imagem do nosso backend
:
docker build -t company-backend .
Conferir que a imagem foi gerada:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
company-backend latest 89b38d78dc16 20 seconds ago 431MB
docker run -d -p 80:80 --name company-backend company-backend
Abrindo o navegador, daria para acessar a página inicial do app na URL http://0.0.0.0/ retornando Hello World
.
Já, a URL http://0.0.0.0/employees não funcionaria, como o banco de dados não está configurado.
docker exec -it company-backend bash
Uma vez no container, você pode listar e ver os arquivos que foram inclusos la.
Nota: Você pode rodar o comando exit
em qualquer momento para sair do container.
Da mesma forma que com o container do database, após ter saido do container de backend (usando o comando exit
), ele continuará Up
até você parar-lo.
Confere usando o comando docker ps
que aparece ainda um container usando a imagem e o nome company-backend
.
Para parar-lo, use o comando docker kill <CONTAINER_ID>
(após selecionar o CONTAINER ID que deseje parar).
Através do comando docker ps -a
agora, é possível conferir que o estado do container é Exited
.
Para remover-lo definitivamente dessa lista e conseguir subir um novo container usando o mesmo nome, basta executar docker rm <CONTAINER_ID>
.
Após isso, até a lista retornada pelo comando docker ps -a
estará vazia.
Quando trabalhamos com vários containers, gerenciar a execução deles pode ficar mais complexo. Para isso, temos algumas tecnologias que auxiliam, sendo uma delas o Docker Compose.
Na pasta root
do repositório:
docker-compose up
Obs: Caso algumas portas já estiverem sendo usadas, liste os containers ativos através do comando docker ps
, e após selecionar o CONTAINER ID que deseje parar e execute o comando docker kill <CONTAINER_ID>
Abrindo o navegador, daria para acessar a página inicial do app na URL http://0.0.0.0/ retornando Hello World
.
Também daria agora para acessar a URL http://0.0.0.0/employees com sucesso, que retornaria a lista de employees
presentes no banco.
Para sair do prompt do docker-compose up, use as teclas CTRL + C
.
Isso não vai remover os containers, será ainda possível ver eles usando o comando docker ps -a
.
Para remover os containers, use o seguinte comando:
docker-compose down
Executando o comando docker ps -a
agora, os containers não deveriam mais aparecer.
Agora que entendeu como o Docker e o Docker Compose funcionam, tentem adaptar o código presente nesse projeto usando agora um Backend em Java com JDBC e PostgreSQL.