zoukankan      html  css  js  c++  java
  • 手把手使用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
  • 相关阅读:
    【POJ 3162】 Walking Race (树形DP-求树上最长路径问题,+单调队列)
    【POJ 2152】 Fire (树形DP)
    【POJ 1741】 Tree (树的点分治)
    【POJ 2486】 Apple Tree (树形DP)
    【HDU 3810】 Magina (01背包,优先队列优化,并查集)
    【SGU 390】Tickets (数位DP)
    【SPOJ 2319】 BIGSEQ
    【SPOJ 1182】 SORTBIT
    【HDU 5456】 Matches Puzzle Game (数位DP)
    【HDU 3652】 B-number (数位DP)
  • 原文地址:https://www.cnblogs.com/orange911/p/9090209.html
Copyright © 2011-2022 走看看