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 | イメージ名(任意)を指定する |
-f | Dockerfileの名前を指定する(デフォルトは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!!」が表示されることが確認できます。
無事にイメージ作成から実行までできました。
ここで作成したコンテナとイメージはあくまで練習要なので、削除してしまって大丈夫です。
削除コマンドを思い出しながら削除してみてください。