通过docker给服务器离线部署mysql,redis,nacos,xxl-job

主要流程:本地linux通过docker拉取镜像,导出为tar包,通过scp命令传送到服务器,在服务器上加载并运行容器。

具体流程(Mysql为例)

请注意自己软件的版本。不同版本间部署过程存在差异,当我部署nacos 3.x时,docker run参数发生变化,详情见我的新博文。

一,本地linux获取镜像

拉取镜像的命令,可以直接去docker仓库复制。

  • 访问https://hub.docker.com/ 需要梯
  • 搜索服务名称
  • 右侧Tag summary 选择版本号,下方会提供相应命令,复制即可。
# 拉取镜像
docker pull mysql:5.7 

# 打包镜像
# 前一个参数指定打包后tar文件名,后一个指定镜像名:版本号
# (可以通过docker images 命令查看镜像名和版本号)
docker save -o mysql5.7.1.tar mysql:5.7

注意点:

  • nacos的镜像名称为 nacos/nacos-server
  • xxl-job的镜像名称为 xuxueli/xxl-job-admin

疑惑:
为啥有的镜像如redis,mysql等,只需单个服务名,而nacos等,需要组织名/服务名:nacos/nacos-server。
docker Hub 官方镜像机制:服务申请成为Docker Hub官方镜像,由Docker Hub官方维护,官方镜像不需要组织名,它有个隐藏的命名空间 library/。

二,将镜像传输到服务器

cd 到 tar包保存目录(默认当前目录)

scp *.tar 服务器用户名@服务器ip:服务器存放路径

三,服务器上加载并且启动容器

docker load -i mysql5.7.tar

mysql启动容器需要挂载一些文件,它们需要预先自己创建出来
我把他们放在data目录下

mkdir -p /data/mysql/data
mkdir -p /data/mysql/conf
mkdir -p /data/mysql/logs

启动容器:

docker run -d \
  --name mysql5.7 \  # 容器名称,自定义(如mysql5.7)
  -p 3306:3306 \     # 端口映射:宿主机3306 -> 容器内3306
  -v /data/mysql/data:/var/lib/mysql \  # 数据持久化:容器内数据目录 -> 宿主机/data/mysql/data
  -v /data/mysql/conf:/etc/mysql/conf.d \  # 配置挂载:宿主机配置文件 -> 容器内配置目录
  -v /data/mysql/logs:/var/log/mysql \  # 日志挂载:容器内日志 -> 宿主机日志目录
  -e MYSQL_ROOT_PASSWORD=123456 \  # 设置root用户密码(自定义,如123456)
  -e TZ=Asia/Shanghai \  # 设置时区为上海(避免时间不一致)
  --restart=always \  # 开机自启(容器崩溃后自动重启)
  mysql:5.7  # 镜像名称:版本

其他容器启动示例代码

nacos

docker run -d \
  --name nacos \
  -p 8848:8848 \
  -e MODE=standalone \
  nacos/nacos-server:2.5.1

redis
redis也需要提前创建挂载目录

mkdir -p /data/redis/data
docker run -d \
  --name redis \
  -p 6379:6379 \
  -v /data/redis/data:/data \
  redis:5 \
  redis-server --appendonly yes

xxl-job-admin
它的部署依赖数据库,需要准备一些表结构
官方(https://github.com/xuxueli/xxl-job)提供了sql脚本文件,位于/doc/db

启动mysql容器

# -u 用户 -p 密码
docker exec -it mysql5.7 mysql -uroot -p123456

复制sql脚本内容,并执行

启动xxl-job-admin

docker run -d \
  --name xxl-job-admin \
  -p 8080:8080 \
  -e PARAMS="--spring.datasource.url=jdbc:mysql://数据库IP(填写服务器ip):3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai \
  --spring.datasource.username=数据库账号 \
  --spring.datasource.password=数据库密码" \
  xxl-job-admin:2.4.0

小知识

mkdir支持相对路径和绝对路径

  • 相对路径:会在当前路径下创建dir1/dir2
mkdir -p dir1/dir2  
  • 绝对路径:从根目录开始匹配,若当前路径为/dir1,则会在当前目录下创建dir2
mkdir -p /dir1/dir2  

四,验证部署

1.查看容器状态

docker ps| grep mysql5.7

2.进入容器内部操作mysql

# -u 用户 -p 密码
docker exec -it mysql5.7 mysql -uroot -p123456

退出容器:

exit
# 或者
\q

其他服务验证部署

nacos
浏览器访问 http://服务器ip:8848/nacos
默认账号密码 nacos/nacos

xxl-job-admin
浏览器访问 http://服务器ip:8080/xxl-job-admin
默认账号密码为 admin 123456

Docker一些零碎记录

docker desktop不支持虚拟环境嵌套,一般部署在window上,别往linux装了

镜像的浮动标签:指向8.x.x系列最新的稳定版本。但是有些镜像好像不支持这样指定,建议去镜像网站上赋值拉取的命令

sudo docker pull mysql:8

xxl-admin镜像不支持 :latest指定最新版本,去官网复制命令吧

posted @ 2025-07-16 09:17  violet0evergarden  阅读(67)  评论(0)    收藏  举报