2020-03-03 09:30:32

Spring Cloud 微服务入门教程(十二):Spring Cloud Docker 容器化部署


Spring Cloud 微服务入门教程(十二):Spring Cloud Docker 容器化部署

上一节我们讲了服务跟踪和链路监控以后,基本微服务框架的大体已经快要结束了,在伴随微服务中的部署肯定离不开Docker,那么我们如何构建一个Docker的镜像呢?本节我们就讲一下把代码打包成镜像文件,并上传到镜像仓库中。

Dockerfile的介绍

由于主题是将微服务,Docker相关的内容不深入讲解,如果对Docker一无所知,还需要先简单了解下Docker,咱们只聊你够用的知识就可以了。在Docker中创建镜像最常用的方式,就是使用Dockerfile。Dockerfile是一个Docker镜像的描述文件。Dockerfile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

我们给每个模块下面都新建一个Dockerfile文件,内容参考如下:

#基于OpenJDK8镜像
FROM openjdk:8
#维护者和联系方式
MAINTAINER RenFei i@renfei.net
#将Maven打包的Jar添加到镜像中
ADD target/*.jar app.jar
#开启 8761端口
EXPOSE 8761
#入口点,镜像从这里开始执行
ENTRYPOINT ["java","-jar","app.jar"]

然后运行 docker build -t <标签名> 构建镜像,再运行 doucker push <仓库地址> 将镜像推送到远程镜像仓库中。每次都得手动输入命令太繁琐,我们可以写一个shell脚本来完成一系列的动作,我们再新建一个build.sh文件。

build.sh脚本

为了简便我们的操作我们新建一个脚本,Linux和Mac的同学是shell脚本就是build.sh,Windows的同学需要新建批处理文件build.bat,并且命令有所不同,我这里演示的使用Mac环境,代码如下:

#!/usr/bin/env bash
mvn clean package -Dmaven.test.skip=true -U
docker build -t XXXXXX
doucker push XXXXXX

执行这个脚本就可以帮我们使用Maven打包并且构建镜像和推送镜像,一气呵成

运行镜像

镜像本地build构建完成以后,就可以再本地运行了,运行的命令是 docker run -p <本机端口>:<容器里端口> -d <镜像名称>,例如:docker run -p 8761:8761 -d renfei/eureka 就可以启动注册中心模块了。

如果提示不可执行,还需要一个命令 chmod +x build.sh 给文件可执行的权限。

关于镜像仓库

镜像仓库的提供方有很多,可以自己建私有仓库,也可以使用官方的DockerHub,网易云和阿里云也提供仓库服务,一般自己练习的话国内使用网易云的人比较多。


商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.renfei.net/posts/1003334
评论与留言
以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。

本站有缓存策略,时间约2小时后能看到您的评论。本站使用自动审核机制,如果您的内容包含广告/谩骂/恐怖/暴力/涉政等不和谐内容将无法展示!


本站有缓存策略,时间约2小时后能看到您的评论。本站使用自动审核机制,如果您的内容包含广告/谩骂/恐怖/暴力/涉政等不和谐内容将无法展示!

关注任霏博客
扫码关注「任霏博客」微信订阅号
微博:任霏博客网
Twitter:@renfeii
Facebook:任霏
最新留言 感谢🙏,第一个问题是空格的问题应该,我逐字敲完后可以构建了.第二个问题是我docker环境的问题,docker更新为最新版后需要重置配置文件.现已经正常使用,再次感谢您的分享和您的细心解答,期待下次相遇😄 还有一个问题可以请教下吗?就是我在容器里建文件夹没有权限,su root后密码不知道是多少,sudo mkdir xxx 提示我,没有sudo命令,请问有好的解决方法吗?谢谢解答 -v 后面可以指定文件吗 我的也是报错,还有。我执行了这个:@localhost kingbase-es-v8-r3-docker % docker run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /opt/kingbase/data:/opt/kingbase/data -v /opt/kingbase:/opt/kingbase/Server/bin kingbase:v8r3 docker: 'run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /opt/kingbase/data:/opt/kingbase/data -v /opt/kingbase:/opt/kingbase/Server/bin kingbase:v8r3' is not a docker command. See 'docker --help' 麻烦帮忙看下,是不是我写的命令有问题,还是版本问题,谢谢啦 请问我build的时候一直报错,是资源没了吗?failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head "https://reg-mirror.qiniu.com/v2/library/centos/manifests/7?ns=docker.io": Moved Permanently 能不能在代码那里详细解释一下啊,没完全懂呀 en 按照路径上的来操作的,但是启动时一直报:zsh: no such file or directory: docker run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /Volumes/installation/opt/kingbase/data:/opt/kingbase/data -v /Volumes/installation/opt/kingbase/bin/license.dat:/opt/kingbase/Server/bin/license.dat kingbase:v8r3 错误 博主,怎么没有spark入门教程? 亲测可用,十分感谢。 讲得好 我想提示博主,Adblock 广告屏蔽插件被启用提示这个弹窗非常不友好。它唯一的作用是影响用户阅读,甚至厌恶了离开。没有哪个用户会为了某一个站点而关闭防广告插件,因为这对于用户是不明智也不理智的,最终的伤害是贵站。