1
resposta

Desenvolvimento com Docker

Eu estou desenvolvendo uma aplicação web com swift (vapor) para estudar.

Minha arquitetura é bem parecida com a do curso: nginx, 3 servers vapor, redis (pubsub entre os 3 servers).

Eu tenho algumas dúvidas que me surgiram quando eu terminei o curso:

Primeira dúvida

No curso, o instrutor usa o docker-compose build para fazer o copy do local para o container do docker, para então poder rodar o container.

Eu fiz um pouco diferente, coloquei o command: ["sh", "-c", "vapor build --debug && vapor run --env=development"]

Dessa forma, eu posso desenvolver e apenas rodar docker-compose up para build do que eu acabei de desenvolver e já rodar a aplicação.

Existe algum problema em fazer dessa forma? O meu container está super vazio, ele não tem nada da minha aplicação instalado nele quando eu faço o build.

Segunda dúvida

Se a minha imagem não tem nada referente à minha aplicação, como que eu faço o deploy do meu código para o docker cloud? Eu preciso criar uma imagem que faz o build antes? Não existe nada parecido com o heroku (git push heroku master)?

Terceira dúvida

Existe algum tutorial que vocês conheçam para rodar o mysql no docker? Dos que eu tentei eu tive problemas:

  • image: mysql/mysql-server -> ele fica travado enquanto tenta subir o banco.
  • image: mysql -> Até funciona, mas eu não consigo conectar com o mysql pelo terminal do mac.

Em nenhum dos dois eu consigo usar o banco na minha aplicação swift por que a conexão sempre é recusada.

Nos dois eu uso essas configs:

    # image: mysql/mysql-server
    image: mysql
    container_name: db_test
    ports:
      - "3306:3306"
    volumes:
      - ./mysql_data:/var/lib/mysql
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=true
      - MYSQL_DATABASE=db_test
      - MYSQL_ROOT_HOST="172.17.0.1"
      - MYSQL_ROOT_PASSWORD=test
      - MYSQL_USER=user_test
      - MYSQL_PASSWORD=test_pass
    networks:
      - "production_network"

Quarta dúvida

O server side em swift demora um pouco para compilar e, como estou com 3 servers, eu gostaria de compilar apenas um e os outros usariam a mesma coisa.

Estou compartilhando a pasta de compilação entre os 3 servers usando o mesmo volume.

O meu primeiro server roda o comando que eu mostrei acima, e os outros 2 rodam apenas command: ["sh", "-c", "vapor run --env=development"]

Tentei usar o health check e o depends_on, mas o docker não espera o primeiro server terminar de fazer o build para poder iniciar os outros 2. Tem alguma coisa que eu deixei passar nesse caso?

1 resposta

Olá Rafael, tudo bem?

Com relação a primeira dúvida, eu procurei na documentação do Docker e não encontrei nada que pudesse contra indicar essa configuração. Dessa forma, particularmente não vejo problema em seguir a configuração dessa forma.

Com relação a segunda dúvida me parece não ser possível, isso porque pela documentação, o Docker Cloud precisa de uma imagem para poder rodar, segue trecho na documentação: "Docker Cloud uses Docker Hub as its native registry for storing both public and private repositories. Once you push your IMAGES to Docker Hub, they will be available in Docker Cloud."

Sobre a terceira dúvida, no curso do Kubernetes a primeira aula, mostraria como utilizar um container Docker com o MySQL. https://cursos.alura.com.br/course/kubernetes/task/30053

Com relação a quarta dúvida, confesso que não sei. Vou pesquisar mais detalhes na documentação para ver se encontro algo.

Abs