環境構築

Dockerイメージを作成するためのDockerfileの書き方・ビルドの方法

DockerfileはDocker特有のコマンドを利用して、イメージ構築手順を定義したものになります。

Dockerfileを作成するに当たって、重要なコマンドが大きく分けて5つあります。

FROMコマンド

Dockerfileの最初に記述するコマンドになります。
記述の仕方は、

FROM <IMAGE>[:<TAG>]

のようになり、元となるイメージ名を指定します。こうすることで、dockerimageのソースを取ってくることができます。

COPYコマンド

ホスト(自身のPCなど)側からイメージにファイルを転送することができます。

COPY <SRC>… <DEST>

RUNコマンド

COPYコマンドで転送されたファイルをFROMコマンドで指定したイメージ内で、様々な処理を加えていきます。RUNコマンドは複数の処理を1行で書くこともできるので、後で具体的な方法を見ていきます。

RUN <COMMAND>

ENTRYPOINT・CMDコマンド

デフォルトで実行したいものや、初期化処理などのコマンドはENTRYPOINTコマンドに書くことが多いです。
CMDコマンドは、ENTRYPOINTの引数になるメインとなるコマンドです。

例えば、docker container run nginx:alpine が実行される場合、nginx:alpineがCMDコマンドが上書きされて実行されています。

ビルド

docker buildコマンドを使うことで、指定されたDockerfileを利用してDockerイメージを作成することができます。

docker build [OPTION] PATH

引数として必須になるのがPATHですが、注意していただきたいのがファイル名ではなく、Dockerfileが保存されているパスを指定する必要があります。

オプションとして良く使うのは、下記になるので参考にしてみてください。

-tイメージ名(任意)を指定する
-fDockerfileの名前を指定する(デフォルトはDockerfile)

Dockerfileを作成してビルドしてみる

任意のディレクトリに、Dockerfileとdocker-entrypoint.shというファイルを作成します。

docker-entrypoint.shはENTRYPOINTコマンドに直接処理を書くとわかりづらくなるので、外部ファイルとして読み込むようにしています。

docker-entrypoint.sh

#! /bin/sh

env

# CMDで引数に渡されたものを無条件に実行
exec "$@"

Dockerfile

FROM centos:7

COPY docker-entrypoint.sh /var/tmp

RUN mv /var/tmp/docker-entrypoint.sh /usr/local/bin; \
    chmod +x /usr/local/bin/docker-entrypoint.sh;

ENTRYPOINT [ "docker-entrypoint.sh" ]
CMD [ "echo", "Hello World !!" ]

docker-entrypoint.shで書いた内容はテンプレートだと思ってください。
上記の書いた内容に必要に応じて書き足していって、複雑な処理もできるようにします。

それではビルドをしていきます。
パスはそれぞれ調整してみてください。ここでは、Dockerfileと同じディレクトリにいると想定して行います。

docker build -t test .

testという名前でイメージを作成します。カレントディレクトリを指定するには.(ドット)を用います。

上手くいくと次のように表示されます。

無事にビルドができたら、イメージができているか、docker image lsで確認してみます。

確認ができたら、実行してみましょう。実行はrunコマンドです。

docker run test

「Hello World!!」が表示されることが確認できます。

無事にイメージ作成から実行までできました。

ここで作成したコンテナとイメージはあくまで練習要なので、削除してしまって大丈夫です。

削除コマンドを思い出しながら削除してみてください。