Olá estudantes.
Vamos aprender um pouquinho sobre docker e com um pequeno projeto.
Então mãos a obra!
Vamos lá.
Optei por criar as maquinas virtuais no virtualbox.
Isso pode ser um pouco custoso se não tiver uma maquina potente.
Mas para o objetivo proposto vai servir bem.
Sinta-se a vontade para utilizar o serviço EC2 da AWS mas cuidado com as cobranças e não ultrapassar o limite free...
Preparando as máquinas virtuais
Primeiro, crie 3 máquinas virtuais no VirtualBox.
Aqui está uma sugestão de configuração para cada uma:
- Servidor de Arquivos: Será usado para armazenar arquivos que podem ser acessados por outros microserviços.
- Servidor Web: Este servidor hospedará um servidor web (como o Apache ou Nginx).
- Servidor de Dados: Pode ser usado para um banco de dados como MySQL, PostgreSQL ou MongoDB.
Cada máquina vai ter o Ubuntu instalado.
Vamos usar a versão 22.04 LTS, que são estáveis e bem suportadas.
Instalando o Docker no Ubuntu
Em cada uma das máquinas virtuais (servidor de arquivos, web e dados), instale o Docker.
Aqui está o procedimento de instalação do Docker no Ubuntu.
Atualize o sistema:
sudo apt update && sudo apt upgrade -y
Instale pacotes necessários:
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
Adicione a chave GPG oficial do Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Adicione o repositório do Docker:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Atualize novamente os pacotes:
sudo apt update
Instale o Docker:
sudo apt install docker-ce -y
Verifique se o Docker foi instalado corretamente:
sudo systemctl start docker
sudo systemctl enable docker
docker --version
Agora, o Docker está instalado e funcionando em todas as suas máquinas virtuais.
Instalando o Docker Compose
O Docker Compose é uma ferramenta para definir e rodar aplicativos multi-containers.
Para usar o Docker Compose, siga os seguintes passos:
Baixe o Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Dê permissão de execução:
sudo chmod +x /usr/local/bin/docker-compose
Verifique a instalação:
docker-compose --version
Criando a estrutura de microserviços
Agora que você tem o Docker e o Docker Compose instalados, vamos criar a estrutura de microserviços.
Vamos usar um Docker Compose para orquestrar os contêineres entre os 3 servidores.
Primeiro, crie um diretório para o seu projeto em cada servidor.
Vamos supor que você esteja na máquina do Servidor Web.
Crie a estrutura do projeto e o arquivo docker-compose.yml
No servidor de arquivos (Servidor 1)
Crie um diretório para o projeto e o arquivo Docker Compose:
mkdir ~/servidor-arquivos
cd ~/servidor-arquivos
nano docker-compose.yml
Adicione o seguinte conteúdo ao arquivo docker-compose.yml para criar um contêiner de servidor de arquivos com o Samba (servidor de arquivos):
version: '3'
services:
samba:
image: dperson/samba
container_name: servidor_arquivos
environment:
- USER=usuario
- PASS=senha
- SHARENAME=compartilhamento
ports:
- "139:139"
- "445:445"
volumes:
- ./dados:/mnt/data
restart: always
No servidor web (Servidor 2)
Crie um diretório para o servidor web e o arquivo Docker Compose:
mkdir ~/servidor-web
cd ~/servidor-web
nano docker-compose.yml
Adicione o conteúdo abaixo para criar um servidor web com Nginx:
version: '3'
services:
nginx:
image: nginx:latest
container_name: servidor_web
volumes:
- ./site:/usr/share/nginx/html
ports:
- "80:80"
depends_on:
- servidor_arquivos
restart: always
Aqui, o Nginx vai servir o conteúdo de um diretório site, mas você pode configurar para que ele também consuma dados do servidor de arquivos se necessário.
No servidor de dados (Servidor 3)
Crie um diretório para o servidor de dados e o arquivo Docker Compose:
mkdir ~/servidor-dados
cd ~/servidor-dados
nano docker-compose.yml
Adicione o seguinte conteúdo para criar um banco de dados MySQL:
version: '3'
services:
db:
image: mysql:5.7
container_name: servidor_dados
environment:
MYSQL_ROOT_PASSWORD: senha
MYSQL_DATABASE: banco_de_dados
volumes:
- ./data:/var/lib/mysql
ports:
- "3306:3306"
restart: always
continua...