Стандартный способ сделать это - скопировать ваш код в изображение .Не связывайте хост-папки, содержащие ваш код;вместо этого используйте директиву Dockerfile COPY
для копирования в код приложения (а на скомпилированном языке используйте команду RUN
для его сборки).Например, ваш контейнер PHP может иметь соответствующий Dockerfile, который выглядит следующим образом (ссылаясь на этот базовый Dockerfile )
FROM php-fpm:5.6
# Base Dockerfile defines a sensible WORKDIR
COPY . .
# Base Dockerfile sets EXPOSE 9000
# Base Dockerfile defines ENTRYPOINT, CMD
Тогда ваш docker-compose.yml
скажет, в части
version: '3'
service:
phpfpm56:
build: .
image: me/phpfpm56:2019-04-30
# No other settings
И тогда ваша конфигурация nginx скажет частично (используя имя службы Docker Compose в качестве имени хоста)
fastcgi_pass phpfpm56:9000
Если вы используете это в работе, вам нужно закомментировать строки build:
Я думаю.
Если вы чрезвычайно настроены на рабочий процесс, в котором нет имени хоста, кроме localhost
, и вам не нужно перестраивать образы Docker для обновления кода, вам по крайней мере необходимо перезапустить (некоторые из) ваши контейнеры после того, как вы сделали push-код.
docker-compose stop app phpfpm56
docker-compose up -d
Вы можете воспользоваться инструментом автоматизации системы, таким как Ansible или Chef, для автоматизации механизма push-кода.Эти же инструменты могут также просто установить nginx и PHP, и если вы пытаетесь избежать последовательности сборки образа Docker, у вас может быть более простая система установки и развертывания, выполняющая серверы непосредственно на хосте.