Docker部署SpringBoot项目并连接MySQL、Redis
2021/5/5 19:27:31
本文主要是介绍Docker部署SpringBoot项目并连接MySQL、Redis,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Docker部署SpringBoot项目并连接MySQL、Redis
- 服务器域名绑定
- 安装docker
- 安装tomcat
- 安装MySQL
- 安装Redis
- 部署SpringBoot项目
服务器域名绑定
- 新买的腾讯云服务器,如果绑定新买的域名?这里有3个前置步骤:买服务器,买域名,备案。这三个步骤就不一一说了。
- 服务器绑定域名,换种说法就是域名解析的时候解析到你这台服务器上。操作步骤如下
- 点击“前往设置”来设置解析规则
- 在域名列表中选择你想绑定到服务器的域名,点后边的“解析”
- 第三步也就是最后一步,添加解析规则
点击“添加记录”,注意:在你添加之前,这里本身会有几条记录,不用管它(你的记录可能和我这截图里不一样,不用管,我的手动改过),你自己添加的两条记录中,主机记录填一个@,填一个www,记录类型都选A,线路类型默认,记录值填服务器的公网IP,然后直接确认即可。说明:假设域名是abc.xyz,@表示解析abc.xyz,www表示解析www.abc.xyz,所以添加这两条记录后,abc.xyz和www.abc.xyz都能解析到该服务器上。
安装docker
- 我这里是centos系统,安装步骤就官网那几步
# 卸载原来可能有的docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 安装yum-utils sudo yum install -y yum-utils # 指定阿里云仓库地址 sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 配置缓存 sudo yum makecache fast # 安装,默认安装最新版(二选一) sudo yum install docker-ce docker-ce-cli containerd.io # 安装,安装指定版本(二选一) yum list docker-ce --showduplicates | sort -r sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli- <VERSION_STRING> containerd.io # 启动 sudo systemctl start docker # 开机自启 sudo systemctl enable docker
- 一个系统可以安装多个版本的docker吗?会不会冲突
sudo yum install docker-ce docker-ce-cli containerd.io
与直接sudo yum install docker
有啥区别?- 安装成功后,docker默认安装在
/var/lib
中,docker pull
下载的镜像信息会记录在/var/lib/docker/image/overlay2/repositories.json
文件中
安装tomcat
-
这里安装tomcat与部署SpringBoot项目没啥关系,就是玩儿
# 有些容器命令用起来简单,一段时间不用就忘了,这里罗列几个 # 查看所有容器及其详细信息 docker ps -a # 进入容器 docker exec -it 【容器名或容器id】 /bin/bash # 退出容器 exit # 删除容器 docker stop 【容器名或容器id】 docker rm 【容器名或容器id】 # 删除镜像 docker rmi 【容器名或容器id】 # 重启容器,如果修改了挂载目录里的配置文件,可通过docker stop,docker restart来使之生效 docker restart 【容器名或容器id】 # 查看容器启动日志 docker logs 【容器名或容器id】 # 拉tomcat镜像,默认latest docker pull tomcat # 最简单方式运行,-d表示后台运行,两个8080第一个指宿主机的8080端口,第二个8080指容器的8080端口, # 将容器的8080端口映射到宿主机的8080端口上,给容器指定别名tomcat,后面就不用每次都操作容器id docker run -d -p 8080:8080 --name tomcat tomcat # 运行容器后,将需要部署的war包拷贝到webapps目录 # 拷贝方式一,在宿主机上执行docker cp命令 docker cp /usr/local/xxx.war 【容器名或容器id】:/usr/local/tomcat/webapps # 拷贝方式二,在容器内用rz上传,先进入容器 apt update apt install lrzsz rz # 用上述方式运行容器,数据都在容器内,如果容器重启了,那么数据就都丢了,显然不是最好的方式 # 最好的方式是建立容器与宿主机之间的映射,即把容器目录挂载到宿主机上,即使容器重启,只有宿主机上不删除,数据就不会丢 # -v dir1:dir2 就表示容器的目录dir2映射到宿主机的目录dir1上,--restart=always表示docker重启时容器自动重启 docker run -d -p 80:80 --name tomcat -v /root/docker-data/d-tomcat/webapps:/usr/local/tomcat/webapps -v /root/docker-data/d-tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml --restart=always tomcat
-
经过上述方式启动后,修改
/root/docker-data/d-tomcat/conf/server.xml
中的端口为80
,并且加上URIEncoding="UTF-8"
,在/root/docker-data/d-tomcat/webapps/ROOT
下放了一个index.html
,直接通过服务器域名就能访问到。但是,为什么看到的中文是乱码?- 页面
- index.html
- 网上说先看当然容器的编码格式,如果是
POSIX
就通过-e LANG="C.UTF-8"
指定为utf-8
,可我这儿本身就是C.UTF-8
。
-
备份容器
-
备份到本地
# 备份容器为镜像 docker commit -p 【容器id】 【新镜像名,假设为test-backup】 # docker images即可看到新镜像,导出到本地目录 docker save test-backup > /Users/用户名/Desktop/test-backup.tar # 恢复容器,先删除docker里面的镜像 docker rmi test-backup docker images # 导入 docker load < /Users/用户名/Desktop/test-backup.tar # 再看docker中是否存在 docker images
-
备份到远程
# 备份容器为镜像 docker commit -p 【容器id】 【新镜像名,假设为test-backup】 # 用户名密码登录docker docker login # 给镜像加tag docker tag test-backup xxx/mytest:test-backup # 保存 docker push xxx/mytest:test-backup # 如果要恢复,在docker pull docker pull ...
安装MySQL
- 安装MySQL步骤与安装tomcat差不多
# 拉镜像 docker pull mysql:5.7 # 运行容器,指定端口映射,取别名,挂载数据目录,日志目录,配置文件目录,指定密码,自动重启,后台运行 docker run -p 3306:3306 --name mysql -v /root/docker-data/d-mysql/data:/var/lib/mysql -v /root/docker-data/d-mysql/logs:/etc/mysql/logs -v /root/docker-data/d-mysql/conf:/etc/mysql/cnf.d -e MYSQL_ROOT_PASSWORD=123456 --restart=always -d mysql:5.7 # 安装完后,进入容器,进入mysql,密码为123456 # 设置远程登录 use mysql; grant all privileges on *.* to 'root'@'%' with grant option; flush privileges;
- 这里碰到的问题时,设置MySQL远程登录后,本地win10上远程登录成功,登录用的密码是
123456
,然后我进入容器,把容器内MySQL密码改成了root
,之后容器内执行mysql -u root -p
时必须输root
才能进入MySQL,但是win10的远程连接并没有因为修改了密码而断开,并且,后面部署SpringBoot项目时,项目中连接MySQL需要使用123456
这个初始指定的密码,而不是root
安装Redis
# 拉取镜像 docker pull redis:3.2 # 启动,指定端口映射,别名,指定挂载目录,自动启,指定配置文件启动redis-server docker run -d -p 6379:6379 --name redis -v /root/docker-data/d-redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /root/docker-data/d-redis/data:/data --restart=always redis:3.2 redis-server /usr/local/etc/redis/redis.conf
部署SpringBoot项目
- 将SpringBoot项目打成jar包,拷贝到某个目录下,并在该目录下创建
Dockfile
文件
- Dockfile
# 基础镜像使用java FROM java:8 # 维护人,作者 MAINTAINER xxx # VOLUME 指定了临时文件目录为/tmp, # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD express-0.0.1-SNAPSHOT.jar app.jar # 暴露运行端口 EXPOSE 80 # 指定prod环境运行 ENTRYPOINT ["java","-Dspring.profiles.active=prod","-Duser.timezone=GMT+8","-jar","app.jar"]
- 制作镜像并运行
# 制作镜像,注意后面有个点 docker build -t app . # 注意,因为项目中用到了MySQL以及Redis,这里运行容器时,需要指定MySQL以及Redis,也就是上面部署的MySQL和Redis,. # 上述 MySQL和 Redis在执行docker run命令时,我都指定了别名,分别为mysql、redis,所以这里可以直接用这些别名,docker就会通过别名找到对应容器 # 通过--link参数即可使用容器,比如 --link mysql:conf-mysql,mysql即别名,conf-mysql即我所用的mysql的host,也就是我在application.yaml里面配mysql地址时配的是jdbc:mysql://conf-mysql:3306/【数据库】/xxx docker run --link mysql:conf-mysql --link redis:conf-redis -d -p 80:80 app
这篇关于Docker部署SpringBoot项目并连接MySQL、Redis的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略