Docker

Aqui na Dev Samurai nós utilizamos o Docker em desenvolvimento para instalar imagens de:

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

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

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

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

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