docker部署springboot项目
安装docker
yum install docker
#检验安装是否成功
[root@Meshpower-on-ali ~]# docker --version
Docker version 19.03.5, build 633a0ea
#启动 systemctl start docker #换镜像源 sudo vim /etc/docker/daemon.json 内容如下: { "registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"] } 保存退出,重启docker #重启 systemctl restart docker
安装redis
首先上dockerHub搜索redis,点击进入详情页之后,拉到下面就可以看到how to use,如果需要选择特定的版本,有Supported tags给我们选择,然后如果拉取最新的版本的话,拉倒下面就教程。
- https://hub.docker.com/_/redis
-
#拉取redis的镜像 docker pull redis #查看本地redis镜像 docker images #运行redis docker run --name myredis -p 6379:6379 -d redis redis-server --appendonly yes
- docker run表示运行的意思
- --name myredis 表示起个名字叫myredis
- -p 6379:6379表示把服务器的6379映射到docker的6379端口,这样就可以通过服务器的端口访问docker的端口
- -d 表示以后台服务形式运行redis
- redis redis-server --appendonly yes表示开启持久化缓存模式,可以存到硬
安装mysql
- https://hub.docker.com/_/mysql
-
MYSQL_ROOT_PASSWORD=admin表示root的初始密码
mysql:5.7.27表示操作的是mysql的5.7.27版本,没有后面的版本号的话,默认是拉取最新版本的mysql。
docker pull mysql:5.7.27 docker run --name mymysql -e MYSQL_ROOT_PASSWORD=admin -d -p 3306:3306 mysql:5.7.27
springboot项目打包(jar)
使用maven项目打包成.jar,上传到服务器自定义任意位置(具体步骤略)
构建springboot项目的docker镜像
在jar包文件相同目录下创建文件 Dockerfile 内容如下:
# 该镜像需要依赖的基础镜像 FROM java:8 # 将当前目录下的jar包复制到docker容器的/目录下 ADD admin-0.0.1-SNAPSHOT.jar /ipm2020.jar # 声明服务运行在8082端口 EXPOSE 8082 # 指定docker容器启动时运行jar包 ENTRYPOINT ["java", "-jar","/ipm2020.jar"] # 指定维护者的名字 MAINTAINER adidasshe
自动化脚本
相同目录下创建 run.sh 内容如下:
#!/usr/bin/env bash # 定义应用组名 group_name='mp' # 定义应用名称 app_name='ipm2020' # 定义应用版本 app_version='0.0.1-SNAPSHOT' # 定义应用环境 (这里演示的是dev环境有利于查看部署成功后的swagger接口文档) profile_active='dev' echo '----copy jar----' docker stop ${app_name} echo '----stop container----' docker rm ${app_name} echo '----rm container----' docker rmi ${group_name}/${app_name}:${app_version} echo '----rm image----' # 打包编译docker镜像 docker build -t ${group_name}/${app_name}:${app_version} . echo '----build image----' docker run -p 8082:8082 --name ${app_name} \
--link mysql:db \ -e 'spring.profiles.active'=${profile_active} \ -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime \ -v /opt/java/${app_name}/logs:/var/logs \ -d ${group_name}/${app_name}:${app_version} echo '----start container----'
注:--link mysql:db \
这里因为mysql跟项目服务运行在不同容器中需要链接才能访问 ,对应的yml配置中mysql datasource为
spring: datasource: url: jdbc:mysql://db:3306/ipm2020?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
运行
在同目录下 运行
./run.sh
如图
查看接口
输入http://服务器IP:8082/swagger-ui.html