Я пытаюсь контейнировать интерфейс моего сайта и автоматизировать его развертывание. Моя цель состоит в том, чтобы иметь возможность генерировать и размещать новое изображение при отправке изменения, и чтобы сервер автоматически извлекал его и перезапускал контейнер. Вот шаги, которые я предпринимаю:
Я создаю образ, сначала собирая приложение Node, а затем объединяя дистрибутив и файлы конфигурации nginx в последний linuxserver / letsencrypt изображение. Это Dockerfile:
# Use the NodeJS image as builder
FROM node:alpine AS builder
# Create the workspace
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Copy the package file and source code
COPY package.json /usr/src/app
COPY . ./
# Install dependencies
RUN npm install
# Build the application
RUN npm run build
# The nginx server, this builds the final image
FROM linuxserver/letsencrypt
# Copy the nginx configuration
COPY ./config/nginx.conf /config
# Copy the output of the builder
COPY --from=builder /usr/src/app/dist /config/www
# Inform Docker to listen on port 443 and 80
EXPOSE 443 80
Это изображение загружено в реестр пакетов GitHub , и я запрашиваю обновления, используя Сторожевая башня .
Изображение запускается с использованием этого docker -компонентного файла:
version: "3"
services:
...
frontend:
image: [IMAGE]
container_name: frontend
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=[TIMEZONE]
- URL=[URL]
- SUBDOMAINS=www,
- VALIDATION=http
ports:
- 443:443
- 80:80
volumes:
- ./frontend:/config
restart: unless-stopped
...
Проблема заключается в том, что файлы, которые были упакованы в изображение, использующее инструкцию COPY
, перезаписывается, когда я использую следующую строку в моем docker -compose:
volumes:
- ./frontend:/config
Если я удаляю этот раздел из моего docker -compose файла, все работает нормально Однако это не решение, потому что в этой папке хранятся важные данные.
Я прочитал, что при монтировании тома полностью перезаписываются все предыдущие данные, однако мне нравится тот факт, что я могу легко загрузить изображение на свой сервер и уже встроить все необходимые файлы. Есть ли что-нибудь, что я могу сделать, чтобы исправить мою проблему, или я неправильно использую / неправильно понимаю docker images?
Я попытался установить громкость только для чтения, как предложено здесь , однако это не работал и вместо этого заставлял изображение постоянно останавливаться и перезапускаться.
Я также кратко прочитал о bind mounts и мне интересно, пригодятся ли они.