Docker部署微服务项目
使用Docker对微服务项目进行容器化部署。
1.1. 前端工程打包与配置
本例中,前端工程使用Vue进行开发,在进行部署之前需要对工程进行打包,打包命令如下:
npm run build
构建完成后会在根目录下生成dist文件,如下图所示:
将该文件下的所有文档copy到服务器下的ngix中的html文件下。
拷贝完成后,需要进行跨域处理,编写nginx.conf配置文件
#user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8000;
server_name localhost;
location / {
#add_header 'Access-Control-Allow-Origin' *;
#add header 'Access-Control-Allow-Credentials' 'true';
#add header 'Access-Control-Allow-Methods' *;
#add_header 'Access-Control-Allow-Headers' *;
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html last;
index index.html index.htm;
}
location /api {
#rewrite ^.+prod-api/?(.*)$ /$1 break;
proxy_pass http://服务器IP:gateway端口;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
proxy_pass http://服务器IP:gateway端口;需要将地址与端口号改为自己的。
1.2. 后端工程打包与配置
后端直接使用maven进行打包即可。打包完成后现在本地运行测试,查看jar是否可以正常运行。
打包完成后,为了便于查找、区分,将不同的
jar包上传到对应的文件夹中。
1.3. 部署
使用DockerFile+Docker-Compose组合继续项目部署。Docker-Compose在使用之前需要判断自己是否已经安装,若未安装可自行安装。
- 编写DockerFile
FROM openjdk:8
ENV APP_HOME=/apps
WORKDIR $APP_HOME
EXPOSE 8080
EXPOSE 30000
COPY gateway_demo-1.0-SNAPSHOT.jar gateway_demo.jar
#修改容器时区
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT ["java", "-jar","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=30000"]
CMD ["gateway_demo.jar"]
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=30000"用于远程调试。若不需要远程调试,可以删除。
需要为每个部署的工程均编写对应的Dockerfile文档。
本例中需要部署gateway_demo、user_demo、websocket_demo、xxljob_demo四个工程,此处以gateway_demo为例,其余工程Dokerfile类似不再赘述。
- 编写DockerCompose
version: "3.8"
services:
nginx: #服务名称,用户自定义
image: nginx:latest # 镜像版本
ports:
- "8800:8000" #暴露端口
volumes: #挂载
- /home/nginx/html:/usr/share/nginx/html
- /home/nginx/nginx.conf:/etc/nginx/nginx.conf
privileged: true #这个必须要,解决nginx的文件调用的权限问题
gateway_demo:
build:
context: ./gateway_demo
dockerfile: Dockerfile
ports:
- "8080:8080"
user_demo:
build:
context: ./user_demo
dockerfile: Dockerfile
ports:
- "8090:8090"
websocket_demo:
build:
context: ./websocket_demo
dockerfile: Dockerfile
ports:
- "8091:8091"
xxljob_demo:
build:
context: ./xxljob_demo
dockerfile: Dockerfile
ports:
- "8094:8094"
- 构建镜像,创建容器
#部署单个工程
docker compose up -d gateway_demo #服务名
#部署所有工程
docker compose up -d