docker部署springboot+vue3前后端分离项目

查阅各种资料终于成功部署项目,最后用的doccker-compose加载容器

1.拉去后端必要镜像mysql,redis

 1.mysql

 1.拉去镜像

docker pull mysql:5.7

2.创建挂载目录

mkdir -p /home/mysql/{log,data,conf.d}

 3.添加my.cnf配置文件(可选)

vim /home/mysql/conf.d/my.cnf

# [client]配置
[client]
# 设置MySQL客户端默认字符集utf8mb4
default-character-set=utf8mb4
# 指定了MySQL服务器使用的Unix套接字文件路径
socket=/var/lib/mysql/mysql.sock 

#[mysql]配置
[mysql]
# 设置MySQL客户端默认字符集utf8mb4
default-character-set=utf8mb4
# 指定了MySQL服务器使用的Unix套接字文件路径
socket=/var/lib/mysql/mysql.sock

#[mysqld]配置
[mysqld]
port=3306 # 端口号
user=root # 用户名
# 设置sql模式 sql_mode模式引起的分组查询出现*this is incompatible with sql_mode=only_full_group_by,这里最好剔除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id = 1

# MySQL8 的密码认证插件 如果不设置低版本navicat无法连接
default_authentication_plugin=mysql_native_password

# 禁用符号链接以防止各种安全风险
symbolic-links=0

# 允许最大连接数
max_connections=1000

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0
max_allowed_packet=16M 

# 设置时区
default-time_zone='+8:00'

 4、启动 mysql 容器(可选,最后用docker-compose统一启动)

docker run -p 3306:3306 --name mysql -v /home/mysql/logs:/logs -v /home/mysql/data:/mysql_data -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

 --restart=always 代表开启启动

--privileged=true 代表进入容器内部为管理员身份

-d 表示后台运行容器 并返回容器 Id

-v 把 mysql 产生的数据同步到本地 防止数据丢失

-e 容器传参 设置 mysql 的初始密码

5.查看正在运行的容器

docker ps

6 .本地navicat测试数据库

2.redis

1.拉去redis(我用最新版本)

docker pull redis

 2.创建挂载目录

mkdir -p /home/redis/data
mkdir -p /home/redis/logs
touch /home/redis/redis.conf 

 3.配置文件(下载redis.conf文件按redis版本下载)

sudo yum install curl
curl -o redis.conf https://raw.githubusercontent.com/redis/redis/7.2/redis.conf

修改 redis.conf中的requirepass

4.挂载容器(我用docker-compose挂载容器会导致redis无法连接,有大佬知道为什么吗)

docker run -p 6379:6379 --name redis -v /home/redis/redis.conf:/etc/redis/redis.conf  -v /home/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

总之就是先将项目所需的技术拉取镜像,最后用docker-compose统一挂载容器 

2. 打包前后端代码

建议在服务器创建一个目录存放项目,二级目录为项目名,三级目录为前端和后端

1.前端代码打包镜像 

1.前端代码打包将dist目录复制到服务器该项目前端目录

2.编写 default.conf 文件和 Dockerfile 文件

default.conf 配置(这个配置会复制到nginx的conf.d目录)

server {
    listen       80;
    server_name  ip地址; # 修改为docker服务宿主机的ip

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html =404;
}
 location /api {
  proxy_pass http://ip地址:端口号/;# 前端api路径会代理到后端地址
}
 
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   html;
}

}

 这是我的,可以参考一下前端代码一般都会配置

server {
    listen       80;
    server_name  1.94.130.33 ; # 修改为docker服务宿主机的ip
 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
    location /api {
  proxy_pass http://1.94.130.29:9999/warehouse;
}
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

 Dockerfile 配置

# 基础镜像使用Nginx

FROM nginx

# 作者

MAINTAINER htt

# 添加时区环境变量,亚洲,上海

ENV TimeZone=Asia/Shanghai

# 将前端dist文件中的内容复制到nginx目录

COPY dist  /usr/share/nginx/html/

# 用本地的nginx配置文件覆盖镜像的Nginx配置

COPY default.conf /etc/nginx/conf.d

# 暴露端口 nginx的端口

EXPOSE 80

3、上传这三个文件到 Linux 服务器的同一个文件夹当中,务必放在一起!

4、构建镜像

 docker build -t vue . #点千万别漏了,这里取名镜像为vue,可以随便取名!(项目名-vue)

2.后端代码打包成镜像 

1、整合后端成 Jar 包并编写 Dockerfile 文件

修改application.propertise中mysql,redis的地址为服务器地址

2.Dockerfile 内容详解

FROM     java:8  #工程java版本

COPY     *.jar  /app.jar  #将所有的jar包整合为app.jar

EXPOSE  port  #暴露后端端口号

ENTRYPOINT ["java","-jar","app.jar"]  #执行jar包

 3.将文件上传到 Linux 服务器上面,必须放在同级目录一起!

4.构建镜像  

 docker build -t api .  #点千万别漏了,这里取名镜像为api,可以随便取名!(项目名-api)

查看当前镜像

docker images 

 3.编写docker-compose.yal文件

    1.进入docker-compose目录,编写docker-compose.yml文件

 cd /usr/local/bin/
vim docker-compose.yml

version: "3"
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    volumes:
      - /home/mysql/conf:/etc/mysql/conf
      - /home/mysql/logs:/logs
      - /home/mysql/data:/var/lib/mysql 
      - /etc/localtime:/etc/localtime:ro 
      # 让容器的时钟与宿主机时钟同步,避免时间的问题,ro(read only),表示只读。
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3306:3306
    restart: always
  redis:
    image: redis
    container_name: redis
    volumes:
      - /home/redis/redis.conf:/etc/redis/redis.conf:rw
      - /home/redis/data:/data:rw
      - /home/redis/logs:/logs:rw
    command: redis-server /etc/redis/redis.conf


  # 后端jar包镜像  
  api:
    image: warehouse-api
    container_name: warehouse-api
    ports:
      - 9999:9999
    depends_on:
      - mysql
      - redis
  vue:
    image: nginx
    container_name: warehouse-vue
    ports:
      - 80:80
    volumes:
      - /project/warehouse/before/nginx/html/dist:/usr/share/nginx/html
      - /project/warehouse/before/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf

2. 启动容器

docker-compose -f docker-compose.yml up -d 

 第一次成功有点乱,可以参考一下,探讨一下避坑。

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值