Docker:通过DockerFlie发布Springboot应用

 

Docker命令大全

前期准备

1、准备好CentOS7.6系统的服务器环境。

2、在服务器上搭建好docker环境,可以参考CentOS7.6离线安装Docker,当然如果网络条件可以可以参考菜鸟教程的Docker安装教程。

3、其次搭建好数据库,如果是mysql数据库可以参考CentOS7离线安装Mysql5.7。数据库建议直接安装在服务器上,不要采用docker镜像方式创建数据库镜像。数据库搭建好后,记得配置防火墙开放3306端口,否则外部无法访问此数据库。具体命令可以参见此博客的结尾部分。

JDK准备

我本次采用openjdk8镜像, 此镜像大家可以通过docker search直接搜索,然后docker pull拉去,只要是符合你自己需要的jdk即可,或者你自己同Dockerfile构建一个jdk镜像。

SpringBoot应用Jar包准备

Springboot应用在IDEA中通过Maven的package命令直接生成相应的Jar文件,此处以eureka为例,将生成好的eureka.jar文件拷贝至CentOS服务器的/usr/local/temp目录下(目录自己创建一下),后续文件统一放在这个目录下面。

Dockerfile

  创建用于构建Springboot应用镜像的Dockerfile文件,并将此文件拷贝至/usr/local/temp目录下。Dockerfile文件必须和Springboot应用的jar包放在同一个目录下,否则就必须在Dockerfile文件中指定挂载目录。

  Dockerfile文件内容如下:

#依赖镜像
FROM openjdk8:latest
#构建者
MAINTAINER Snow.Zhou
ADD eureka.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#开启内部服务端口
EXPOSE 8761

其中 ADD 命令后面的 eureka.jar就是你自己的应用jar包的名字,另外EXPOSE是指定应用在容器内使用的端口,此处你可以根据自己需要设置自己的端口,在docker run的时候必须做宿主机端口与此容器端口的映射,否则无法访问应用,不设置端口默认80端口。具体映射后面会讲到。

创建和运行镜像

   1、通过docker build命令创建镜像,注意后面必须有个点(.),表示当前目录

[root@localhost temp]# docker build -t eureka .

      执行后会打印相应步骤的日志step ,并提示Successfully,详细日志这里就不展示了。可以通过docker images命令查看创建好的镜像。

   2、运行docker镜像,执行docker run命令,此处 -p 后面就是端口映射,表示将宿主服务器的8761端口映射到eureka这个容器的8761端口, -d 表示后台运行

[root@localhost temp]# docker run -p 8761:8761 -d eureka /bin/bash;

       执行成功后会打印一串字符,可以不用关注此字符串

至此Springboot应用就发布好了,可以通过网页访问相应地址既可。

需要注意的事项

Dokcer容器启动成功后,可能出现无法访问应用的情况,导致的原因有多种,最直接的可能是CentOS7的防火墙拦截了你的应用端口导致外部无法访问,其次就是docker容器通信有问题,可以查看容器日志了解情况。因为CentOS7自身的防火墙默认是开着的,想正常访问只有两个办法:一是关闭防火墙;二是配置防火墙白名单规则。当然我的建议是配置白名单的方式,比较服务器安全应该考虑在第一位。如果你只是做测试什么的那你可以直接关闭防火墙。

    1、防火墙规则配置

     通过以下命令,打开防火墙的公共配置文件public.xml

[root@localhost temp]# vi /etc/firewalld/zones/public.xml 

     并在文件中的<zone></zone>标签内的最后位置添加以下内容

<rule family="ipv4">
    <source address="172.17.0.0/16" />
    <accept />
</rule>

     其中address的172.17.0.0/16表示匹配172.17.xx.xx IP段所有IP,不需要配置端口。

     当然如果你只想放开某个特定的端口,比如前面提到的Mysql数据库的3306端口,你可以在此文件中添加:

<port protocol="tcp" port="3306"/>

    或者,通过命令的方式进行添加,如:

# 开放3306端口
[root@localhost temp]# firewall-cmd --permanent --add-port=3306/tcp

   2、Springboot应该自身原因,可以通过docker logs命令查看容器内的运行日志情况,进行进一步的判断。

[root@localhost temp]# docker logs -f b1bb;

     这里命令中的 b1bb是docker的容器ID,只需要前4位即可。可以通过docker ps 命令查看所有的容器,获得你自己容器的ID。

至此整个发布结束。有其他问题的可以一起探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天使马克

写博客不易,客观打赏一下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值