当前位置 : 主页 > 操作系统 > centos >

教你使用Docker Compose一键部署前后端分离项目

来源:互联网 收集:自由互联 发布时间:2023-03-17
目录 前言 一、安装Docker和docker Compose 二、准备工作 1. 新建工作目录 2. 工作目录结构 3. 后台打包 4. 前台打包 5. 数据库文件上传 6. 编写Dockerfile 7. 编写 docker-compose.yml 文件 8. 构建并启动
目录
  • 前言
  • 一、安装Docker和docker Compose
  • 二、准备工作
    • 1. 新建工作目录
    • 2. 工作目录结构
    • 3. 后台打包
    • 4. 前台打包
    • 5. 数据库文件上传
    • 6. 编写Dockerfile
    • 7. 编写 docker-compose.yml 文件
    • 8. 构建并启动
  • 补充:YAML文件格式及编写注意事项
    • 总结

      前言

      前面的博客介绍了使用 Docker 部署前后端分离项目:使用Docker部署前后端分离项目

      接下来介绍如何使用 Docker Compose部署前后端分离项目,依旧以若依项目为例。 

      一、安装Docker和docker Compose

      (1)Docker安装

      [root@zy-host /]# yum install -y yum-utils device-mapper-persistent-data lvm2
      [root@zy-host /]# yum install docker-ce docker-ce-cli containerd.io

      (2)Docker Compose安装

      [root@zy-host home]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
      [root@zy-host home]# chmod +x /usr/local/bin/docker-compose

      (3)查看版本信息

      [root@zy-host home]# docker --version
      Docker version 20.10.22, build 3a2c30b
      [root@zy-host home]# docker-compose --version
      docker-compose version 1.25.1, build a82fef07

      二、准备工作

      这里可以参考若依官方文档:集成docker实现一键部署| RuoYi

      1. 新建工作目录

      在 /home 目录下新建目录 ruoyi2,作为工作目录。

      [root@zy-host home]# mkdir ruoyi2
      

      2. 工作目录结构

      • 其中db目录存放ruoyi数据库脚本
      • 其中jar目录存放打包好的jar应用文件
      • 其中conf目录存放redis.conf和nginx.conf配置
      • 其中html\dist目录存放打包好的静态页面文件
      • 数据库mysql地址需要修改成ruoyi-mysql
      • 缓存redis地址需要修改成ruoyi-redis
      • 数据库脚本头部需要添加SET NAMES 'utf8';(防止乱码)
      [root@zy-host ruoyi2]# tree ./
      ./
      ├── conf
      │   ├── nginx.conf
      │   └── redis.conf
      ├── db
      ├── docker-compose.yml
      ├── html
      │   └── dist
      ├── jar
      ├── mysql-dockerfile
      ├── nginx-dockerfile
      ├── redis-dockerfile
      └── ruoyi-dockerfile

      nginx.conf文件内容:

      [root@zy-host conf]# cat nginx.conf 
      worker_processes  1;
       
      events {
          worker_connections  1024;
      }
       
      http {
          include       mime.types;
          default_type  application/octet-stream;
          sendfile        on;
          keepalive_timeout  65;
       
          server {
              listen       80;
              server_name  localhost;
       
      		location / {
                  root   /home/ruoyi/projects/ruoyi-ui;
      			try_files $uri $uri/ /index.html;
                  index  index.html index.htm;
              }
      		
      		location /prod-api/{
      			proxy_set_header Host $http_host;
      			proxy_set_header X-Real-IP $remote_addr;
      			proxy_set_header REMOTE-HOST $remote_addr;
      			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      			proxy_pass http://ruoyi-server:8080/;
      		}
       
              error_page   500 502 503 504  /50x.html;
              location = /50x.html {
                  root   html;
              }
          }
      }

       redis.conf文件内容:

      # requirepass 123456

      3. 后台打包

      修改后台配置文件,修改MySQL地址为和Redis地址为 云服务器IP

        package 打包,将打好的jar包上传至工作目录下的 jar 目录中:

      4. 前台打包

      前台打 dist 包,上传至工作目录的 html 目录下:

      # 构建生产环境
      npm run build:prod

      5. 数据库文件上传

      在sql文件头部添加:SET NAMES 'utf8'; 防止乱码,然后将sql文件上传至工作目录的 db 目录下:

      6. 编写Dockerfile

      (1)mysql-dockerfile

      mysql-dockerfile 文件内容如下:

      # 基础镜像
      FROM mysql:5.7
      # author
      MAINTAINER ruoyi
       
      # 执行sql脚本
      ADD ./db/*.sql /docker-entrypoint-initdb.d/

      (2)nginx-dockerfile

      nginx-dockerfile 文件内容如下:

      在容器内创建 /home/ruoyi/projects/ruoyi-ui目录,并将该目录与宿主机挂载。

      # 基础镜像
      FROM nginx
      # author
      MAINTAINER ruoyi
       
      # 挂载目录
      VOLUME /home/ruoyi/projects/ruoyi-ui
      # 创建目录
      RUN mkdir -p /home/ruoyi/projects/ruoyi-ui
      # 指定路径
      WORKDIR /home/ruoyi/projects/ruoyi-ui
      # 复制conf文件到路径
      COPY ./conf/nginx.conf /etc/nginx/nginx.conf
      # 复制html文件到路径
      COPY ./html/dist /home/ruoyi/projects/ruoyi-ui

      (3)redis-dockerfile

      redis-dockerfile文件内容如下:

      # 基础镜像
      FROM redis
      # author
      MAINTAINER ruoyi
       
      # 挂载目录
      VOLUME /home/ruoyi/redis
      # 创建目录
      RUN mkdir -p /home/ruoyi/redis
      # 指定路径
      WORKDIR /home/ruoyi/redis
      # 复制conf文件到路径
      COPY ./conf/redis.conf /home/ruoyi/redis/redis.conf

      (4)ruoyi-dockerfile

      ruoyi-dockerfile文件内容如下:

      # 基础镜像
      FROM java:8
      # author
      MAINTAINER ruoyi
       
      # 挂载目录
      VOLUME /home/ruoyi
      # 创建目录
      RUN mkdir -p /home/ruoyi
      # 指定路径
      WORKDIR /home/ruoyi
      # 复制jar文件到路径
      COPY ./jar/*.jar /home/ruoyi/ruoyi.jar
      # 启动应用
      ENTRYPOINT ["java","-jar","ruoyi.jar"]

      7. 编写 docker-compose.yml 文件

      docker-compose.yml 文件内容如下:

      version : '3'
      services:
        ruoyi-mysql:
          container_name: ruoyi-mysql
          image: mysql:5.7
          build:
            context: .
            dockerfile: mysql-dockerfile
          ports:
            - "3306:3306"
          volumes:
            - ./mysql/conf:/etc/mysql/conf.d
            - ./mysql/logs:/logs
            - ./mysql/data:/var/lib/mysql
          command: [
                'mysqld',
                '--innodb-buffer-pool-size=80M',
                '--character-set-server=utf8mb4',
                '--collation-server=utf8mb4_unicode_ci',
                '--default-time-zone=+8:00',
                '--lower-case-table-names=1'
              ]
          environment:
            MYSQL_DATABASE: 'ry-vue'
            MYSQL_ROOT_PASSWORD: zhangyin  #数据库root用户密码
        ruoyi-redis:
          container_name: ruoyi-redis
          image: redis
          build:
            context: .
            dockerfile: redis-dockerfile
          ports:
            - "6379:6379"
          volumes:
            - ./conf/redis.conf:/home/ruoyi/redis/redis.conf
            - ./redis/data:/data
          command: redis-server /home/ruoyi/redis/redis.conf
        ruoyi-nginx:
          container_name: ruoyi-nginx
          image: nginx
          build:
            context: .
            dockerfile: nginx-dockerfile
          ports:
            - "80:80"
          volumes:
            - ./html/dist:/home/ruoyi/projects/ruoyi-ui
            - ./conf/nginx.conf:/etc/nginx/nginx.conf
            - ./nginx/logs:/var/log/nginx
            - ./nginx/conf.d:/etc/nginx/conf.d
          depends_on:
            - ruoyi-server
          links:
            - ruoyi-server
        ruoyi-server:
          container_name: ruoyi-server
          build:
            context: .
            dockerfile: ruoyi-dockerfile
          ports:
            - "8080:8080"
          volumes:
            - ./ruoyi/logs:/home/ruoyi/logs
            - ./ruoyi/uploadPath:/home/ruoyi/uploadPath
          depends_on:
            - ruoyi-mysql
            - ruoyi-redis
          links:
            - ruoyi-mysql
            - ruoyi-redis

      8. 构建并启动

      (1)构建docker服务

      [root@zy-host ruoyi2]# docker-compose build
      

      (2)启动docker容器

      [root@zy-host ruoyi2]# docker-compose up -d

      (3)查看容器

      [root@zy-host ruoyi2]# docker ps
      CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
      c61cd8b2b476   nginx                 "/docker-entrypoint.…"   47 seconds ago   Up 45 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp                      ruoyi-nginx
      c39f8deda702   ruoyi2_ruoyi-server   "java -jar ruoyi.jar"    48 seconds ago   Up 46 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              ruoyi-server
      3d5daf878fbb   redis                 "docker-entrypoint.s…"   49 seconds ago   Up 48 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              ruoyi-redis
      58568121a480   mysql:5.7             "docker-entrypoint.s…"   49 seconds ago   Up 48 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   ruoyi-mysql

      (4)浏览器访问测试

      可以正常显示页面,表名环境搭建成功。

      补充:YAML文件格式及编写注意事项

      注:docker-compose使用yaml文件对容器进行描述

      YAML是一种标记语言很直观的数据序列化格式,可读性高。类似于XML数据描述语言,语法比XML简单的很多。

      YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来。

      YAML文件格式注意事项:

      1.不支持制表符tab键缩进,需要使用空格缩进

      2.通常开头缩进2个空格

      3.字符后缩进1个空格,如冒号、逗号、横杆

      4.用井号注释

      5.如果包含特殊字符用单引号引起来

      6.布尔值(true、false、yes、no、on、off)必须用引号括起来,这样分 析器会将他们解释为字符串。

      总结

      到此这篇关于使用Docker Compose一键部署前后端分离项目的文章就介绍到这了,更多相关Docker Compose部署前后端分离项目内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

      上一篇:使用Docker部署前后端分离项目的完整步骤
      下一篇:没有了
      网友评论