springboot 项目 docker容器实现 jar 与 mysql redis容器互联发布应用

springboot 项目打包后,生成JAR包后,要么通过服务的形式的发布,要么通过打WAR包放到TOMCAT中的发布,这里我们介绍通过使用容器化的技术,实现JAR包的应用容器与mysql容器和redis容器来进行应用的发布

[原创,转载就注明出处]

一  mysql 容器

docker run -d -p 0.0.0.0:3307:3306 --network my-net --restart=always -e MYSQL_ROOT_PASSWORD="whyl@20200810" --name=mysql57 -v /etc/localtime:/etc/localtime -v $PWD/my.cnf:/etc/my.cnf -v $PWD/data:/var/lib/mysql mysql:5.7 --default-authentication-plugin=mysql_native_password

一般使用mysql 5.7这个版本,这里需要注意的是:一定要将本地的localtime映射到容器中,使容器的时间与宿主机的时间同步,【-v /etc/localtime:/etc/localtime 】

$PWD/my.cnf:/etc/my.cnf    这是将当前目录下的mysql的配置文件映射到容器的mysql中去

 

创建好mysql 容器后,可以通过navicate尝试远程连接,使用设置的用户名和密码,这里我们后面是通过内部容器互联来联接mysql 的,在我们的应用联接的yaml配置中,后面你会发现,仍然使用的是3306端口,而不是这里映射的宿主机的3307,在这里,我特意,设置一个不一样的端口好区分后面的联接配置

 

二   redis容器

docker run --name redis -p 6380:6379 redis --requirepass 123456

这里也故意使宿主机的映射端口与redis的默认端口不一样,以便后续方便理解区分

 

三  发布应用

1 首先要打jar包的镜像

 

 在当前目录下  创建Dockerfile,Dockerfile的内容如下

FROM java:8
MAINTAINER wy
ADD core-1.0.jar myjar.jar
ADD ./bannerimgs ./bannerimgs
EXPOSE 9080
ENTRYPOINT ["java","-jar","myjar.jar","--spring.profiles.active=prod","--server.port=9080"]

ADD core-1.0.jar myjar.jar  意思是把当前目录下的core-1.0.jar  拷贝到容器中去  并命名为myjar.jar

ENTRYPOINT ["java","-jar","myjar.jar","--spring.profiles.active=prod","--server.port=9080"]   容器镜像启动脚本  这里可以按具体的要求自己添加springboot javar -jar 相关参数

2.  应用启用的配置文件,如何配置

spring:
## profiles: dev
#redis配置
redis:
database: 8
host: redis
port: 6379
password: 123456 # 密码(默认为空)
time out: 6000 # 连接超时时长(毫秒)
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 5 # 连接池中的最小空闲连接
# 数据源配置
datasource:
url: jdbc:mysql://mysql:3306/mydbname?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&tinyInt1isBit=true
username: root
password: whyl@20200810

要特别注意,标红的几个地方,要与容器设置的一样,
redis的host这里直接写的redis,就是我们的起的redis容器名,连接密码,端口,均写的是redis容器的,而不是映射主机的端口,要特别注意
mysql的host这里要直接写mysql的容器名mysql57,连接端口是3306,容器内部端口,而不是3307,用户名和密码是容器mysql启动时预设置的

3.  打应用的镜像

docker build -t myapplicationImage  .

注意后面的小点,意思是使用当前的dockerfile

 

4.  启动应用,注意写法:

docker run -p 80:9080  --name myapp  --link  mysql57:mysql --link redis:redis -d -v $PWD/bannerimgs:/bannerimgs  myapplicationImage

注意:

--link  mysql57:mysql    容器名:别名,这里别名,就是我们在应用程序中配置的别名,如   url: jdbc:mysql://mysql   这里的mysql 就是连接着容器mysql57,

--link redis:redis    容器名:别名,这里的别名,就是我们在应用中配置的别名:

redis:
database: 8
host: redis

四  启动后,我们可以看看应用是否正常

docker logs myapp  查看应用的容器是否正常

 

五  补充

当然,后面有docker-compose后,我们可以直拉通过一个docker-compose脚本来实现,容器的编排,但是原理上其实是一样的,只是把上面的步骤放到一个yaml文件中,然后进行启动

posted @ 2020-09-06 17:34  不卷轮子锅  阅读(1106)  评论(0编辑  收藏  举报