Docker
Aqui na Dev Samurai nós utilizamos o Docker em desenvolvimento para instalar imagens de:
- Banco de Dados com Postgres e Mongo
- Gerenciamento de fila com Redis
- Testes de envio e recebimento de email com o Mailhog
O Docker ajuda bastante porque esses serviços rodam sobre uma camada Linux sem a necessidade de serem instalados ou emulados na sua máquina.
Além das vantagens de serem serviços idênticos aos que iremos encontrar quando realizarmos o deploy do ambiente.
Instalando
- Windows
- Linux
- MacOS
No Windows a instalação mais comum é o Docker Desktop.
E a vantagem da versão Desktop do Docker é a fornece uma interface de comandos intuitiva.
Para instalar basta acessar a página de instalação, baixar o programa de setup e executar o processo conforme as instruções. Não tem erro!
Para baixar acesse: https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe
Executando
O Docker necessita de estar sendo executado como serviço na sua máquina.
Portanto se você estiver no Windows ou Mac tenha certeza que o Docker Desktop esteja em execução.
No Linux, nós não temos ainda uma versão Desktop, portanto o Docker pode estar sendo executado sem uma indicação visual fácil. Para consultar seu status após instalação execute o comando sudo service docker status
.
Utilizando nos seus projetos
Após a inicialização do serviço no seu sistema operacional, você precisa "subir" as imagens que você escolheu.
Estas imagens são "pacotes" que irão ser executados na camada do Docker.
Atualmente existem milhares de imagens para utilizarmos no nosso desenvolvimento.
E para a nossa necessidade iremos focar no:
- Postgres
- Mongo
- Redis
- Mailhog
As instruções de quais imagens baixar e a forma que elas se comunicam estão no arquivo docker-composer.yml
.
Dica
Para uma melhor organização, o arquivo docker-compose.yml
deve estar dentro da pasta do seu projeto.
O nosso arquivo docker-composer.yml
padrão é o seguinte:
version: "3.1"services: mailhog: image: mailhog/mailhog:latest restart: always ports: - 8003:8025 - 1025:1025
adminmongo: image: mrvautin/adminmongo ports: - 8001:1234 environment: - HOST=0.0.0.0 depends_on: - mongo links: - mongo
pgadmin: image: dpage/pgadmin4 restart: always ports: - 8000:80 volumes: - ./.docker/metabase-data:/metabase-data environment: PGADMIN_DEFAULT_EMAIL: admin@admin.com PGADMIN_DEFAULT_PASSWORD: secret depends_on: - postgres links: - postgres
postgres: image: postgres restart: always ports: - 5432:5432 environment: POSTGRES_DB: develop POSTGRES_USER: postgres POSTGRES_PASSWORD: secret PGDATA: /var/lib/postgresql/data
mongo: image: mongo environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=secret - MONGODB_USER=mongo - MONGODB_PASS=secret - MONGO_DATA_DIR=/data/db - MONGO_LOG_DIR=/dev/null ports: - 27017:27017
redmin: image: sasanrose/phpredmin environment: - PHPREDMIN_DATABASE_REDIS_0_HOST=redis - PHPREDMIN_AUTH_USERNAME=root - PHPREDMIN_AUTH_PASSWORD=secret ports: - "8002:80" depends_on: - redis links: - redis
redis: image: redis restart: always ports: - 6379:6379
Após criar o arquivo docker-composer.yml
na pasta raiz do seu projeto execute o seguinte comando no terminal ou prompt de comando:
docker-compose up
Você poderá verificar que os serviços irão "subir" e as mensagens de sistema irão ser exibidas no terminal.
Senhas e acessos
Cada serviço utilizado no docker-compose está pré configurado com suas próprias credenciais, veja abaixo a configuração para cada um:
Postgres
PGAdmin
- Endereço: http://localhost:8000
- Email:
admin@admin.com
- Senha:
secret
DICA
Depois que você acessou o PGAdmin, você deve criar uma conexão utilizando o nome de host para postgres.
Os containers Docker, não enxergam da mesma forma os endereços IP e você precisa colocar como endereço o nome do container.
Serviço
- Host:
localhost
- Porta:
5432
- Banco:
develop
- Usuário:
postgres
- Senha:
secret
Mongo
AdminMongo
- Endereço: http://localhost:8001
DICA
Depois que você acessou o AdminMongo, você deve criar uma conexão utilizando o nome de host para mongo.
Os containers Docker, não enxergam da mesma forma os endereços IP e você precisa colocar como endereço o nome do container.
Serviço
- Host:
localhost
- Porta:
27017
- Usuário:
root
- Senha:
secret
Redis
Redmin
- Endereço: http://localhost:8002
DICA
Depois que você acessou o Redmin, você deve criar uma conexão utilizando o nome de host para redis.
Os containers Docker, não enxergam da mesma forma os endereços IP e você precisa colocar como endereço o nome do container.
Serviço
- Host:
localhost
- Porta:
6379
Mailhog
- Painel: http://localhost:8003
- SMTP:
1025