专栏《每天10分钟玩转Spring Cloud基础》已经更新完成。本篇将介绍一下如何使用IDEA中的Docker插件将各个微服务部署到远程的服务器。

小编使用的是一台腾讯云的服务器,安装了centos7.6操作系统。因为是测试,所以把服务器上的所有进入端口都打开了。方便后续访问的时候每个端口都要配置一次安全组。

安装配置Docker环境
1、 docker安装:运行yum install docker命令,直接从docker.io中*载下**docker并安装。一键安装成功。

2、 编辑docker.service文件。
2.1、vi /usr/lib/systemd/system/docker.service

2.2、找到ExecStart属性,将属性值修改成:/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock。保存退出

3、 启动docker:运行service docker start命令启动docker。一些docker的基本命令见下图

配置IDEA的Docker环境
1、 安装docker插件:IDEA-->File-->Setting-->Plugins 搜索docker。如果没安装过直接安装并重启IDEA。下图是已经安装过的示例。

2、 配置IDEA连接到远程的Docker:File-->Setting-->Build,Execution,Deployment-->Docker

部署Eureka Server
1、 编写Dockerfile
这里我们先部署Eureka Server,看过我专栏的朋友都知道Eureka Server是一个名叫discovery-centre的module。在这个module的根目录下创建一个名为Dockerfile的文件。内容如下:

2、 编辑启动容器的配置



3、 将整个项目打包。maven运行clean package。
部署workflow-service服务
workflow-service是一个Eureka Client,这个服务将要注册到上面的Eureka Server上。其他配置与Eureka Server都相同,但有一个重要的注意事项:
1、 首先要进入Eureka Server的Docker容器,查看器host文件,看这个容器对外的IP是多少。
1.1、 进入Eureka Server容器内部,执行命令:docker exec –it discovery-centre /bin/sh
1.2、 查看host文件,执行命令:cat /etc/hosts
2、 将workflow-service的连接Eureka Server配置的defaultZone修改成对应的IP。
3、 重新给workflow-service打包,执行mvn clean package。
以上三步切记一定要做,否则workflow-service将无法注册到Eureka Server。
启动测试
1、 启动discovery-centre。直接在菜单栏选中Docker-discovery-centre并运行即可。这里的启动包含了两个步骤,一是重新编译镜像,二是针对编译好的镜像启动容器。



2、 启动workflow-service。
访问http://IP:8761/查看Eureka Server。

FAQ
1、 Failed to deploy 'discovery-centre Dockerfile: discovery-centre/Dockerfile': com.github.dockerjava.api.exception.NotFoundException: {"message":"driver failed programming external connectivity on endpoint discovery-centre (d675671a77cb6f0d51c122571c4b19b9571c64b386721e5ad69d6c5e9d9a6f6f): exec: \"docker-proxy\": executable file not found in $PATH"}
这里是需要执行一个docker-proxy的命令,可是没有找到。这个命令其实就是docker-proxy-current。我们进入/usr/libexec/docker目录,
执行 ln –s docker-proxy-current docker-proxy
2、Failed to deploy 'discovery-centre Dockerfile: discovery-centre/Dockerfile': com.github.dockerjava.api.exception.InternalServerErrorException: {"message":"shim error: docker-runc not installed on system"}
这里是需要执行一个docker-runc的命令,可是没有找到。这个命令其实就是docker-runc-current。我们进入/usr/libexec/docker目录,
执行 ln –s docker-runc-current docker-runc