DockerでコンテナにJavaを入れるまで
年末にDockerを入れて、サンプルを実行してみました。
Mac OSXでDocker(インストール編) - そごうソフトウェア研究所
冬休み中に試験環境をDockerで準備することが目標です。
dotinstallを見ながら色々遊んでいましたが、実際の試験環境の構築を始めようと思います。今日はCentOS上にJava環境を構築します。
docker pullでCentOSのイメージを取得
rsogo$ docker pull centos
centos:latest: The image you are pulling has been verified
5b12ef8fd570: Pull complete
34943839435d: Pull complete
511136ea3c5a: Already exists
Status: Downloaded newer image for centos:latest
イメージの確認
rsogo$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
rsogo/sshd latest 296067ca835f 6 minutes ago 625.8 MB
centos 6 510cf09a7986 5 days ago 202.6 MB
centos latest 8efe422e6104 5 days ago 210 MB
rsogo/jboss latest 67acbf60269a 8 days ago 855.2 MB
この記事では、centosのlatestを使用しているけれど、現時点で最新はCentOS 7で、テスト環境としては6が欲しかったので、実際のテスト環境はcentos:6でやっている。
Dockerfileの作成
何度でも同じイメージが作成できるように環境の準備はDockerfileで行います。
FROM centos
MAINTAINER Ryohei Sogo
# ビルド時に実行
RUN yum install -y java-1.7.0-openjdk
RUN yum install -y java-1.7.0-openjdk-devel
# 起動時に実行
CMD ["java", "-version"]
このDockerfileは次の内容を書いています。
- centosイメージを基に作成する
- ビルド時にjava-1.7.0-openjdkと、 java-1.7.0-openjdk-develをyumコマンドでインストールするよう
- 実行時にはjava -versionでインストールされたjavaのバージョンを出力する
ビルドの実行
docker buildコマンドでビルドを行います。 ここではrsogo/javaというタグ名を付けています。
rsogo$ docker build -t rsogo/java .
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM centos
---> 34943839435d
Step 1 : MAINTAINER Ryohei Sogo
---> Using cache
---> fa1f439f448f
Step 2 : RUN yum install -y java-1.7.0-openjdk
---> Using cache
---> 3841ca600101
Step 3 : RUN yum install -y java-1.7.0-openjdk-devel
---> Using cache
---> bd0a1d4c9937
Step 4 : CMD java -version
---> Using cache
---> 3adf3b598444
Successfully built 3adf3b598444
このログを取る前に何度かビルドを行っているので、Using cacheと出力されているとおり、Docker内のキャッシュを使ってビルドを行っているようです。 初回は関連パッケージの取得とインストールが行われていました。
実行
docker runコマンドで実行します。
rsogo$ docker run rsogo/java
java version "1.7.0_71"
OpenJDK Runtime Environment (rhel-2.5.3.1.el7_0-x86_64 u71-b14)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
DockerfileのCMDで記載したとおり、java -versionが実行され、インストールが成功していることが確認できます。
ps -lで確認すると、実行が終わったプロセスは終了状態になっています。
rsogo$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
980ab9c8b558 rsogo/java:latest "java -version" 18 minutes ago Exited (0) 18 minutes ago naughty_elion