6.2创建Docker镜像文件

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

这一章节, 我们将学习如何将我们的Spring Boot应用作为Docker的镜像,并且如何部署和运行它。

6.2.1如何使用

  1. 第一步,你需要在Docker官网上注册你的账号。官网是:https://hub.docker.com
  2. 一旦你有了账号之后,我们需要创建一个Repository,名称叫springboot.bookpub
  3. 现在我们需要使用Gradle Docker的插件。改变buil.gradle的配置文件如下:

 buildscript {
dependencies {
classpath("org.springframework.boot:spring-boot-gradleplugin:${springBootVersion}")
classpath("se.transmode.gradle:gradle-docker:1.2")
}
}

 

  1. 我们还需要在build.gradle文件中加入这行配置:apply plugin: 'docker'
  2. 最后,我们需要在build.gradle文件中加入如下的配置:

 distDocker {
exposePort 8080
exposePort 8443
addFile
file("${System.properties['user.home']}/.keystore"),
"/root/"
}

 

  1. 确保你已经在你的机器上安装了Docker,我们可以创建镜像,使用命令:./gradlew clean distDocker。Docker的安装可参考:https://docs.docker.com/installation/#installation
  2. 如果每一步骤都是正确的话,我们可以看到如下的信息:

 $ ./gradlew distDocker

…:

compileGroovy UP-TO-DATE

:processResources UP-TO-DATE

:classes UP-TO-DATE

:jar UP-TO-DATE

:findMainClass

:startScripts UP-TO-DATE

:distTar UP-TO-DATE

:distDocker

Sending build context to Docker daemon 30.46 MBSending build context to Docker daemon

Step 0 : FROM aglover/java8-pier

---> 69f4574a230e

Step 1 : EXPOSE 8080

---> Using cache

---> 725f1fd8c808

Step 2 : EXPOSE 8443

---> Using cache

---> d552630db9d5

Step 3 : ADD .keystore /root/

---> d0684cbd7fac

Removing intermediate container ef2dffe243f4

Step 4 : ADD ch6.tar /

---> a0963c837391

Removing intermediate container fb140e526e29

Step 5 : ENTRYPOINT /ch6/bin/ch6

---> Running in a769b6d6b40b

---> 778da2170839

Removing intermediate container a769b6d6b40b

Successfully built 778da2170839

BUILD SUCCESSFUL

Total time: 1 mins 0.009 secs

 

  1. 我们可以命令docker images看到新创建的镜像

 $ docker images

REPOSITORY

TAG

IMAGE ID

CREATED

VIRTUAL SIZE

     

ch6

latest

778da2170839

17

minutes ago

1.04 GB

   

aglover/java8-pier

latest

69f4574a230e

11 months

ago

1.01 GB

   

 

  1. 镜像创建成功,我们现在可以开始如下的命令:

docker run -d -P ch6

  1. 我们可以通过docker ps命令来通过HTTP来访问服务。如果容器运行成功,我们可以看到如下的信息:
    1. 6.2创建Docker镜像文件

     

    1. 通过这个信息,我们知道我们端口不是8080,而是32778.接下来,我们访问http://localhost:32778/books,会看到如

    6.2创建Docker镜像文件

     

    6.2.2使用原理

    在前面的例子,我们已经看到使用Docker容器创建应用包是一件容易的事。另外Gradle-Docker插件帮我们做了一系列创建和发布的事;所有我们需要做的就是配置信息让其生成我们想要的镜像文件。让我们来看一下细节:

    1. exposePort引导插件去添加一个EXPOSE<port>构造到Dockerfile以至于当我们容器启动时,它将会暴露这些内部的端口到外部可通行的端口映射。当我们在运行docker ps命令时,我们已经看到这人映射了。
    2. addFile引导插件去添加ADD<src><dest>到Dockerfile以至于当容器开始创建时,将会从资源文件系统拷贝到容器镜像中。在我们的例子中,我们需要拷贝.keystore证书文件,这个证书我们配置了HTTPS连接器,这样的话我们的tomcat.https.properties就会加载${user.home}/.keystore。现在,我们需要在root/directory作为我们基于root的应用。

    Gradle-Docker插件使用项目名称作为默认的镜像名称。这个项目名称是由Gradle根据项目文件名称来决定的,除非你可明确镜像的名称。我们可以在gradle.properties文件中加入name=’some_project_name’,然后镜像的名称就会是some_project_name.

      如果你看一下Dockerfile的结果,你会看到build/docker/目录在项目的根目录下,你会看到如下的信息:

     ADD ch6.tar /
    ENTRYPOINT ["/ch6/bin/ch6"]

     

    这个ADD配置添加了TAR应用,我们可以通过tvf build/distributions/ch6.tar查看到相关信息。在我们创建容器期间,TAR文件将会在/directory文件中被提取之后用于应用中。

     

    添加如下的信息,你也可以将你的镜像文件上传到你自己的Docker Hub账户上,但要注意的是,这可以会使用一些时间,因为镜像文件的大小。

     distDocker {
    tag "<docker hub username>/<docker hub repository name>"
    push true
    exposePort 8080
    exposePort 8443
    addFile file("${System.properties['user.home']}/.keystore"),
    "/root/"
    }

     

  2.  

 

当我们使用Docker镜像时,我们可以使用-d或-p的命令:

  1. -d:说明运行的容器将会在开始进程中分离。
  2. -p:说明Docker发布会暴露所有内部端口到外部,这样的话我们可以访问。

相关文章:

  • 2021-11-06
  • 2021-08-06
  • 2021-11-28
  • 2021-07-17
  • 2021-05-19
  • 2021-10-15
猜你喜欢
  • 2021-11-06
  • 2021-11-06
  • 2018-07-04
  • 2021-09-19
  • 2021-10-13
相关资源
相似解决方案