若依项目Docker容器化部署

1、部署MySQL5.7容器

#>>> 拉取基础镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/hujiaming/mysql:5.7.44

#>>> 创建数据持久化目录
$ mkdir -p /opt/mysql/{data,logs,conf}

#>>> 准备MySQL配置文件
$ cat >> /opt/mysql/conf/my.cnf <<-EOF
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
default-time_zone = '+8:00'

# 新建数据库添加的配置信息
lower_case_table_names=1
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
max_connections=10000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
pid-file=/var/run/mysqld/mysqld.pid
symbolic-links=0
EOF

#>>> 创建MySQL容器
$ docker run \
    -itd -p 3306:3306 \
    --name dbservers --privileged=true \
    -v /opt/mysql/conf:/etc/mysql/conf.d \
    -v /opt/mysql/data:/var/lib/mysql \
    -v /opt/mysql/logs:/logs \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD=Abc123, \
    -e TZ=Asia/Shanghai \
    registry.cn-hangzhou.aliyuncs.com/hujiaming/mysql:5.7.44

提升root权限:–privileged=true
设置时区:-e TZ=Asia/Shanghai

#>>> 进入MySQL容器
$ docker ps | grep mysql
eb9d2e235664   mysql:5.7.44    "docker-entrypoint.s…"   3 hours ago   Up 3 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   dbservers
$ docker exec -it eb9d2e235664 bash

#>>> 进入MySQL(容器内操作)
bash-4.2# mysql -uroot -pAbc123,

#>>> 创建若依用户(容器内操作)
bash-4.2# GRANT ALL PRIVILEGES ON *.* TO 'ruoyi'@'%' IDENTIFIED BY 'Abc123456;' WITH GRANT OPTION;

#>>> 创建数据库(容器内操作)
bash-4.2# CREATE DATABASE ruoyi CHARACTER SET utf8mb4;

#>>> 刷新权限(容器内操作)
bash-4.2# flush privileges;
#>>> 下载源码
$ git clone https://gitee.com/y_project/RuoYi-Vue.git

#>>> 切换目录
$ cd /opt/RuoYi-Vue/sql/

#>>> 导入SQL文件
$ mysql -uruoyi -h192.168.174.101 -p'Abc123456;'  ruoyi < ry_20240629.sql
$ mysql -uruoyi -h192.168.174.101 -p'Abc123456;'  ruoyi < quartz.sql 

2、部署Redis容器

#>>> 拉取基础镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/hujiaming/redis:6.0

#>>> 创建持久化目录
$ mkdir -p /opt/redis/{conf,data}

#>>> 准备redis配置文件(此配置文件仅用于测试,生产环境误用)
$ cat >> /opt/redis/conf/redis.conf <<-EOF
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
requirepass 123456
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
EOF


#>>> 运行redis容器
$ docker run --name redis \
-p 6379:6379 \
-v /opt/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis/data:/data \
-d --restart=always registry.cn-hangzhou.aliyuncs.com/hujiaming/redis:6.0 redis-server /etc/redis/redis.conf

#>>> 进入redis容器中
$ docker exec -it redis  bash

#>>> 测试redis可用性
root@d3240161b809:/data# redis-cli 
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> ping
PONG

3、docker network

#>>> 创建docker network
$ docker network create ruoyinet

#>>> 查看网络
$ docker network ls | grep ruoyi
c5b87e546203   ruoyinet   bridge    local

#>>> 将MySQL Redis加入自定义网络中
$ docker network connect ruoyinet redis
$ docker network connect ruoyinet dbservers

#>>> 拉取测试容器
$ docker pull busybox

#>>> 启动测试容器
$ docker run -itd --name busybox busybox

#>>> 将测试容器加入自定义docker network
$ docker network connect ruoyinet busybox

#>>> 测试服务之间连通性
$ docker exec -it busybox ping dbservers
PING dbservers (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.671 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.123 ms

$ docker exec -it busybox ping redis
PING redis (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.495 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.226 ms

4、前端项目构建(请先启动后端容器后再执行此操作)

#>>> 切换目录
$ cd /opt/RuoYi-Vue/

#>>> 准备nginx配置文件
$ vim default.conf
server {
  listen  80;
  server_name localhost;
  location / {
    root   /app;
    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-admin:8080/;
  }
}

#>>> 编写前端Dockerfile
$ vim Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/hujiaming/node:16.15.0   AS builder
COPY ./ /app
WORKDIR /app/ruoyi-ui
RUN npm install  && npm run build:prod

FROM registry.cn-hangzhou.aliyuncs.com/hujiaming/nginx:1.24.0-alpine
RUN mkdir /app
COPY --from=builder /app/ruoyi-ui/dist /app
COPY default.conf /etc/nginx/conf.d/default.conf

#>>> 构建镜像
$ docker build -t ruoyi-ui:v1.0 .

#>>> 运行前端
$ docker run -itd --name ruoyi-ui  --restart=always -p 80:80 --network ruoyinet ruoyi-ui:v1.0

5、后端容器容器化部署

#>>> 切换目录
$ cd /opt/RuoYi-Vue

#>>> 修改redis连接地址池
$ vim ruoyi-admin/src/main/resources/application.yml

image-20240908214625582

#>>> 修改MySQL连接地址池
$ vim  ruoyi-admin/src/main/resources/application-druid.yml

image-20240908214802610

#>>> 编写Dockerfile
$ vim Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/hujiaming/maven:3.9.6 AS builder
COPY ./ /app
WORKDIR /app
RUN mvn install && cd ruoyi-admin && mvn clean package

FROM registry.cn-hangzhou.aliyuncs.com/hujiaming/openjdk:11.0.11-9-jre
COPY --from=builder /app/ruoyi-admin/target/ruoyi-admin.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

#>>> 构建镜像
$ docker build -t ruoyi-admin:v1.0 .

#>>> 启动后端容器
$ docker run \
	-itd --name ruoyi-admin \
	-p 8080:8080 \
	--restart=always \
	--network ruoyinet \
	ruoyi-admin:v1.0
	
#>>> 查看启动日志
$ docker logs -f ruoyi-admin

et/ruoyi-admin.jar /app.jar
ENTRYPOINT [“java”, “-jar”, “/app.jar”]

#>>> 构建镜像
$ docker build -t ruoyi-admin:v1.0 .

#>>> 启动后端容器
$ docker run
-itd --name ruoyi-admin
-p 8080:8080
–restart=always
–network ruoyinet
ruoyi-admin:v1.0

#>>> 查看启动日志
$ docker logs -f ruoyi-admin


![image-20240908230253860](https://i-blog.csdnimg.cn/img_convert/2b4f9a3e26a31bab76fc39addc3b48b2.png)
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐