Вы знаете, что сейчас я пытаюсь создать сеть в одном контейнере докеров и использовать объем, чтобы получить dist после сборки, и запустить контейнер nginx для развертывания папки dist. Это сценарий docker-compose:

version: '3'
services:
  jump-ui-build:
    image: node:12.13.0
    volumes:
      - ~/jump-ui:/usr/local/app
    working_dir: /usr/local/app
    ports:
      - 8082:8082
    command: bash -c "npm install && npm run build:test"

  nginx:
    restart: always
    image: nginx:1.16.1
    ports: 
      - 80:80
      - 443:443
    volumes:
      - ~/jump-ui/dist:/usr/share/nginx/html
      - ~/nginx-log:/var/log/nginx
    depends_on:
      - jump-ui-build

Служба jump-ui-build запускается и успешно завершается и генерирует папку dist в папке jump-ui, но когда я пытаюсь "docker exec -it" получить доступ к службе nginx и переключиться на / usr / share / nginx / html, это папка empy, поэтому мне нужно вручную запустить службу jump-ui-build и запустить службу nginx, и она успешно развернется?

Есть ли способ изменить сценарий yum, который я могу успешно создавать и автоматически развертывать в Интернете?

1
colapuro 28 Окт 2019 в 07:20
2
Не уверен, что вам нужен docker-compose для чего-то подобного. Что вы можете сделать, так это использовать многоэтапную сборку с использованием нескольких образы докеров для сборки, а затем развертывания. См. этот пример из Vue ~ cli.vuejs.org/guide/deployment.html# докер-nginx
 – 
Phil
28 Окт 2019 в 07:24
Я читал эту страницу раньше, но вы знаете, что учебник не является моим ожиданием, он собирается и развертывается в одном контейнере, я просто хочу разделить их на два контейнера докеров, один для сборки, другой для развертывания.
 – 
colapuro
28 Окт 2019 в 07:28

1 ответ

Лучший ответ

Вы можете использовать multistage Dockerfile:

FROM node:12.13.0
WORKDIR /usr/local/app
RUN bash -c "npm install && npm run build:test"

FROM nginx:1.16.1
COPY --from=0 /usr/local/app /usr/share/nginx/html
EXPOSE 80 443

Таким образом у вас получится одно изображение nginx, создайте его:

docker build -t my_image .

Ваше сочинение должно быть:

nginx:
    restart: always
    image: my_image
    ports: 
      - 80:80
      - 443:443
    volumes:
      - $HOME/nginx-log:/var/log/nginx
2
LinPy 28 Окт 2019 в 09:45
Что мне делать, чтобы поместить «docker build -t» в docker compose, прежде чем я выполню docker compose up -d?
 – 
colapuro
28 Окт 2019 в 12:14
Вы можете создать файл докеры в своей композиции, если вы не хотите запускать образ, используя директиву build: вместо image:, а затем используйте docker-compose up -d --build
 – 
LinPy
28 Окт 2019 в 12:15
Я имею в виду, что я хочу использовать один скрипт docker-compose up -d для запуска образа, последовательность заключается в том, чтобы сначала создать сеть, а затем развернуть, используйте только один скрипт, спасибо!
 – 
colapuro
28 Окт 2019 в 12:28
Для лучшего чтения: вы можете написать FROM node:12.13.0 AS builder, а затем COPY --from=builder
 – 
RoBeaToZ
28 Окт 2019 в 16:01