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

fra*_*ica 2 node.js docker reactjs

我有这样的文件夹结构: 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;
Run Code Online (Sandbox Code Playgroud)

所以我构建了服务器,然后是客户端,我将客户端构建的文件移到我的服务器应用程序中,然后运行该应用程序...有没有办法使用 docker 映像执行类似的操作?

Car*_*ldi 7

是的,您可以使用 .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
Run Code Online (Sandbox Code Playgroud)

前端:(客户端目录中的 Dockerfile)

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

RUN npm run build
EXPOSE 80

CMD npm start
Run Code Online (Sandbox Code Playgroud)

docker compose(在服务器和客户端的父目录中

version: 3
services:
  server:
    build: ./server
    container_name: server
    ports:
      - 3000:3000
  client:
    build: ./client
    container_name: client
    ports:
      -80:80
Run Code Online (Sandbox Code Playgroud)

然后使用 docker-compose up --build 您可以随时构建和运行容器,请参阅其他命令的文档(stop、kill、remove ecc)

注意:我都是“手工”编写的,可能存在一些拼写错误或语法错误。抱歉,我会解决的!