首页 > 技术文章 > docker部署springboot项目

adidasshe 2020-05-19 16:14 原文

安装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

推荐阅读