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?
 
            