docker—服务器部署方案
零、文档版本
时间 | 版本 | 修改内容 |
---|---|---|
2023.05.02 | V1.0 | 初稿 |
2023.05.02 | V1.1 | 修改 (三.2)docker-compose.yml 数据库配置内容 |
一、部署工具
-
部署工具:docker
-
部署步骤:
- 制作镜像Dockerfile;
- 构建容器docker-compose;
- 启动容器(服务)docker-compose。
-
数据持久化:
- docker(volumes):避免容器被清除,数据丢失。
【文件上传】、【数据库】必须进行该配置。
- docker(volumes):避免容器被清除,数据丢失。
二、部署方案
-
方案设计:
- Dockerfile:单服务安装配置,采用Dockerfile,如配置Java、数据库、nginx等;
- docker-compose:项目部署采用 docker-compose,聚合项目服务配置(Dockerfile)。
-
方案说明:
- Dockerfile:负责配置服务,Dockerfile文件 与服务为1对1关系;
- docker-compose:负责聚合项目全部服务,docker-compose.yml文件 与服务为 1对多关系。
- 可使用:
docker-compose up -d
一键启动项目全部服务。 - 后续项目服务调整(如新增、删除、更换某服务),调整 docker-compose.yml 文件即可。
- 可使用:
三、部署步骤
-
先决条件
- docker安装:https://blog.csdn.net/pentiumCM/article/details/123297348
- docker-compose安装:https://blog.csdn.net/pentiumCM/article/details/123287934
-
制作镜像
-
镜像列表:
- 前端服务:Dockerfile 配置 nginx;
- 后端服务:Dockerfile 配置 Java 和 jar 文件;
- 数据库:docker-compose配置;
- redis:docker-compose配置;
-
前端:
- 前端 nginx 服务:
- 代码打包:
yarn run build
;打包资源为:/dist
文件夹。 - Dockerfile:
FROM nginx VOLUME /tmp ENV LANG en_US.UTF-8 RUN echo "server { \ listen 80; \ location ^~ /image-manager { \ proxy_pass http://127.0.0.1:8080/image-manager/; \ proxy_set_header Host 127.0.0.1; \ proxy_set_header X-Real-IP \$remote_addr; \ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; \ } \ #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \ location / { \ root /var/www/html/; \ index index.html index.htm; \ if (!-e \$request_filename) { \ rewrite ^(.*)\$ /index.html?s=\$1 last; \ break; \ } \ } \ access_log /var/log/nginx/access.log ; \ } " > /etc/nginx/conf.d/default.conf \ && mkdir -p /var/www \ && mkdir -p /var/www/html ADD dist/ /var/www/html/ EXPOSE 80 EXPOSE 443
- 代码打包:
- 前端 nginx 服务:
-
后端:
- 后端 Java 服务:
FROM anapsix/alpine-java:8_server-jre_unlimited RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #创建一个目录存放jar包 RUN mkdir -p /web_back_server #添加进入docker容器后的目录 WORKDIR /web_back_server #设置开放端口号 EXPOSE 8080 ADD ./lighting-manager-0.0.1-SNAPSHOT.jar ./ CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar lighting-manager-0.0.1-SNAPSHOT.jar
- 后端 Java 服务:
-
-
构建容器
- docker-compose.yml
version: '3' services: web_front: build: context: ./web_front_nginx restart: always image: web_front_nginx container_name: web_front_nginx ports: - 80:80 - 443:443 web_back: build: context: ./web_back_server restart: always image: web_back_server container_name: web_back_server ports: - 8080:8080 # volumes:【本地磁盘路径:容器路径】 # 实例: #volumes: # - /home/${user}/proj/upFiles:/home/${user}/proj/upFiles web_db: image: mcr.microsoft.com/mssql/server:2019-latest container_name: web_db_server restart: always deploy: resources: limits: cpus: "2.00" memory: 4G ports: - 1433:1433 environment: - ACCEPT_EULA=Y - SA_PASSWORD=Linux@123 # 时区设置 - TZ=Asia/Shanghai # volumes:数据库数据挂载到本地磁盘,本地磁盘路径:容器路径 volumes: - /home/${user}/proj/db/data/:/var/opt/mssql/data - /home/${user}/proj/db/log/:/var/opt/mssql/log - /home/${user}/proj/db/log/:/var/opt/mssql/secrets web_redis: image: redis:5.0 ports: - 6379:6379 restart: always container_name: web_redis
- docker-compose.yml
-
启动容器
- 构建镜像__容器组:
docker-compose build
- 启动镜像__容器组:
docker-compose up -d
- 构建镜像__容器组:
-
服务器资源路径结构:
- ~/${projPath}
- docker-compose.yml
- web_front_nginx
- Dockerfile
- dist
- web_back_server
- Dockerfile
- lighting-manager-0.0.1-SNAPSHOT.jar
- db
- data
- log
- ~/${projPath}
四、运维 FAQ
-
物理服务器重启后:启动容器
- 服务器重启后,docker容器会停止运行,此时不用重新构建,docker ps -a 查看所有容器,docker start 容器Id即可。
-
代码迭代,步骤如下:
- docker-compose down 停止容器;
- 将对应的需要替换的前后端资源包上传到指定目录;
- 删除旧镜像:
- docker images 查看docker镜像
docker rmi 镜像Id
:如,更换jar 文件,就删除对应的服务器的镜像:web_back_server
- docker-compose up -d 重新构建运行即可
五、补充说明
- 端口:根据实际需要进行配置
- web_:系统前缀。可根据实际需求,进行替换
- 服务器路径替换:${}
- docker-compose:每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。
六、参考资料
- https://zhuanlan.zhihu.com/p/97824480