手把手使用Docker搭建SpringBoot微服务镜像

一、环境准备

1、安装好Docker环境的Linux机器(安装教程

2、准备好SpringBoot项目打包好的可运行jar包

二、编写Dockerfile

1、首先将SpringBoot打包好的jar包和自己的配置文件打包成一个tar.gz压缩包,与下面的Dockerfile文件放到同级目录下

2、创建一个Dockerfile文件(touch Dockerfile),内容如下

FROM java:8

MAINTAINER orange "aaa@qq.com"

#定义服务端口
ENV SERVICE_PORT 80
#定义服务Id
ENV SERVICE_ID micoService
#定义工作目录
ENV WORK_PATH /work/

#创建工作目录
RUN mkdir -p $WORK_PATH
#跳转工作目录
WORKDIR ${WORK_PATH}

#将版本文件添加到容器中
ADD ${SERVICE_ID}.tar.gz ${WORK_PATH}

#运行服务
ENTRYPOINT java -jar *.jar

#开放服务端口
EXPOSE 80

3、命令解释

(1)第1行指定了继承于一个带有java8环境的镜像,新的镜像会以这个环境为基础进行拓展

(2)第3行用来指定本镜像的作者以及email等信息

(3)第5-9行,定义一些环境变量,后续的命令可以引用这个变量

(4)第12行,执行了RUN命令,相当于执行一条shell命令,这里是创建了一个目录,并引用了上面定义的环境变量

(5)第14行,切换目录,后续的命令都会在这个目录下执行,相当于cd到一个目录

(6)第17行,这里将一个外部文件引入到镜像中来,相当于从物理机复制到镜像中,ADD命令在引入压缩包文件时,会自动解压到镜像中,然后删掉压缩包,不需要再执行解压命令,这时候SpringBoot的相关文件已经引入到镜像

(7)第20行,使用ENTRYPOINT命令来启动jar包,这里用*匹配jar文件名,这里的ENTRYPOINT命令和RUN命令同样是执行命令,但是用处有本质的区别:RUN命令是在构建镜像时执行的操作,可以执行多条;ENTRYPOINT命令是运行镜像时执行的操作,只可以执行一条,即使定义了多条,也只会执行最后一条,当容器启动时,会将SpringBoot项目运行起来

(8)第23行,开放容器的端口,将SpringBoot项目运行的端口开放出来

三、运行容器

1、首先构建容器,cd到刚才Dockerfile文件的目录下,执行以下命令来构建镜像

sudo docker build -t="test/mico_service" .

说明:-t参数用来指定生成docker镜像的仓库和镜像名,test为仓库名,/后为镜像名,命令时不能使用大写字母,其正则表达式如下,最后面的点来指定Dockerfile的位置,因为已经cd到当前目录了,所以写点即可

[a-z0-9](?:-*[a-z0-9])*(?:[._][a-z0-9](?:-*[a-z0-9])*)*

构建过程:第一次构建会先下载父容器的镜像,需要一点时间,docker有构建缓存机制,即使构建失败,会缓存成功的步骤,编辑也是如此,只会从变化的指令开始重新执行

Sending build context to Docker daemon 77.21 MB
Step 1 : FROM java:8
 ---> c435c0fb17b9
Step 2 : MAINTAINER orange "aaa@qq.com"
 ---> Using cache
 ---> 64c597579cc9
Step 3 : ENV SERVICE_PORT 80
 ---> Using cache
 ---> 5a7d9747f231
Step 4 : ENV SERVICE_ID micoService
 ---> Using cache
 ---> ec782f391eca
Step 5 : ENV WORK_PATH /work/
 ---> Using cache
 ---> e74caaf061e3
Step 6 : RUN mkdir -p $WORK_PATH
 ---> Using cache
 ---> 748e1917f98e
Step 7 : WORKDIR ${WORK_PATH}
 ---> Using cache
 ---> 506849324c97
Step 8 : ADD ${SERVICE_ID}.tar.gz ${WORK_PATH}
 ---> Using cache
 ---> b9a61079433e
Step 9 : ENTRYPOINT java -jar *.jar
 ---> Using cache
 ---> f25f3a4b9ec2
Step 10 : EXPOSE 80
 ---> Using cache
 ---> f39242b104a1
Successfully built f39242b104a1

2、构建好容器后,可以使用如下命令来查看本地的镜像列表

sudo docker images

3、启动镜像

sudo docker run -d -p 8080:80 --name mymico test/mico_service

说明:-d参数表明启动镜像作为一个守护进程,在后台一直运行,-p用来指定镜像的端口映射,如上就是将docker容器的80端口映射到主机的8080端口,--name来指定启动容器的名称,最后面的参数就是容器仓库名/容器名

4、查看镜像运行状态

(1)这时可以访问主机8080端口上的http接口,查看是否正常返回

(2)使用如下命令查看运行中的docker镜像

sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
686b903252d1        test/mico_service    "/bin/sh -c 'java -ja"   5 minutes ago       Up 5 minutes        0.0.0.0:8080->80/tcp      mymico

5、停止容器,使用如下命令来停止容器,参数为CONTAINER ID

sudo docker stop 686b903252d1

 

转载于:https://www.cnblogs.com/orange911/p/9090209.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程介绍 【完善体系+精品资料】本课程总计115课时,打造全网最全的微服务体系课程;从微服务是什么、能够做什么开始讲起,绝对零基础入门到精通类型。课程整体脉络十分清晰,每个章节一个知识点,画图+源码+运行讲解,不信你学不会。1、课程先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。2、从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。3、讲解Spring Boot 与 Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码学习服务的远程调用。7、为了解决服务之间的稳定性,避免发生雪崩问题,我们引入了Hystrix断路器,服务降级和熔断机制。8、微服务集群十分庞大,监控起来是十分困难的,尤其是对每一个接口的熔断情况进行监控,因此我们引入了Turbine微服务监控。9、微服务的调用是杂乱无章的,可以网状调用,怎么做到统一的入口出口,统一的授权、加密、解密、日志过滤,我们引入了第一代网关Zuul。10、微服务的配置分散,每次要修改配置都要重启服务,因此我们引入了Config配置中心。11、跟上主流,Consul是当前主流的服务注册与发现、配置中心一体化的解决方案。12、阿里的Nacos服务注册与发现、配置中心在国内炙手可热,Nacos 经历过双十一的微服务中间件。13、Turbin做微服务监控还是太弱,我们需要更强大,可视化,操作性更强的监控系统,因此我引入了Spring Boot Admin体系。14、Zuul已经停止更新支持,Spring Cloud官方推荐的二代网关Spring Cloud Gateway更加强大。15、微服务的安全架构体系虽然复杂,但是是有学习条例的,什么是认证授权、什么是OAuth2.0的原理、 JWT、怎么样去开发实现。 课程资料 【独家资料】1、课程附带全部63个项目源码,其中Hoxton版本项目源码37个,Edgware版本项目26个,2、230页高清PDF正版课件。3、附带nacos、consul、cmder等视频配套软件。学习方法1、每一节课程均有代码,较好的方式为一边听我的讲解,一边使用我提供的项目代码进行观察和运行。2、课程体系庞大,但是并不杂乱,每个章节只针对一个知识点,减轻学习压力。3、坚持每天学习1~2个章节,可以在地铁、公交上用手机学习。【完善知识体系图】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值