项目部署(Docker容器方式)
Docker 部署后端项目
-
切换开发环境。开发环境:
application.dev.yml
,生产环境:application.prod.yml
。配置文件application.yml
设置:spring: profile: active: prod
-
生产环境涉及到的网络地址
ip
,都改成部署Docker时的容器名。之后可以使用docker network build [网关]
创建网关,然后使用docker network connect [网关] [容器名] --alias [容器网络别名(设置为容器名最好)]
Docker在容器网络中提供了内置的DNS
解析服务,可以解析网络别名。 -
如果没有使用个人的依赖包,那么后端项目可以在构建镜像时打包。那么需要在构建镜像时,把
maven
工具一起构建进去,例如:FROM maven:3.5-jdk-8-alpine as builder # Copy local code to the container image. WORKDIR /app #指定/app是容器内的工作目录 COPY pom.xml . #将与Dockerfile同级的 pom.xml 拷贝到 /app目录下 COPY src ./src #将src源码目录 拷贝到 /app/src目录下 # Build a release artifact RUN mvn package -DskipTests # Run the web service on container startup. # 运行java项目,参数是spring.profiles.active=prod CMD ["java","-jar","/app/target/yuapi-backend-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
-
如果使用了个人的依赖包,最好提前打包,这样就不用在
Dockerfile
里面指定。Dockerfile
如下所示:#在这个示例中,Dockerfile与api-interface-0.0.1-SNAPSHOT.jar同级 FROM java:openjdk-8-jdk-alpine # Copy local code to the container image. WORKDIR /app/api-interface #将与Dockerfile同级的api-interface-0.0.1-SNAPSHOT.jar 拷贝到 当前工作目录:/app/api-interface COPY ./api-interface-0.0.1-SNAPSHOT.jar . EXPOSE 8123 # Run the web service on container startup. CMD ["java","-jar","/app/api-interface/api-interface-0.0.1-SNAPSHOT.jar"]
-
构建镜像
docker build -t [镜像名]:[tag]
-
运行容器
docker run --name [容器名] -d -p [端口映射] [镜像名]:[tag]
Docker部署前端项目
-
利用环境运行变量,修改前端请求地址
baseURL: process.env.NODE_ENV === 'production'? 'api-gateway:8090':'http://localhost:8090'
-
使用
build
工具打包前端项目(得到dist
目录) -
准备
nginx.conf
server { listen 80; # gzip config gzip on; gzip_min_length 1k; gzip_comp_level 9; gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; gzip_vary on; gzip_disable "MSIE [1-6]\."; root /usr/share/nginx/html; include /etc/nginx/mime.types; location / { # 当访问不到路径时,降级请求主页 try_files $uri /index.html; } }
-
准备
Dockerfile
FROM nginx # 指定工作目录 /user/share/nginx/html/ WORKDIR /user/share/nginx/html/ USER root COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf COPY ./dist /user/share/nginx/html/ EXPOSE 80 CMD [ "nginx", "-g", "daemon off;" ]
补充说明:
- 目录层级结构说明:
dist文件夹
、docker文件夹(包含nginx.conf)
、Dockerfile
同级 - 上面的配置,相当于将物理主机当前目录的
dist
文件夹映射到容器的/usr/share/nginx/html
,当前目录的./docker/nginx.conf
映射到/etc/nginx/conf.d/default.conf
。所以配置里面的root
是/usr/share/nginx/html
。
- 目录层级结构说明:
-
构建镜像
docker build -t [镜像名]:[tag]
-
运行容器
docker run --name [容器名] -d -p [端口映射] [镜像名]:[tag]