目录
在服务器上运行Spring Boot程序,并与MySQL和Redis容器关联
本文介绍如何在服务器上使用Docker运行Spring Boot程序,并配置与MySQL和Redis容器的关联。
部署Redis容器
需要注意的就是–requirepass “123456”,需要预先设置密码
sudo docker run -d --name redis -p 6379:6379 redis redis-server --requirepass "123456" redis
部署MySQL容器
首先,拉取MySQL镜像并保存为tar包,然后将其加载到服务器的Docker中。
docker pull mysql:8.1
docker save -o d:/mysql.tar mysql
# 服务器命令
sudo docker load -i mysql.tar
使用以下命令启动MySQL容器:
sudo docker run --restart=always --name mysql --privileged=true -p 3306:3306 -v /home/mysql/log:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.1 --lower-case-table-names=1
sudo
: 这是Linux命令行中的一个命令,用来允许普通用户执行超级用户(管理员)的命令。docker run
: 这是Docker的命令,用来启动一个新的容器。--restart=always
: 这个参数告诉Docker,如果容器退出,它总是重新启动。--name mysql
: 这个参数给容器指定一个名字,在这个例子中名字是"mysql"。--privileged=true
: 这个参数让容器获得所有的权限,这通常只在需要访问宿主机的设备或文件系统时使用。-p 3306:3306
: 这个参数将容器的3306端口映射到宿主机的3306端口。这是MySQL服务的默认端口,通常用于数据库通信。-v /home/mysql/log:/var/log/mysql
: 这个参数进行卷映射,将宿主机的/home/mysql/log目录映射到容器的/var/log/mysql目录。这用于存储MySQL的日志文件。-v /home/mysql/data:/var/lib/mysql
: 这个参数将宿主机的/home/mysql/data目录映射到容器的/var/lib/mysql目录。这是MySQL存储数据的地方。-v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf
: 这个参数将宿主机的/home/mysql/conf/my.cnf文件映射到容器的/etc/mysql/my.cnf文件。这是MySQL的配置文件。-e MYSQL_ROOT_PASSWORD=123456
: 这个参数设置MySQL的root用户密码。在这个例子中,密码是"123456"。(,-e
是一个参数形式,代表 “environmental variable”,用于设置环境变量。当你使用-e
参数时,你可以向容器内指定一个环境变量,其值会在容器启动时被设置。)-d
: 这个参数让容器在守护进程模式下运行,即在后台运行。mysql:8.1
: 这个参数指定了要运行的Docker镜像,这里是MySQL的8.1版本。--lower-case-table-names=1
: 这个参数是一个MySQL的配置选项,它告诉MySQL将表名解释为小写。这在某些情况下可以避免大小写敏感的问题
配置MySQL容器中root用户的远程访问权限
在配置MySQL容器中root用户的远程访问权限时,可能会遇到各种问题,这里记录了如何正确分配root用户远程访问权限的步骤,以解决可能出现的报错1251问题。
步骤一:进入MySQL容器
使用以下命令可以进入MySQL容器:
docker exec -it my_mysql bash
步骤二:登录MySQL数据库
使用以下命令登录MySQL数据库(假设root用户的密码是123456):
mysql -uroot -p123456
步骤三:给root用户分配远程访问权限
执行以下SQL命令,给root用户分配能够从任何主机访问数据库的权限:
alter user 'root'@'%' identified with mysql_native_password by '123456';
这里的%
代表任何主机,可以根据需求替换为特定的IP或主机名。
步骤四:刷新权限
执行以下命令,使权限更改立即生效:
flush privileges;
步骤五:测试连接
在另外的终端或者工具中,使用以下命令测试连接:
mysql -uroot -p123456 -h [服务器地址]
将[服务器地址]
替换为实际的服务器地址。
Docker打包加载在服务器运行springboot程序
Docker是一种非常实用的容器技术,可以方便地将本地开发的程序打包部署到服务器上,避免配置环境的麻烦。以下是将本地Spring Boot程序打包运行在服务器上的步骤:
- 在项目根目录下编写dockerfile文件:
# 基础镜像
FROM openjdk:17-jdk-alpine
# 在运行时自动挂载 /tmp 目录为匿名卷,提高可移植性
VOLUME /tmp
# 将构建的 Spring Boot 可执行 JAR 复制到容器中,重命名为 app.jar
ADD target/youlai-boot.jar app.jar
# 指定容器启动时执行的命令
CMD java \
-Djava.security.egd=file:/dev/./urandom \
-jar /app.jar
# 暴露容器的端口
EXPOSE 8899
- 在项目根目录下运行以下命令进行打包:
docker build -t api:5.0 .
- 生成tar文件,方便移植到服务器进行部署:
docker save -o api5.tar api:5.0
- 将tar文件上传到服务器,并加载到Docker中:
sudo docker load -i api5.tar
- 启动Spring Boot程序容器:
sudo docker run -it --privileged=true --name api /
--link redis:redis --link mysql:mysql /
-p 8899:8899 -d -v /home/shutui/data/files:/files api:5.0
参数解释:
-d, --detach
: 后台运行容器。-p, --publish
: 将容器端口映射到宿主机上。--name
: 为容器指定名称。-v
: 映射宿主机和容器的文件路径。
在spring boot的application.yml中,配置如下:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/demo_db?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true
username: root
password: 123456
data:
redis:
host: redis
port: 6379
password: 123456
其中mysql和redis就是关联的容器名字。
以下是润色和完善后的博客内容:
更新后台程序版本
在这部分中,我将分享如何更新后台程序的 Docker 版本。以下是详细的操作步骤:
1. 中止原有 Docker 容器
首先,我们需要中止当前运行的 Docker 容器。使用以下命令来停止并移除名为 api
的容器:
sudo docker rm -f api
2. 删除原有 Docker 镜像
接下来,我们需要删除旧版本的 Docker 镜像。使用以下命令来删除版本号为 5.0
的 api
镜像:
sudo docker rmi api:5.0
3. 加载新的 Docker 镜像
然后,我们需要加载新的 Docker 镜像。假设新镜像文件名为 api6.tar
,使用以下命令来加载它:
sudo docker load -i api6.tar
4. 启动新的 Docker 容器
最后,我们启动新的 Docker 容器。使用以下命令来运行新版本的 api
容器(版本号为 6.0
):
sudo docker run -it --privileged=true --name api \
--link redis:redis --link mysql:mysql \
-p 8899:8899 -d -v /home/shutui/data/files:/files api:6.0
通过上述步骤,你就可以成功更新后台程序的 Docker 版本。这样可以确保你的后台服务始终运行在最新的环境中,获得最佳的性能和安全性。