场景

若依前后端分离版手把手教你本地搭建环境并运行项目:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662

上面在搭建起来前后端分离版的项目后。

如果想通过Dockerfile的方式部署项目可以参考如下。

Docker中使用Dockerfile的方式部署SpringBoot+Vue前后端分离的项目(若依前后端分离框架为例):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/120210424

除此之外,还可以使用docker-compose的方式去编排部署各个服务。

docker-compose

简介

https://docs.docker.com/compose/

docker-compose是基于docker的开源项目,托管于github上,由python实现,

调用 docker服务的API负责实现对docker容器集群的快速编排,即通过一个单独的yaml文件,

来定义一组相关的容器来为一个项目服务。

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。

快速编排:站在项目角度将一组相关联容器整合在一起,对这组容器按照指定顺序进行启动。

Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。这里涉及2个重要的概念:

服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

项目名称

Compose 用项目名称来隔离不同的环境,在没有设置项目名称的情况下,

Compose 会用 docker-compose.yml 文件所在根目录名称做为项目名称。

每个项目有自己的 Docker network,不同项目的 Docker network 彼此不通。

在单个主机上建立多个隔离环境,Compose 使用项目名称将环境彼此隔离。

您可以在多个不同的上下文中使用此项目名称。默认项目名称是项目目录的基本名称。

您可以使用-p 命令行选项或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称 。

默认项目目录是 Compose 文件的基本目录。可以使用–project-directory 命令行选项自定义项目目录。

Compose与Docker的兼容性

 

 

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、确保服务器已经安装Docker以及Compose,可通过

docker --version

docker-compose --version

2、在服务器上新建如下目录

首先新建fzysShow目录,作为项目所在目录以及项目名称,然后进入该目录,创建如下目录以及文件

docker-compose.yml文件

java目录,目录下存放后台服务fzys.jar包

mysql目录,目录下新建data目录,作为数据挂载目录

nginx目录,目录下新建config目录,config目录下新建nginx.conf配置文件;新建font目录,目录下存放dist前端打的包;新建log目录,映射挂载日志目录。

redis目录,目录下新建data目录和redis.conf配置文件。

 

 

3、修改docker-compose.yml的内容为

version: "3.8"

services:

  redis:
    image: redis:latest
    restart: always
    ports:
      - "36379:6379"
    volumes:
      - ./redis/redis.conf:/etc/redis/redis.conf
      - ./redis/data:/data
    command: redis-server /etc/redis/redis.conf
  mysql:
    image: mysql:latest
    restart: always
    ports:
      - "33306:3306"
    command: --lower_case_table_names=1
    environment:
      MYSQL_DATABASE: fzys-show
      MYSQL_ROOT_PASSWORD: Fzys@123!
      MYSQL_ROOT_HOST: '%'
      TZ: Asia/Shanghai
    volumes:
      - ./mysql/data:/var/lib/mysql

  kkfileview:
    image: zjblovewl/kkfile:4.9
    ports:
      - "38012:8012"

  nginx:
    image: nginx:latest
    ports:
      - "390:390"
    volumes:
      - ./nginx/font/dist:/usr/share/nginx/dist
      - ./nginx/log:/var/log/nginx
      - ./nginx/config/nginx.conf:/etc/nginx/nginx.conf

  java:
    image: openjdk:8u342-oracle
    restart: always
    volumes:
      - ./java:/home
    working_dir: /home/
    ports:
      - "39090:39090"
      - "38901:8901"
    environment:
      TZ: Asia/Shanghai
    depends_on:
      - redis
      - mysql
    command: [
      'java',
      '-jar',
      '/home/fzys.jar'
    ]

配置讲解:

首先声明compose的版本为3.8

然后声明各服务

redis服务:

镜像为redis:latest,端口映射宿主机36379映射到容器6379,数据卷挂载宿主机当前目录下./redis/redis.conf

映射到容器内/etc/redis/redis.conf的配置文件以及数据data目录挂载。执行命令redis-server /etc/redis/redis.conf

使redis通过读取配置文件的方式启动。这里需要注意redis的版本与redis.conf配置文件的版本对应问题,以及

需要赋予宿主机./redis/redis.conf的权限问题。进入到./redis目录下执行

chmod -R 777 redis.conf

 

 

DockerCompose编排Redis6.2.6以及遇到的那些坑:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/128361840

mysql服务:

这里mysql为版本8,所以需要执行command使其忽略表名大小写。然后配置初始化需要的库以及root用户密码和限制访问的

ip等相关环境变量。

kkfileview服务:

这个为系统中用到的文件预览服务,如果用不到可以去掉这个。

nginx服务:

端口映射以及数据卷映射。映射宿主机当前目录下./nginx/font/dist至容器内usr/share/nginx/dist目录,这个就是用来存放前端包的;映射配置文件./nginx/config/nginx.conf:/etc/nginx/nginx.conf。

修改配置文件nginx.conf的内容为:

worker_processes 1;
events {
  worker_connections 1024;
}
http {
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;
  map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
  }
 
  server {
    listen 390;
    server_name localhost;
    client_max_body_size 300M;
   
    location / {
      root /usr/share/nginx/dist;
      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://你的服务器ip:39090/;
    }
   
    location /websocket/ {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass       http://你的服务器ip:39090;
            proxy_http_version  1.1;
            proxy_set_header    Upgrade    "websocket";
            proxy_set_header    Connection "Upgrade";
            proxy_read_timeout 5s;
    }
   
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
      root html;
    }
  }
}

注意:

这里在配置文件中添加了websockt的代理的相关配置,如果不需要可以去掉,只关注反向代理的部分。

 

 

注意这里映射的目录,前端是容器内的/usr/share/nginx/dist目录,已经在yml中将其映射到宿主机

./nginx/font/dist目录,所以需要将前端项目打包,并上传至宿主机./nginx/font/dist,注意dist目录就是打包后

的目录,不要在dist下再有一层dist目录。

 

 

可通过本地dist压缩并上传至服务器解压的方式。

java服务:

这里用的jdk的镜像,映射当前目录下./java到容器内home目录下。然后将当前工作目录切换至home目录下,这里端口映射

根据自己的后台服务需要的接口进行映射。depends_on指定java需要依赖redis和mysql这两个服务,避免启动顺序问题。然后

command执行命令,启动jar包。

所以需要将后台jar包上传至宿主机java目录下。

4、yml文件编排完成,需要启动项目并查看日志

来到docker-compose.yml所在的目录下,输入

docker-compose up

启动项目,不加-d参数可以使其不要后台启动,可以直接查看各服务的日志。

此时mysql只是初始化了库并没有导入sql,所以后台java会进行包括,可以先忽略,待mysql启动成功之后

使用客户端工具,将需要的表进行同步结构和数据到服务器上即可。

当然mysql还可以通过dockerfile以及脚本的方式导入sql文件,但是这里需要将部分表的接口以及部分表的数据

同步到服务器上,所以没有初始化sql,而是选择手动传输数据库表和数据的方式。

同步完数据库之后,按ctrl+c可以结束所有服务,停掉整个项目,再输入一遍

docker-compose up

此时后台不再报错,各服务均启动正常。

也可以单独针对一个项目中某个服务进行重启,比如需要更新前端dist包,只要将原来宿主机下

./nginx/font/dist的dist删除并上传最新的dist包,然后重启nginx服务。

docker-compose restart nginx

 

 

5、docker-compose常用命令

docker compose ps

可以列出「当前项目」下所有的服务

docker compose build

格式:docker compose build [SERVICE...] 构建 docker-compose.yml文件中的服务,生成镜像。

docker compose up

启动的容器都在前台,控制台将实时打印所有容器的输出信息(以不同的颜色标识不同的服务),

可以很方便进行调试。当按下 Ctrl+C 时,所有容器都会被停止。

如果使用 docker compose up -d,则所有服务将在后台启动。

docker compose stop

停止项目中的所有服务容器。

docker compose start

启动项目中的所有服务容器。

docker compose restart

重启项目中的所有服务容器。

注意上面的启动、停止、重启都可以后面跟具体的服务名,进而对单个服务进行操作。

docker compose down

此命令将会『停止并删除』docker-compose.yml中定义的所有服务容器和网络,但保留数据卷。

docker compose logs

查看当前项目下所有服务容器的日志输出。也可跟具体服务名。

6、查看当前项目服务运行状态是否正常

状态均为Up,各服务启动成功

 

 

然后访问服务器的390端口,显示系统页面并出现验证码,则部署成功。

 

posted on 2022-12-19 14:27  霸道流氓  阅读(748)  评论(0编辑  收藏  举报