繁体   English   中英

为客户端和服务器创建 docker 文件

[英]Create docker file for client and server

我有一个这样的文件夹结构: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;

所以我先构建服务器,然后是客户端,我将客户端构建的文件移动到我的服务器应用程序中,然后运行该应用程序……有没有办法用 docker 图像做这样的事情?

是的,你可以用 .sh 脚本做的大部分事情都可以通过构建 docker 镜像来完成。 但是,docker 镜像通常遵循单一职责原则,因此我不会将 FE 和 BE 结合在一个镜像中(如果它们是两个不同的应用程序),而是我会做 2 个不同的,然后使用docker compose ,您将能够管理您的多容器应用程序

让我们看一个非常简单的例子

后端:(服务器目录中的Dockerfile)

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

EXPOSE 3000

CMD npm start

前端:(客户端目录中的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)

注意:我已经“手工”编写了所有内容,可能会有一些拼写错误或错误的语法。 对不起,我会解决的!

这可能与您面临的问题类似:

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"]

构建前端,构建后端,并将后端二进制文件和前端构建文件夹复制到一个 alpine 映像中。 如果您需要了解事物是如何相互联系的,我可以将完整的 repo 链接给您

在 Docker 中更改目录使用 WORKDIR 关键字,您需要在此部分指定完整路径


WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

WORKDIR /usr/src/app/client

RUN npm install

RUN npm run build

WORKDIR /usr/src/app

EXPOSE 5000

CMD ["node", "server.js"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM