• 手把手使用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
  • 相关阅读:
    warning: already initialized constant FileUtils::VERSION
    manjaro开启sdd trim
    manjaro i3 sound soft
    archlinux or manjaro install pg gem
    rails 5.2 启动警告 warning: previous definition of VERSION was here和bootsnap
    react config test env with jest and create-react-app 1
    Python pyQt4/PyQt5 学习笔记4(事件和信号)
    MacOS 安装PyQt5
    笔者使用macOS的一些经验点滴记录1
    win7 64位系统下读写access数据库以及安装了office32位软件再安装64位odbc的方法
  • 原文地址:https://www.cnblogs.com/orange911/p/9090209.html
Copyright © 2020-2023  润新知