そこはかとなく

見て聞いて触ったことの技術メモ

Helidon Getting Started 2 -Docker-

この記事について

今回は前回の続きで、生成されたDockerfileを起動させるところまでを行います。

Dockerfileの内容を確認

#FROM openjdk:8-jre-slim
FROM openjdk:8-jre-alpine

RUN mkdir /app
COPY libs /app/libs
COPY quickstart-se.jar /app

CMD ["java", "-jar", "/app/quickstart-se.jar"]

各行では以下を定義しています。

  • FROM "基となるイメージを指定":jre8がインストールされたAlpine Linuxイメージを基に
  • RUN "ビルド中に実行するコマンドを指定":mkdirコマンドでappディレクトリを作成し
  • COPY "ローカルファイルをコンテナの中にコピー":libsとビルドした.jarをコンテナにコピー
  • CMD "起動後のコンテナで実行したいコマンドを指定":java -jar /app/quickstart-se.jar を実行

Dockerイメージをビルド

$ docker build -t quickstart-se target

出力

Sending build context to Docker daemon  5.648MB
Step 1/5 : FROM openjdk:8-jre-alpine
 ---> 2e01f547f003
Step 2/5 : RUN mkdir /app
 ---> Using cache
 ---> 2a5f46165656
Step 3/5 : COPY libs /app/libs
 ---> 7cfb246e7503
Step 4/5 : COPY quickstart-se.jar /app
 ---> 6bcea4b41853
Step 5/5 : CMD ["java", "-jar", "/app/quickstart-se.jar"]
 ---> Running in 2cc62e0c9ea8
Removing intermediate container 2cc62e0c9ea8
 ---> a49d85fd641f
Successfully built a49d85fd641f
Successfully tagged quickstart-se:latest

作成されたDockerイメージを確認

$ docker image ls

出力

REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
quickstart-se                           latest              a49d85fd641f        30 second ago         88.6MB

Dockerイメージを起動

docker runコマンドでコンテナを起動します。 --rm フラグ:コンテナの終了時に、自動的にコンテナをクリーンアップしファイルシステムを削除します -p フラグ:外部からアクセスされるポート番号:コンテナ側のポート番号を指定します

$ docker run --rm -p 8080:8080 quickstart-se:latest

出力

[DEBUG] (main) Using Console logging
2018.12.17 07:45:07 INFO io.netty.util.internal.PlatformDependent Thread[main,5,main]: Your platform does not provide complete low-level API for accessing direct buffers reliably. Unless explicitly requested, heap buffer will always be preferred to avoid potential system instability.
2018.12.17 07:45:07 INFO io.helidon.webserver.netty.NettyWebServer Thread[nioEventLoopGroup-2-1,10,main]: Channel '@default' started: [id: 0xb76b2ecb, L:/0.0.0.0:8080]
WEB server is up! http://localhost:8080

アプリの動作確認

$ curl -X GET http://localhost:8080/greet
{"message":"Hello World!"}

Dockerイメージからコンテナを起動してアプリが動作しているのが確認できました。

つづいてKubernetesへのデプロイ…の前に一旦休憩します(深夜2時をまわってしまいました)。

ご覧いただきありがとうございました。

この記事はOracle Cloud その2 Advent Calendar 2018 - Adventar17日目です。