一、环境准备

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-](?:-*[a-z0-])*(?:[._][a-z0-](?:-*[a-z0-])*)*

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

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

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

sudo docker images

3、启动镜像

sudo docker run -d -p : --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" minutes ago Up minutes 0.0.0.0:->/tcp mymico

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

sudo docker stop 686b903252d1

手把手使用Docker搭建SpringBoot微服务镜像的更多相关文章

  1. Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

    本篇为Docker从入门到掉坑第二篇:基于Docker构建SpringBoot微服务,没有看过上一篇的最好读过 Docker 从入门到掉坑 之后,阅读本篇. 在之前的文章里面介绍了如何基于docker ...

  2. docker微服务部署之:三,搭建Zuul微服务项目

    docker微服务部署之:二.搭建文章微服务项目 一.新增demo_eureka模块,并编写代码 右键demo_parent->new->Module->Maven,选择Module ...

  3. docker微服务部署之:二、搭建文章微服务项目

    docker微服务部署之:一,搭建Eureka微服务项目 一.新增demo_article模块,并编写代码 右键demo_parent->new->Module->Maven,选择M ...

  4. docker微服务部署之:一,搭建Eureka微服务项目

    先说明一下docker需要搭建的微服务的基本情况: 项目情况:一个demo_parent项目,下面三个子模块:demo_eureka(eureka服务).demo_article(文章服务).demo ...

  5. 基于Openshift的SpringBoot微服务

    基于Openshift的SpringBoot微服务 OpenShift是红帽的云开发平台即服务(PaaS).自由和开放源码的云计算平台使开发人员能够创建.测试和运行他们的应用程序,并且可以把它们部署到 ...

  6. SpringBoot微服务架构下的MVC模型总结

    SpringBoot微服务架构下的MVC模型产生的原因: 微服务概念改变着软件开发领域,传统的开源框架结构开发,由于其繁琐的配置流程 , 复杂的设置行为,为项目的开发增加了繁重的工作量,微服务致力于解 ...

  7. 【分布式】-- 基于Nacos、OpenFeign搭建的微服务抽奖系统后台小案例

    1.项目介绍 最近入项目之前要求熟悉一下SpringCloud Nacos微服务基于Feign接口调用并整合Swagger2进行接口文档展示给前端,所以自己按照要求来编写并整合了一套基于SpringC ...

  8. springboot微服务的简单小结

    springboot微服务的简单小结 近来公司用springboot微服务,所以小结一下. 基础: 什么是SpingBoot微服务? 如何创建SpringBoot微服务? 如何管理和完善SpringB ...

  9. springcloud(十四):搭建Zuul微服务网关

    springcloud(十四):搭建Zuul微服务网关 1. 2. 3. 4.

随机推荐

  1. Filter的使用(web作业)

    一:什么是过滤器 Filter:Servlet过滤器Fileter是一个小型的web组件,它们通过拦截请求和响应,以便查看.提取或以某种方式操作客户端和服务器之间交换的数据,实现“过滤”的功能.Fil ...

  2. LoRa与NB-IoT对比(转载)

    物联网的基本架构包括三个层面:感知层.网络层和应用层. 物联网架构图 感知层通过传感器采集某些数据(声.光.电等),基于网络层的终端模组,对接到网络层的基站,实现数据采集后的传输. 网络层负责将感知层 ...

  3. weka环境配置

    java环境变量设置: 安装jdk到具体目录"ABC"下当前目录下应该有jdk+版本号和jre加版本号. 然后打开环境变量:新建JAVA_HOME内容是:jdk的安装目录.例如:D ...

  4. Mimikatz 法国神器

    0x00 标准模块 Module : standardFull name : Standard moduleDescription : Basic commands (does not require ...

  5. 在已有数据的表中添加id字段并且自增

    各位大牛,小弟在开发过程中,遇到了这样一个问题,由于新功能的增加需要使原有的一张表的结构作出调整,需要添加一个id主键字段,但是因为表里有很多数据了,所以,怎样才能添加这个字段,并且使原有的数据也能够 ...

  6. Windows下编译安装 FFmpeg

    在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...

  7. system libzip must be upgraded to version >= 0.11

    PHP当前最新版本是PHP7.3,今天在尝试安装的过程中报如下错误: system libzip must be upgraded to version >= 0.11, 根据提示我们可以清楚的 ...

  8. Kali学习笔记4:DNS信息收集

    DNS记录 A记录 A记录是用来创建到IP地址的记录. A记录设置技巧 1.如果想创建不带www的记录,即cnblog.com,在主机记录中填写@或者留空,不同的注册商可能不一样. 2.创建多个域名到 ...

  9. 程序员IT计算机中常见英语单词

    abstract 抽象的 abstract base class (ABC)抽象基类 abstract class 抽象类 abstraction 抽象.抽象物.抽象性 access 存取.访问 ac ...

  10. linux audit工具

    一个不错的博客,可以吸收营养,等读完后再决定写什么? https://www.cnblogs.com/bldly1989/p/7204358.html changelog -------------- ...