diff --git a/SUMMARY.md b/SUMMARY.md index 8a1da10..77bb4d5 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -13,4 +13,6 @@ * [第3节:Turbine](chapter5/5.3 Turbine.md) * [第6章:配置中心](chapter6/6 配置中心.md) * [第7章:API Gateway](chapter7/7 API Gateway.md) +* [第8章:使用Docker构建微服务](chapter8/8 使用Docker构建微服务.md) + * [第1节:使用Maven插件构建Docker镜像](chapter8/8.1 使用Maven插件构建Docker镜像.md) diff --git "a/chapter8/8 \344\275\277\347\224\250Docker\346\236\204\345\273\272\345\276\256\346\234\215\345\212\241.md" "b/chapter8/8 \344\275\277\347\224\250Docker\346\236\204\345\273\272\345\276\256\346\234\215\345\212\241.md" index e69de29..68258a9 100644 --- "a/chapter8/8 \344\275\277\347\224\250Docker\346\236\204\345\273\272\345\276\256\346\234\215\345\212\241.md" +++ "b/chapter8/8 \344\275\277\347\224\250Docker\346\236\204\345\273\272\345\276\256\346\234\215\345\212\241.md" @@ -0,0 +1,14 @@ +# 第8章:使用Docker构建微服务 + +Docker是一个新生事物。Docker是什么,能做什么,有什么优缺点,以及其如何入门不在本文讨论范围。关于Docker的入门教程网上有很多,笔者也打算近期将使用Docker一年多的经验进行总结,同样以Gitbook的形式开源出来。故而闲言碎语就不多说了,本文直接讲述如何使用Maven构建微服务Docker镜像,以及使用Docker构建微服务。 + + + +### 准备工作 + +| 安装软件 | 功能 | 必要程度 | +| --------- | -------------- | ---- | +| Docker | Docker | 是 | +| Kitematic | Docker的GUI管理工具 | 建议安装 | + + diff --git "a/chapter8/8.1 \344\275\277\347\224\250Maven\346\217\222\344\273\266\346\236\204\345\273\272Docker\351\225\234\345\203\217.md" "b/chapter8/8.1 \344\275\277\347\224\250Maven\346\217\222\344\273\266\346\236\204\345\273\272Docker\351\225\234\345\203\217.md" new file mode 100644 index 0000000..15f5cf1 --- /dev/null +++ "b/chapter8/8.1 \344\275\277\347\224\250Maven\346\217\222\344\273\266\346\236\204\345\273\272Docker\351\225\234\345\203\217.md" @@ -0,0 +1,225 @@ +# 第1节:使用Maven插件构建Docker镜像 + +### 工具 + +工欲善其事,必先利其器。笔者经过调研,有以下几款Docker的Maven插件进入笔者视野: + +| 插件名称 | 官方地址 | +| ------------------- | ---------------------------------------- | +| docker-maven-plugin | https://github.com/spotify/docker-maven-plugin | +| docker-maven-plugin | https://github.com/fabric8io/docker-maven-plugin | +| docker-maven-plugin | https://github.com/bibryam/docker-maven-plugin | + +笔者从Stars、文档易用性以及更新频率三个纬度考虑,选用了第一款。 + + + +### 使用插件构建Docker镜像 + +#### 简单使用 + +我们以之前的项目:microservice-discovery-eureka为例: + +1. 在pom.xml中添加下面这段 + +```xml + + + + + com.spotify + docker-maven-plugin + 0.4.12 + + + + microservice-discovery-eureka + java + ["java", "-jar", "/${project.build.finalName}.jar"] + + + / + ${project.build.directory} + ${project.build.finalName}.jar + + + + + + +``` + +2. 执行命令: + +```shell +mvn clean package docker:build +``` + +3. 进入漫长的等待后(当然可以使用国内的Docker镜像加速,譬如DaoCloud),我们会发现控制台有类似如下内容: + +``` +[INFO] Building image microservice-discovery-eureka +Step 1 : FROM java + ---> ea40c858f006 +Step 2 : ADD /microservice-discovery-eureka-0.0.1-SNAPSHOT.jar // + ---> 7e192e0639b6 +Removing intermediate container b76d530b8558 +Step 3 : ENTRYPOINT java -jar /microservice-discovery-eureka-0.0.1-SNAPSHOT.jar + ---> Running in 54f4639386a5 + ---> 502c73acf139 +Removing intermediate container 54f4639386a5 +Successfully built 502c73acf139 +[INFO] Built microservice-discovery-eureka +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +``` + +恭喜,构建成功了。 + +5. 我们打开Kitematic,会发现其上已经刚刚构建好的Docker镜像了,如下图 + + ![Kitematic](images/docker-1.png) + +6. 点击Create按钮,我们会发现该Docker镜像会很快地启动。 + +7. 停止镜像,点击Settings,我们将8761端口映射出去 + + ![设置镜像](images/docker-2.png) + +8. 访问测试: + + 访问[http://localhost:8761](http://localhost:8761) ,能够正常看到Eureka界面。 + + + + +#### 使用Dockerfile进行构建 + +上文讲述的方式是最简单的方式,很多时候,我们还是要借助Dockerfile进行构建的,首先我们在/microservice-discovery-eureka/src/main/docker目录下,建立文件Dockerfile + +``` +FROM java:8 +VOLUME /tmp +ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar +RUN bash -c 'touch /app.jar' +EXPOSE 9000 +ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] +``` + +修改pom.xml + +```xml + + + + + com.spotify + docker-maven-plugin + 0.4.12 + + + + microservice-discovery-eureka-dockerfile + + ${project.basedir}/src/main/docker + + + / + ${project.build.directory} + ${project.build.finalName}.jar + + + + + + +``` + +其他步骤一样。这样即可使用Dockerfile进行构建Docker镜像啦。 + + + +#### 将Docker镜像push到DockerHub上 + +1. 首先修改Maven的全局配置文件settings.xml,添加以下段落 + +```xml + + + docker-hub + 你的DockerHub用户名 + 你的DockerHub密码 + + 你的DockerHub邮箱 + + + +``` + +2. 在DockerHub上创建repo,例如:test,如下图 + + ![DockerHub](images/docker-3.png) + +3. 项目pom.xml修改为如下:注意imageName的路径要和repo的路径一致 + + ```xml + + + + + com.spotify + docker-maven-plugin + 0.4.12 + + + + + eacdy/test + + ${project.basedir}/src/main/docker + + + / + ${project.build.directory} + ${project.build.finalName}.jar + + + + docker-hub + https://index.docker.io/v1/ + + + + + ``` + +4. 执行命令: + + ```shell + clean package docker:build -DpushImage + ``` + +5. 搞定,等构建成功后,我们会发现Docker镜像已经被push到DockerHub上了。 + + + +#### TIPS + +1. imageName必须符合正则[a-z0-9-_.],否则将会构建失败 +2. 该插件还有其他的使用方法,譬如将构建Docker镜像绑定在某个Maven的phase上执行、譬如对Docker密码的加密等等。文档[https://github.com/spotify/docker-maven-plugin](https://github.com/spotify/docker-maven-plugin)上写得非常清楚,不做赘述了。 + + + + +#### 代码地址(任选其一) + +> [https://git.oschina.net/itmuch/spring-cloud-study/tree/master/docker/microservice-discovery-eureka](https://git.oschina.net/itmuch/spring-cloud-study/tree/master/docker/microservice-discovery-eureka) +> +> [https://github.com/eacdy/spring-cloud-study/tree/master/docker/microservice-discovery-eureka](https://github.com/eacdy/spring-cloud-study/tree/master/docker/microservice-discovery-eureka) + + + +#### 参考文档 + +> [http://developer.51cto.com/art/201404/434879.htm](http://developer.51cto.com/art/201404/434879.htm) \ No newline at end of file diff --git a/chapter8/images/docker-1.png b/chapter8/images/docker-1.png new file mode 100644 index 0000000..b1d1bc3 Binary files /dev/null and b/chapter8/images/docker-1.png differ diff --git a/chapter8/images/docker-2.png b/chapter8/images/docker-2.png new file mode 100644 index 0000000..6ba4bad Binary files /dev/null and b/chapter8/images/docker-2.png differ diff --git a/chapter8/images/docker-3.png b/chapter8/images/docker-3.png new file mode 100644 index 0000000..19b56ee Binary files /dev/null and b/chapter8/images/docker-3.png differ