Dockerイメージを使えば、仮想マシンに必要なオーバーヘッドを気にすることなく、コンテナを簡単にデプロイできます。これらのコンテナはDocker Hubから簡単にプルダウンできるので、手軽に利用できます。例えば、開発用に最新のUbuntuイメージをプルダウンしたいとします。しかし、開発を始める前に、イメージにいくつかの変更(アップデート、アップグレード、build-essentialパッケージの追加など)を加える必要があります。では、同じカスタマイズされたイメージを複数の開発プロジェクトで使用したいとしたらどうでしょうか?最新のUbuntuイメージをプルダウンし、その後、build-essentialパッケージをアップデート、アップグレード、インストールするためのコマンドを手動で実行すれば良いのです。
あるいは、Dockerfilesを利用することもできます。Dockerfileは、特定の要件に合わせてDockerイメージを構築するためのファイルです。Dockerfileを作成すれば、手動でプロセスを実行することなく、同じイメージを何度も簡単に構築できます。
Dockerfileの作成方法をご紹介します。これにより、特定のイメージを簡単にビルドできるようになります。作成するイメージは、前述の通り、Ubuntuの最新イメージで、アップデートとアップグレードが行われ、build-essentialパッケージがインストールされています。これは、Dockerfileの使い方を示す、非常にシンプルな例です。
基本
まず最初に知っておくべきことは、DockerfileはDockerfileという名前のテキストファイルであり、コマンドが含まれているということです。使用可能なコマンドは以下のとおりです。
- ADD – ホスト上のソースからコンテナ自身のファイルシステムの指定された宛先にファイルをコピーします。
- CMD – コンテナ内で特定のコマンドを実行するために使用できます
- ENTRYPOINT – イメージでコンテナが作成されるたびに使用されるデフォルトのアプリケーションを設定します。
- ENV – 環境変数を設定する
- EXPOSE – コンテナと外部間のネットワーク接続を可能にするために特定のポートを関連付けます
- FROM – ビルドプロセスを開始するために使用するベースイメージを定義します
- MAINTAINER – 画像作成者の氏名とメールアドレスを定義します
- RUN – Dockerfilesの中央実行ディレクティブ
- USER – コンテナを実行するUID(またはユーザー名)を設定します
- VOLUME – コンテナからホストマシン上のディレクトリへのアクセスを可能にするために使用されます
- WORKDIR – CMDで定義されたコマンドが実行されるパスを設定します
すべてのコマンドを使う必要はありません。実際、ここではFROM、MAINTAINER、RUNのみを使ったDockerfileの例を示します。
Dockerfileの作成
まず最初に、作業用の新しいディレクトリを作成します。ターミナルウィンドウを開き、mkdir ~/mydockerbuildコマンドを実行します。 cd ~/mydockerbuildコマンドで、新しく作成したディレクトリに移動します。次に、 nano DockerfileコマンドでDockerfileを作成し、以下の内容を追加します。
FROM ubuntu:latest
MAINTAINER NAME EMAIL
apt-get -y update && apt-get -y upgrade && apt-get install -y build-essential を実行します。
ここで、NAME はメンテナーとして使用する名前、EMAIL はメンテナーの電子メール アドレスです。
そのファイルを保存して閉じます。
イメージの構築
ここで、Dockerfileからイメージをビルドします。これは以下のコマンドで実行されます(dockerグループのユーザーが実行します)。
docker build -t "NAME:Dockerfile" .
ここで、NAME はビルドするイメージの名前です。
このDockerfileから、Web開発用、アプリ開発用、セキュリティ開発用の3つのイメージをそれぞれビルドしたいとします。以下のコマンドでビルドできます。
docker build -t "webdev:Dockerfile" .
docker build -t "appdev:Dockerfile" .
docker build -t "secdev:Dockerfile" .
各コマンドの末尾のピリオドが必要であることに注意してください。
ビルドが完了したら、docker images コマンドを発行して、新しく作成されたイメージをすべて表示できます (図 A )。
図A
Dockerfileの使い方はこれですべてです。これは非常に単純な例ですが、より複雑なDockerfileやDockerイメージを作成するための出発点となるでしょう。
詳細はこちら
Dockerfileの構築と使用に関する詳細については、公式Dockerサポートページにあるベストプラクティスの記事をお読みください。Dockerコンテナは、DevOpsだけでなく、企業が提供するサービスやアプリケーションを拡張するための非常に強力かつ柔軟な手段です。ぜひDockerfileを試してみて、イメージ作成の効率を大幅に向上させてみてください。