iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 16
0
DevOps

用30天來介紹和使用 Docker系列 第 16

Day16:實作簡單的 service 程式打包成 Docker Image(二)

  • 分享至 

  • xImage
  •  

延續昨天的在 Build Code 時把 Jar 打包成 Docker Image 的部份,今天要實作把打包完成的 Docker Image 自動的在 Build 完 Image 之後 Push 到 Docker Hub 上,這樣就不用另外的下 docker tagdocker push 指令,才能把 Docker Image Push 到 Docker Hub 上。

一. 修改 build.sbt 的檔案如下

dockerfile in docker := {
  val appPath = "/app"
  val jarFile: File = sbt.Keys.`package`.in(Compile, packageBin).value
  val classpath = (managedClasspath in Compile).value
  val mainclass = "idv.jack.example.AkkaHTTPExample"
  val jarTarget = s"${appPath}/${jarFile.getName}"
  val classpathString = classpath.files.map(s"${appPath}/" + _.getName)
    .mkString(":") + ":" + jarTarget + ":."

  new Dockerfile {
    from("java")
    add(classpath.files, s"${appPath}/")
    add(jarFile, jarTarget)
    entryPoint("java", "-cp", classpathString, mainclass)
  }
}

lazy val tag = taskKey[Unit]("Execute the docker tag shell script")
tag := {
   "docker tag default/akkahttp-docker-example jackyohhub/akkahttp-docker-example"!
}

lazy val push = taskKey[Unit]("Execute the push to docker registry")
push := {
   "docker push jackyohhub/akkahttp-docker-example"!
}

完整的程式在 GitHub 上,網址如下:
https://github.com/jackyoh/akkahttp-docker-example/blob/master/build.sbt

這裡最主要的地方就是在 tag 和 push 的地方,只要有在 sbt 指令後面加上 tag 和 push 參數,就會先把 Docker Image 建立一個能 Push 到 Docker Hub 上的 Image 格式 ("DockerHub 帳號/Image Name"),最後再把 Docker Image Push 到 Docker Hub 上。

二. 把 Build 完的 Jar 檔,打包在 Docker Image 裡並且把此 Docker Image Push 到 Docker Hub 上

  1. 在執行指令之前需要輸入以下指令登入 Docker Hub
$ docker login

執行的畫面如下
https://ithelp.ithome.com.tw/upload/images/20171219/20103456mp43Yb7lqf.png

  1. 使用 sbt 指令 Build Docker Image 並且把 Docker Image Push 到 Docker Hub上,指令如下
$ sbt docker tag push

執行的結果如下
https://ithelp.ithome.com.tw/upload/images/20171219/20103456URolhXYjV9.png

三. 執行完成可以看到 Docker Image 已經 Push 到 Docker Hub 上,畫面如下
https://ithelp.ithome.com.tw/upload/images/20171219/201034561bLLedmWNl.png

四. 測試把 Docker Image Pull 到其它的 Host 上執行,指令如下

$ docker run -d -p 9090:8080 jackyohhub/akkahttp-docker-example

畫面如下
https://ithelp.ithome.com.tw/upload/images/20171219/20103456yAAVo3d5lb.png

輸入http://10.1.3.243:9090/hello 的URL 就可以看到以下的畫面。IP 為執行 Docker 那台 Host 的 IP:
https://ithelp.ithome.com.tw/upload/images/20171219/20103456B6Uk4I9nFT.png

完整的程式放在 GitHub 上,有興趣的話可以參考看看,網址如下:
https://github.com/jackyoh/akkahttp-docker-example

這二天介紹的把開發的程式打包成 Docker Image 和自動的把 Docker Image Push 到 Docker Hub 上,最主要的目的是要讓在開發程式和佈署程式這一段更加的自動化,避免換了一個環境之後確忘了安裝一些套件或是少設定到幾個參數而造成開發完成的程式無法執行。


上一篇
Day15:實作簡單的 service 程式打包成 Docker Image(一)
下一篇
Day17:使用 Docker Volume 的功能 (一)
系列文
用30天來介紹和使用 Docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言