Создать файл Docker для клиента и сервера - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть структура папок, подобная этой: root / server root / frontend root / start.sh

где start.sh примерно такой:

#!/bin/sh

cd server
npm run build;

cd ../client;
npm run build;
mv -R build ../server/client;

cd ../server
npm run start;

, поэтому я собираюсервер, затем клиент, я перемещаю файл, созданный клиентом, внутри моего серверного приложения и запускаю приложение ... есть ли способ сделать что-то подобное с образом докера?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

это, вероятно, похоже на проблему, с которой вы столкнулись:

FROM node:alpine as buildjob_frontend
COPY web/package.json .
COPY web/yarn.lock .
RUN yarn install
COPY web/ .
RUN yarn build

FROM golang:alpine as buildjob_go
RUN mkdir -p /go/src/github.com/marhaupe/go-react-bootstrap && \
  mkdir -p /src/bin/ && \
  apk update && \
  apk add git && \
  apk add make
WORKDIR /go/src/github.com/marhaupe/go-react-bootstrap/
COPY . .
RUN GOOS=linux make build-server && mv serverbin /src/bin/app

FROM alpine:latest
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/* && \
  mkdir -p /src/web/build
COPY --from=buildjob_frontend /build /src/web/build
COPY --from=buildjob_go /src/bin/app /src/
WORKDIR /src
EXPOSE 3000
CMD ["./app"]

Создает внешний интерфейс, создает внутренний и копирует бинарный файл и папку сборки внешнего интерфейса в альпийское изображение.Я могу связать вас с полным репо, если вам нужно увидеть, как все связано друг с другом

0 голосов
/ 27 ноября 2018

Да, большую часть того, что вы можете сделать с помощью скрипта .sh, можно сделать построением образа докера.Однако образы докеров часто следуют принципу единой ответчивости, поэтому я бы не совмещал FE и BE в одном изображении (если это два разных приложения), но вместо этого я бы сделал 2 разных, а затем использовал бы docker compose ,вы сможете управлять своим мультиконтейнерным приложением

давайте рассмотрим очень простой пример

Backend: (Dockerfile в каталоге сервера)

FROM node:xxx (use your development version)
WORKDIR /server
COPY . /server/
RUN npm run build

EXPOSE 3000

CMD npm start

Frontend: (Dockerfileв каталоге клиента)

FROM node:xxx (use your development version)
WORKDIR /client
COPY . /client/

RUN npm run build
EXPOSE 80

CMD npm start

docker compose (в родительском каталоге сервера и клиента

version: 3
services:
  server:
    build: ./server
    container_name: server
    ports:
      - 3000:3000
  client:
    build: ./client
    container_name: client
    ports:
      -80:80

, затем с помощью docker-compose up --build вы можете собирать и запускать свои контейнеры вв любой момент см. документацию по другим командам (остановка, уничтожение, удаление ecc)

ПРИМЕЧАНИЕ: я написал все «от руки», возможен опечатка или неправильный синтаксис. Извините, я исправлю!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...