読者です 読者をやめる 読者になる 読者になる

そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

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       

次はJBossをインストールします。 WebLogicyumでインストールできればいいのに。。。