通过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指定最新版本,去官网复制命令吧