docker—服务器部署方案

docker—服务器部署方案

零、文档版本

时间 版本 修改内容
2023.05.02 V1.0 初稿
2023.05.02 V1.1 修改 (三.2)docker-compose.yml 数据库配置内容

一、部署工具

  1. 部署工具:docker

  2. 部署步骤:

    • 制作镜像Dockerfile;
    • 构建容器docker-compose;
    • 启动容器(服务)docker-compose。
  3. 数据持久化:

    • docker(volumes):避免容器被清除,数据丢失。
      【文件上传】、【数据库】必须进行该配置。

二、部署方案

  1. 方案设计:

    • Dockerfile:单服务安装配置,采用Dockerfile,如配置Java、数据库、nginx等;
    • docker-compose:项目部署采用 docker-compose,聚合项目服务配置(Dockerfile)。
  2. 方案说明:

    • Dockerfile:负责配置服务,Dockerfile文件 与服务为1对1关系;
    • docker-compose:负责聚合项目全部服务,docker-compose.yml文件 与服务为 1对多关系。
      • 可使用:docker-compose up -d 一键启动项目全部服务。
      • 后续项目服务调整(如新增、删除、更换某服务),调整 docker-compose.yml 文件即可。

三、部署步骤

  1. 先决条件

    • docker安装:https://blog.csdn.net/pentiumCM/article/details/123297348
    • docker-compose安装:https://blog.csdn.net/pentiumCM/article/details/123287934
  2. 制作镜像

    1. 镜像列表:

      • 前端服务:Dockerfile 配置 nginx;
      • 后端服务:Dockerfile 配置 Java 和 jar 文件;
      • 数据库:docker-compose配置;
      • redis:docker-compose配置;
    2. 前端:

      • 前端 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
          
    3. 后端:

      1. 后端 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
        
        

  1. 构建容器

    • 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
      
      
  2. 启动容器

    • 构建镜像__容器组:docker-compose build
    • 启动镜像__容器组:docker-compose up -d
  3. 服务器资源路径结构:

    • ~/${projPath}
      • docker-compose.yml
      • web_front_nginx
        • Dockerfile
        • dist
      • web_back_server
        • Dockerfile
        • lighting-manager-0.0.1-SNAPSHOT.jar
      • db
        • data
        • log

四、运维 FAQ

  1. 物理服务器重启后:启动容器

    • 服务器重启后,docker容器会停止运行,此时不用重新构建,docker ps -a 查看所有容器,docker start 容器Id即可。
  2. 代码迭代,步骤如下:

    • docker-compose down 停止容器;
    • 将对应的需要替换的前后端资源包上传到指定目录;
    • 删除旧镜像:
      • docker images 查看docker镜像
      • docker rmi 镜像Id:如,更换jar 文件,就删除对应的服务器的镜像:web_back_server
    • docker-compose up -d 重新构建运行即可

五、补充说明

  1. 端口:根据实际需要进行配置
  2. web_:系统前缀。可根据实际需求,进行替换
  3. 服务器路径替换:${}
  4. docker-compose:每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。

六、参考资料

  • https://zhuanlan.zhihu.com/p/97824480

你可能感兴趣的:(docker,服务器,容器)