Technofara

Golangエンジニア!仕事で必要になって勉強した事とか、新しい事とか色々まとめたりを緩くやります。技術系と思考系だけにしておきます、

# Dockerで環境作るのにDockerfileを使ってないの?

どこでもいいので Dockerfileを用意する。

~/Dockerfileファイルを用意しました。

前回Docker導入時に行った簡単なコマンドを、Dockerfileに定義してみます。

その前に、今回確認するimageが何かを確認

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              5d021e068905        49 seconds ago      300.6 MB
centos              6.4                 539c0211cd76        9 months ago        300.6 MB
centos              latest              539c0211cd76        9 months ago        300.6 MB

僕の場合は、centosというイメージ名があります。 ※イメージ名は、人によって違いますので、事前に確認を

centosに対して簡単なコマンドを実行してみると

$ docker run centos /bin/echo "Hello World"
Hello World

お決まりの言葉「Hello World」が出力されました。

これをDockerfileに書き出すと

$ vi ~/Dockerfile
FROM centos
RUN /bin/echo "Hello World"

こうなります。 たったのこれだけです。

centosでecho "Hello World"実行させる と書いてます。

ではでは、実行

Dockerfileを使って実行する方法は docker build <Dockerfile格納ディレクトリパス>なので

$ docker build ./

と実行します。

では、

# docker build ./
Uploading context 30.72 kB
Step 1 : FROM centos
 ---> 539c0211cd76
Step 2 : RUN /bin/echo "Hello World"
 ---> Running in b7f432d09ac5
Hello World
 ---> 92a6f4e013d2
Successfully built 92a6f4e013d2

Stepを踏んで処理が実行されていることがわかりますね。

ただ、これだけだと、Dockerfileを使うメリットが全然わかないですね。 Dockerfileのメリットを簡単に書くとしたら

FROM centos
RUN /bin/echo "現在の日時は?"
RUN /bin/date
RUN /bin/echo "なるほど"

こんな感じで、複数のRUNを定義できる!! ちなみに実行すると

$ docker build -no-cache .
Uploading context 30.72 kB
Step 1 : FROM centos
 ---> 539c0211cd76
Step 2 : RUN /bin/echo "現在の日時は?"
 ---> Running in b670e4c9dc07
現在の日時は?
 ---> 3e8f0a3a1fa9
Step 3 : RUN /bin/date
 ---> Running in ce7076b6c8ee
Wed Jan 22 22:48:32 EST 2014
 ---> 44ef8a8b589b
Step 4 : RUN /bin/echo "なるほど"
 ---> Running in edea3c58c41a
なるほど
 ---> dd113a8261cd
Successfully built dd113a8261cd

結果はこんな感じですね。 これで色々CI回したりしてみたいです。 Dockerfile入門は以上です。

※追記 作成した環境にsshもできます docker run -i -t dd113a8261cd /bin/bash

参考

http://apatheia.info/blog/2013/06/17/docker/