Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/guillaumefalourd/docker-mysql-python

POC usando Docker com MySQL e Python (FastAPI) đŸ‡§đŸ‡·
https://github.com/guillaumefalourd/docker-mysql-python

beginner docker docker-compose fastapi mysql python

Last synced: about 1 month ago
JSON representation

POC usando Docker com MySQL e Python (FastAPI) đŸ‡§đŸ‡·

Awesome Lists containing this project

README

        

# Docker Mysql Python

👉 Repositório relacionado ao artigo [Docker na prática](https://www.zup.com.br/blog/docker-na-pratica).

## Index

- [Contexto](https://github.com/GuillaumeFalourd/docker-mysql-python/blob/main/README.md#-contexto)
- [Docker com Banco de dados Mysql](https://github.com/GuillaumeFalourd/docker-mysql-python/blob/main/README.md#-docker-com-banco-de-dados-mysql)
- [Docker com Backend Python](https://github.com/GuillaumeFalourd/docker-mysql-python/blob/main/README.md#-docker-com-backend-python)
- [Docker Compose](https://github.com/GuillaumeFalourd/docker-mysql-python/blob/main/README.md#-docker-compose)
- [Desafio](https://github.com/GuillaumeFalourd/docker-mysql-python/blob/main/README.md#-desafio)
- [ReferĂȘncias](https://github.com/GuillaumeFalourd/docker-mysql-python/blob/main/README.md#-refer%C3%AAncias)

## 📋 Contexto

Esse projeto Ă© composto de 2 mĂłdulos:
- um backend em Python usando [FastAPI](https://fastapi.tiangolo.com/) na pasta `backend`.
- as configuraçÔes do banco de dados usando mysql na pasta `mysql`.

## 🗃 Docker com Banco de dados Mysql

### 1.1 Construir a imagem

Na pasta `mysql` do repositĂłrio, existe um arquivo [Dockerfile](https://github.com/GuillaumeFalourd/docker-mysql-python/blob/main/mysql/Dockerfile) a partir do qual podemos contruir uma imagem do nosso `database`:

```bash
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
```

### 1.2 Rodando o Container

```bash
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`.

### 1.3 Acesso ao Banco

```bash
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._

#### 1.3.1 Acessar database

```bash
mysql> show databases;

+--------------------+
| Database |
+--------------------+
| information_schema |
| Company |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
```

#### 1.3.2 Acessar database company

```
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
```

#### 1.3.3 Mostrar Tabelas

```
mysql> show tables;

+-------------------+
| Tables_in_company |
+-------------------+
| employees |
+-------------------+
1 row in set (0.00 sec)
```

#### 1.3.4 Mostrar colunas tabela employees

```
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)
```

#### 1.3.5 Mostrar conteĂșdo tabela employees

```
mysql> select * from employees;
+------------+-----------+------------+-----------------------+
| first_name | last_name | department | email |
+------------+-----------+------------+-----------------------+
| John | Doe | IT | [email protected] |
| Bill | Campbell | HR | [email protected] |
+------------+-----------+------------+-----------------------+
2 rows in set (0.01 sec)
```

### 1.4 Desmontar o container

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 ` (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 `.

Após isso, até a lista retornada pelo comando `docker ps -a` estarå vazia.

## 🐍 Docker com Backend Python

### 1.1 Construir a imagem

Na pasta `backend` do repositĂłrio, existe um arquivo [Dockerfile](https://github.com/GuillaumeFalourd/docker-mysql-python/blob/main/backend/Dockerfile) a partir do qual podemos contruir uma imagem do nosso `backend`:

```bash
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
```

### 1.2 Rodando o Container

```bash
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/](http://0.0.0.0/) retornando `Hello World`.

JĂĄ, a URL [http://0.0.0.0/employees](http://0.0.0.0/employees) nĂŁo funcionaria, como o banco de dados nĂŁo estĂĄ configurado.

### 1.3 Acessar o app

```bash
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._

### 1.4 Desmontar o 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 ` (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 `.

Após isso, até a lista retornada pelo comando `docker ps -a` estarå vazia.

## 🐍🗃 Docker Compose

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**.

### 1. Subir o docker-compose

Na pasta `root` do repositĂłrio:

```bash
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 `_

Abrindo o navegador, daria para acessar a pĂĄgina inicial do app na URL [http://0.0.0.0/](http://0.0.0.0/) retornando `Hello World`.

Também daria agora para acessar a URL [http://0.0.0.0/employees](http://0.0.0.0/employees) com sucesso, que retornaria a lista de `employees` presentes no banco.

### 2. Derrubar o docker-compose

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:

```bash
docker-compose down
```

Executando o comando `docker ps -a` agora, os containers nĂŁo deveriam mais aparecer.

## 🛠 Desafio

### Java & PostgreSQL

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**.

## 📚 ReferĂȘncias

- [Docker para desenvolvedores](https://github.com/gomex/docker-para-desenvolvedores)
- [Descomplicando Docker](https://github.com/badtuxx/DescomplicandoDocker)
- [Docker, tudo que vocĂȘ precisa saber](https://www.zup.com.br/blog/o-que-e-docker-e-conteiner)
- [Docker DCA - Playlist Youtube](https://www.youtube.com/playlist?list=PL4ESbIHXST_TJ4TvoXezA0UssP1hYbP9_)
- [Docker DCA - Alura](https://www.alura.com.br/formacao-docker-dca)