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?