Guia Prático de Implantação de Infraestrutura com Docker

Implatnação do Banco de Dados MySQL

Para inicializar um container MySQL com persistência de dados e configurações customizadas, utilize a seguinte estrutura:

docker run -d \
  --name db-mysql-instance \
  -p 3306:3306 \
  -e TZ=America/Sao_Paulo \
  -e MYSQL_ROOT_PASSWORD=root_secure_pwd \
  -v $PWD/mysql/storage:/var/lib/mysql \
  -v $PWD/mysql/config:/etc/mysql/conf.d \
  -v $PWD/mysql/scripts:/docker-entrypoint-initdb.d \
  mysql:8.0

Configuração do Servidor Web Nginx

O comando abaixo mapeia os volumes para o conteúdo estático e o arquivo de configuração principal, integrando o container a uma rede específica:

docker run -d \
    --name web-proxy-server \
    -p 80:80 \
    -p 443:443 \
    -v /opt/nginx/html:/usr/share/nginx/html \
    -v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf \
    --network net-app-cluster \
    nginx:latest

Mensageria com RabbitMQ

Este comando levanta o RabbitMQ com o plugin de gerenciamento ativado e define credenciais administrativas:

docker run -d \
 --name mq-broker \
 --hostname mq-node-01 \
 -e RABBITMQ_DEFAULT_USER=admin_user \
 -e RABBITMQ_DEFAULT_PASS=admin_pass \
 -p 5672:5672 \
 -p 15672:15672 \
 rabbitmq:3-management

Servidor de Transação Seata

Antes de executar, certifique-se de que o arquivo application.yml no volume mapeado contenha as credenicais corretas do banco de dados.

docker run -d --name seata-server \
-p 8099:8099 \
-p 7099:7099 \
-e SEATA_IP=172.17.0.1 \
-v ./seata_config:/seata-server/resources \
--privileged=true \
--network net-services \
seataio/seata-server:1.5.2

Instalação e Configuração do MongoDB

Para o MongoDB, o processo envolve a criação do container seguida pela configuração inicial de usuários:

# Download da imagem
docker pull mongo:4.4

# Criação do container com autenticação
docker run --name mongo-db-container -p 27017:27017 -v mongo_vol:/data/db -d mongo:4.4 --auth

# Acesso ao shell para criação de usuários
docker exec -it mongo-db-container mongo admin

# Comandos internos do MongoDB:
# db.createUser({ user: 'admin', pwd: 'password123', roles: [ { role: 'root', db: 'admin' } ] })
# db.auth('admin', 'password123')

Stack ElasticSearch e Kibana com IK Analyzer

Primeiro, crie uma rede para a comunicação entre os serviços:

docker network create search-net

Implante o ElasticSearch:

docker run -d \
    --name es-engine \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es_data:/usr/share/elasticsearch/data \
    -v es_plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network search-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

Implante o Kibana:

docker run -d \
--name kibana-dashboard \
-e ELASTICSEARCH_HOSTS=http://es-engine:9200 \
--network search-net \
-p 5601:5601 \
kibana:7.12.1

Para instalar o plugin IK Analyzer:

docker exec -it es-engine /bin/bash -c "./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip"
docker restart es-engine

Central de Configuração Nacos

A implantação do Nacos requer a definição de variáveis de ambiente, preferencialmente via arquivo .env:

docker run -d \
--name nacos-standalone \
--env-file ./nacos/env_vars.env \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--restart=unless-stopped \
nacos/nacos-server:v2.1.0-slim

Storage de Objetos MinIO

Configuração do MinIO para armazenamento de arquivos com console administrativo:

# Preparação dos diretórios locais
mkdir -p /mnt/minio/config /mnt/minio/data

# Execução do container
docker run -d \
  -p 9000:9000 -p 9090:9090 \
  --name minio-server \
  --restart=always \
  -e "MINIO_ROOT_USER=storage_admin" \
  -e "MINIO_ROOT_PASSWORD=storage_secret" \
  -v /mnt/minio/data:/data \
  -v /mnt/minio/config:/root/.minio \
  minio/minio server /data --console-address ":9090"

Agendador de Tarefas XXL-JOB

Para o XXL-JOB, passamos as configurações do banco de dados diretamente via parâmetros de inicialização do Spring:

docker run -d \
  --name scheduler-xxl-job \
  -p 8088:8080 \
  -e PARAMS="--spring.datasource.url=jdbc:mysql://db-mysql-instance:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&useSSL=false \
    --spring.datasource.username=root \
    --spring.datasource.password=root_secure_pwd" \
  xuxueli/xxl-job-admin:2.3.1

Tags: Docker MySQL nginx RabbitMQ elasticsearch

Publicado em 6-18 19:21