У меня есть приложение React/Node.js, работающее на одном сервере с использованием docker-compose. Я пытаюсь добиться развертывания с нулевым временем простоя для моего реагирующего приложения. Прямо сейчас процесс выполняет сборку веб-пакета (заменяет файлы в моей папке dist), а затем докер вниз и докер. Весь этот процесс занимает около 2-3 минут.
Я понял, что с помощью docker-compose я могу масштабировать свой контейнер вверх/вниз, но я не уверен, как отправить свой код только в 1 из них, перестроить веб-пакет и перезапустить его npm, а затем убить другие контейнеры. Я действительно не хочу использовать Kubernetes/Swarm или Openshift, так как это немного излишне. Мне интересно, добился ли кто-нибудь еще чего-то подобного.
Мой docker-compose выглядит так:
node:
build:
context: ./env/docker/node
args:
- PROJECT_ROOT=/var/www/app
image: react_app:rapp_node
command: "npm run prod"
expose:
- "3333"
networks:
- react-net
volumes_from:
- volumes_source
tty: false
nginx:
env_file:
- ".env"
build:
context: ./env/docker/nginx
volumes_from:
- volumes_source
volumes:
- ./env/data/logs/nginx/:/var/log/nginx
- ./env/docker/nginx/sites/node.template:/etc/nginx/node.template
networks:
- react-net
- nginx-proxy
environment:
NGINX_HOST: ${NGINX_HOST}
VIRTUAL_HOST: ${NGINX_VIRTUAL_HOST}
LETSENCRYPT_HOST: ${NGINX_VIRTUAL_HOST}
ESC: $$
links:
- node:node
command: /bin/sh -c "envsubst < /etc/nginx/node.template > /etc/nginx/sites-available/node.conf && nginx -g 'daemon off;'"
volumes_source:
image: tianon/true
volumes:
- ./app:/var/www/app
А мой nginx примерно такой:
server {
server_name www.${NGINX_HOST};
return 301 ${ESC}scheme://${NGINX_HOST}${ESC}request_uri;
}
server {
listen 80;
server_name ${NGINX_HOST};
root /var/www/app;
location / {
proxy_pass http://node:3333;
proxy_http_version 1.1;
proxy_set_header Upgrade ${ESC}http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host ${ESC}host;
proxy_cache_bypass ${ESC}http_upgrade;
}
}
down
, вы можете простоbuild
изображения, а затемdocker-compose up -d
, и это создаст только эти новые объекты - person Mazel Tov   schedule 13.03.2018docker-compose restart node
, но если вы сделаетеdown
, он удалит сеть, остановит все контейнеры и т. д. - person Mazel Tov   schedule 13.03.2018foldername_container_1
, но ваш nginx всегда случайным образом выбирает один из этих контейнеров с именем node, поэтому, если вы получите доступ к узлу во время перезапуска, он выдаст ошибку, я думаю - person Mazel Tov   schedule 13.03.2018