Docker学习之部署SpringBoot微服务
步骤
这里我们以短信、邮件发送服务为例,演示整个过程,目录下事先生成了相关启动JAR,项目采用 springboot+dubbo对外提供RPC服务。
创建 Dockerfile 文件
# 基础镜像:仓库是java
FROM java : 7 - jre
# 当前镜像的维护者和联系方式
MAINTAINER itstyle 345849402@qq . com
# 挂载卷
VOLUME / tmp
# 将打包好的springBoot程序拷贝到容器中的指定位置
ADD itstyle_send . jar / opt / app . jar
# 容器对外暴露端口
EXPOSE 8080
# 容器启动后需要执行的命令(ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","-Denv=DEV","/opt/app.jar"])
CMD java - Djava . security . egd = file : /dev/ ./ urandom - jar / opt / app . jar
执行 docker build 进行构建
执行docker build命令,docker就会根据Dockerfile里你定义好的命令进行构建新的镜像。
docker build - t itstyle_send : v1 .
构建过程
Sending build context to Docker daemon 100.6 MB
Step 1 : FROM java : 7 - jre
Trying to pull repository docker . io / library / java ...
7 - jre : Pulling from docker . io / library / java
5040bd298390 : Pull complete
fce5728aad85 : Pull complete
c42794440453 : Pull complete
9789263043d1 : Pull complete
028c93201aa7 : Pull complete
Digest : sha256 : 6fb55e5ffc4ce926c320faa5fb807ed1bccd84ccbbe278109c67c5b38684e633
---> b0006d129082
Step 2 : MAINTAINER itstyle 345849402@qq . com
---> Running in 3eb849897209
---> 804057905232
Removing intermediate container 3eb849897209
Step 3 : VOLUME / tmp
---> Running in 60c526a95e46
---> dc3d00181d4a
Removing intermediate container 60c526a95e46
Step 4 : ADD acts_send . jar / opt / app . jar
---> e55343642421
Removing intermediate container 09b296b4e9a3
Step 5 : EXPOSE 8080
---> Running in fb4d820d9a91
---> da660a4e78e3
Removing intermediate container fb4d820d9a91
Step 6 : CMD java - Djava . security . egd = file : /dev/ ./ urandom - jar / opt / app . jar
---> Running in adb0a7921410
---> 0b7adaac48d9
Removing intermediate container adb0a7921410
Successfully built 0b7adaac48d9
查看镜像
docker images
如果出现以下说明构建成功:
REPOSITORY TAG IMAGE ID CREATED SIZE
itstyle_send v1 0b7adaac48d9 7 minutes ago 374.5 MB
开发者可以把自己制作的镜像push到远端仓库,在任何一个系统上pull下来就可以直接部署了,做到一处制作,到处运行。
创建并运行容器
docker run - d -- name itstyle_send - p 8080 : 8080 itstyle_send : v1
查看日志
docker logs - f itstyle_send
问题
不过这里有一个问题,最终导致服务并没有启动成功。由于服务对外提供 RPC 服务,使用 zookeeper 作为注册中心,而容器并不能访问宿机以及相关内网网段的IP。
宿机网段:192.168..容器网段:172.17..
解决方案
如果多台服务器在一个局域网,可以把容器跟宿机配置成一个网段。
如果是外网地址,使用zookeeper中节点digest授权认证或者防火墙安全组。