赞
踩
接下来的内容以 Ubuntu 22.04.1
操作系统为例。
hi@hi-IdeaCentre-GeekPro-15ICK:~$ sudo su
[sudo] hi 的密码:
root@hi-IdeaCentre-GeekPro-15ICK:/home/hi# docker ps
找不到命令 “docker”,但可以通过以下软件包安装它:
apt install docker.io # version 24.0.5-0ubuntu1~22.04.1, or
apt install podman-docker # version 3.4.4+ds1-1ubuntu1.22.04.2
root@hi-IdeaCentre-GeekPro-15ICK:/home/hi# docker-compose
找不到命令 “docker-compose”,但可以通过以下软件包安装它:
apt install docker-compose
验证版本信息
root@hi-IdeaCentre-GeekPro-15ICK:/home/hi# docker -v
Docker version 24.0.5, build 24.0.5-0ubuntu1~22.04.1
root@hi-IdeaCentre-GeekPro-15ICK:/home/hi# docker-compose -version
docker-compose version 1.29.2, build unknown
yum install -y yum-utils # yum工具集
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast # yum自动检测最快的安装源
yum install -y docker-ce
systemctl start docker
docker version
[root@docker ~]# docker -v
Docker version 24.0.6, build ed223bc
docker pull hello-world
docker run hello-world
Note: 在 CentOS7
上使用上述 yum
方式安装的 Docker
,默认自带了Docker Compose Plugin,不过命令是 docker compose
。
[root@docker ~]# docker compose version
Docker Compose version v2.21.0
命令的具体用法可参考:云原生之容器编排实践-在CentOS7上安装使用Docker
常用的批量操作命令:
# 停止所有运行中的容器 docker stop $(docker ps -q) # 删除所有容器 docker rm $(docker ps -aq) # 删除所有镜像 docker rmi $(docker images -aq) # 强制删除所有未被容器使用的镜像 docker image prune -a -f # 查看所有的无用卷 docker volume ls -qf dangling=true # 删除无用卷 docker volume rm $(docker volume ls -qf dangling=true) # 强制清理退出的容器快照 docker rm $(docker ps -q -f status=exited) # 清理dangling image docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
如果是下载压缩包的方式,那么先初始化为 git
项目,初始提交,再切换分支,方便做版本管理。
Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master $ git init Initialized empty Git repository in D:/Java/IdeaProjects/RuoYi-Cloud-master/.git/ Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master (master) $ git add . Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master (master) $ git commit -m "initial commit" Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master (master) $ git checkout -b deploy Switched to a new branch 'deploy' Heartsuit@LAPTOP MINGW64 /d/Java/IdeaProjects/RuoYi-Cloud-master (deploy) $ git merge master Already up to date.
由于生产环境与开发环境的配置不同,实际操作时,一般先切换一个分支,专门用于生产环境的配置调整。
根据需要修改 MySQL
版本,我们用的是 8.0
,对应的文件: docker/mysql/dockerfile
。
对应的文件: docker/docker-compose.yml
。
Note:经测试,如果遇到在不同操作系统的宿主机上或者不同版本的 Docker
与 docker-compose
下, docker-entrypoint-initdb.d
目录下的 SQL
语句并没有成功执行;原因是没有执行 MySQL
的 Dockerfile
的 build
操作,导致并没有将 SQL
文件 COPY
到 docker-entrypoint-initdb.d
目录下。解决方法有两种:
docker-compose.yml
中MySQL
的image
;SQL
文件目录的挂载至/docker-entrypoint-initdb.d
目录。对应的文件: docker/nacos/conf/application.properties
Note:
docker-compose
中数据库服务的服务名,那么上图中的数据库服务:ruoyi-mysql
也要一并修改。Nacos
持续报没有数据源:No Datasource Set
,这时候可以尝试修改下connectTimeout
的值,从1000改为10000,连接超时数据1s改为10s,这是以为网络延迟导致的Nacos
无法在指定的时间内连接上MySQL
。对应的文件: docker/nginx/conf/nginx.conf
,根据实际服务名与端口号进行配置,我这里保持默认。
对应的文件: docker/redis/conf/redis.conf
,我这里保持默认。
可以使用若依自带的 SQL
脚本,或者导出自己的数据库表(包含建库、建表以及Insert语句),手动放到 docker/mysql/db
下。
Note:
docker-entrypoint-initdb.d
这个目录下的SQL
或者sh
文件会在数据库初始化时执行;my-cloud
和my-config
。根据实际要部署到生产环境的服务,修改对应的 bootstrap.yml
文件;这里以网关服务、认证服务以及系统服务为例,将其中的127.0.0.1改为 docker-compose
中 Nacos
的服务名: ruoyi-nacos
。
在 docker
目录下新建一个 minio
目录,在其中新增一个 dockerfile
文件与 conf
与 data
目录(这几个文件暂时没用,后期可用于自定义配置);然后在 docker-compose.yml
中添加 ruoyi-minio
服务。
Note:在同一个 docker-compose.yml
中的服务启动后,默认是在同一个网络下,可以通过服务名称进行通信,因此如果这里的 minio
是单独部署,而不是配置在 docker-compose.yml
中,那么无法通过服务名称 ruoyi-minio
连接。
作为配置中心, Nacos
中存放了各个服务的核心配置,eg:数据库连接、缓存、对象存储等,所以等一会儿 MySQL
、 Nacos
启动后,在业务服务启动之前,需要先将Nacos中的以下内容改为服务名称;这里以网关服务、认证服务以及系统服务为例。
在项目根目录( package.json
所在目录)执行打包命令:
npm run build:prod
会生成 dist
的静态资源目录;我这里因为前后端分离开发,打包后直接将dist目录放到 docker/nginx/html/
下。
在项目根目录(最外层pom.xml所在目录)执行打包命令,这里为加快打包进度,跳过了单元测试:
mvn clean package -Dmaven.test.skip=true
会在各模块或者微服务的 target
目录下生成 模块名.jar
的可执行文件。
由于微服务较多,若依提供了复制脚本,将不同的微服务打包后的 jar
复制到待部署的 docker
目录下;根据需要修改 copy.sh
的内容,建议使用 bash
。
#!/bin/sh # 复制项目的文件到对应docker路径,便于一键生成镜像。 usage() { echo "Usage: sh copy.sh" exit 1 } # copy jar echo "begin copy ruoyi-gateway " cp ../ruoyi-gateway/target/ruoyi-gateway.jar ./ruoyi/gateway/jar echo "begin copy ruoyi-auth " cp ../ruoyi-auth/target/ruoyi-auth.jar ./ruoyi/auth/jar echo "begin copy ruoyi-modules-system " cp ../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar ./ruoyi/modules/system/jar
准备好前端、后端以及所有的配置文件后,可以将若依项目下的 docker
目录直接上传到服务器。
777
,简单粗暴;实际生产环境可根据需要配置权限。)chown -R root:root docker
chmod -R 777 docker
docker-compose.yml
所在目录所有相关容器已正常运行。
所有微服务已注册成功。
前端可以正常打开登录。
参考:CentOS7.8离线安装Docker24.0.2,离线安装gcc与g++环境
实际场景中,有时候服务器环境不允许连接外网,导致无法从镜像仓库拉取镜像;针对这种情况, Docker
提供了 save
与 load
命令来实现镜像的导出与导入。
docker save -o <file-name.tar>
docker load -i <file-path.tar>
docker images
# 保存镜像 docker save redis:latest -o redis.tar docker save mysql:8.0 -o mysql.tar docker save nginx:latest -o nginx.tar docker save minio/minio:latest -o minio.tar docker save nacos/nacos-server:latest -o nacos.tar docker save openjdk:8-jre -o openjdk.tar docker save docker-ruoyi-gateway:latest -o docker-ruoyi-gateway.tar docker save docker-ruoyi-auth:latest -o docker-ruoyi-auth.tar docker save docker-ruoyi-modules-system:latest -o docker-ruoyi-modules-system.tar # 加载镜像 docker load -i redis.tar docker load -i minio.tar docker load -i mysql.tar docker load -i nacos.tar docker load -i nginx.tar docker load -i openjdk.tar docker load -i docker-ruoyi-gateway.tar docker load -i docker-ruoyi-auth.tar docker load -i docker-ruoyi-modules-system.tar
可以通过 MySQL
数据库的 source
命令将 SQL
语句(建库、建表以及Insert语句)导入目标库。
Note:离线导入镜像的局限性:在 X86_64
平台上制作的 Image
不可在 ARM
平台(M1 视同为 ARM)上使用,反之亦然。
主要用于开发或者测试环境,略。。
参考:云原生之容器编排实践-通过IDEA连接Docker服务
[root@docker ~]# cd /opt/
[root@docker opt]# mkdir portainer
[root@docker opt]# docker pull portainer/portainer
[root@docker opt]# docker run -p 9000:9000 -p 8000:8000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/portainer/data:/data \
-d portainer/portainer
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。