概要
このエントリは、「Enterprise "hello, world" 2018 Advent Calendar 2018」の12/6向けのものです。このAdvent Calendarでは、複数個のエントリにまたがる話の流れも鑑みつつ、なるべく1エントリで1つのトピックをカバーできるようにする予定です。
このエントリで記載するトピックは、自分のアプリをDockerコンテナ化することです。
前提
おことわり
想定読者
「Enterprise "hello, world" 2018」的なネタとしては、下記のような状況を想定しています。
前日に自分で作ったベースイメージを使って、Day4で作ったJavaのHelloWorldを動かせるようにする
Dockerコンテナ化
Dockerfile
自分で作ったベースイメージ(debian-stretch:latest)に対して、OpenJDKをダウンロードしてきて展開し、第4日目で作ったHelloWorldのクラスファイルを追加しています。
アプリの起動は、シェルスクリプトを作成し、Entrypointとしてセットしています。
FROM debian-stretch:latest
LABEL maintainer="YOUR ADDRESS HERE"
# shuld do apt-get update in base image
RUN mkdir /usr/local/openjdk
RUN wget --no-check-certificate https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz
RUN tar zxvf openjdk-11.0.1_linux-x64_bin.tar.gz -C /usr/local/openjdk
RUN rm openjdk-11.0.1_linux-x64_bin.tar.gz
RUN mkdir /opt/ehw
COPY HelloWorld.class /opt/ehw
COPY ./docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
docker-entrypoint.sh
#!/bin/sh
cd /opt/ehw
/usr/local/openjdk/jdk-11.0.1/bin/java HelloWorld
HelloWorld.class
Advent Calendar 第4日目で作ったものを使います
Makefile
create-image:
sudo docker build . -t vanilla-hw
``
## コンテナをビルド
$ make
```
実行
作ったイメージでコンテナを起動してみます。
$ sudo docker run vanilla-hw
hello, world
無事動作しました。
まとめ
このエントリでは、「Enterprise "hello, world" 2018 Advent Calendar 2018」(EHW2018)の6日目として、
自分のベースイメージを使い自分のアプリをコンテナ化することをトピックとして取り上げました。
EHW2018のネタとしては、このあと、このプログラムと同じような目的を持つものを現代的なツール群を用いて、なるべくめんどくさく実現していくことを考えています。