Dockerfileは、aDockerイメージのインストールと構成を自動化するために使用される命令のテキストファイルです。 Dockerfileを使用すると、複数の仮想マシン間で同じイメージを維持しなくても、複数のDockerコンテナーを簡単にデプロイできます。命令は、Dockerfileに表示される順序で実行されるため、命令の使用と更新が明確で直感的になります。この記事では、Dockerfileがどのように機能するかの例を挙げて、基本について説明します。
始める前に
-
スタートガイドをよく理解し、Linodeを作成して更新し、Dockerをインストールしてください。または、DockerMarketplaceアプリを使用して更新されたDocker対応のLinodeをすばやくデプロイすることもできます。
-
コンピューティングインスタンスのセットアップと保護に関するガイドに従って、Linodeが安全であることを確認してください。
-
このガイドは、Dockerコマンドラインインターフェイス(CLI)の使用に慣れていることを前提としています。 Docker CLIの詳細については、ドキュメントをご覧ください。
Dockerfileはどのように機能しますか?
Dockerfileは、さまざまなコマンドとアクションを実行してDockerイメージを構築し、Dockerコンテナーをデプロイするために使用できるスクリプトです。 Dockerfile内のコマンドと情報は、安定した展開のために特定のソフトウェアバージョンと依存関係を使用するように構成できます。 aDockerレジストリを使用して、パブリック(またはプライベート)Dockerイメージを保存してアクセスすることもできます。
Dockerfileが書き込まれると、docker build
を使用できます。 Dockerfileの指示に基づいてDockerイメージを生成するコマンド。次に、docker run
などのコマンドを使用して、イメージに基づいてコンテナーをデプロイできます。 またはdocker create
。
Dockerfileでイメージをビルドするために使用できる一般的な手順は次のとおりです。
基本的な定義
- FROM :
ubuntu
などのベースイメージを定義します またはdebian
、ビルドプロセスを開始するために使用されます。 Dockerfileごとに必要です。 - メンテナ :画像作成者のフルネームとメールアドレスを定義します。
変数
- ENV :コンテナがデプロイされたときに持続する環境変数を設定します。
- ARG :まずまずのビルド時間変数を設定します。
ENV
の代わりに使用できます コンテナがイメージからデプロイされたときに持続しない変数を作成します。
コマンドの実行
- 実行 :新しいイメージレイヤーでパッケージインストールコマンドなどのコマンドを実行します。
- CMD :イメージとともにデプロイされたコンテナ内で特定のコマンドを実行するか、
ENTRYPOINT
のデフォルトパラメータを設定します 命令。 Dockerfileごとに1つだけ使用されます。 - エントリポイント :コンテナがイメージとともにデプロイされるたびに使用されるデフォルトのアプリケーションを設定します。 Dockerfileごとに1つだけ使用されます。
- ユーザー :コンテナ内でコマンドを実行するためのUID(ユーザー名)を設定します。
- WORKDIR :後続のDockerfileコマンドが実行されるコンテナパスを設定します。
注 RUN
、CMD
、およびENTRYPOINT
それぞれシェルで実行できます 通常の引数を取るform、または exec フォーム。引数をJSON配列として受け取ります。 exec formはコマンドシェルを呼び出さないため、このガイドでは一般的に推奨され、使用されています。
データ管理
- 追加 :自動tarballとリモートURL処理を使用して、ソースから設定された宛先の画像のファイルシステムにファイルをコピーします。
- コピー :
ADD
に似ています ただし、自動tarballとリモートURL処理はありません。 - ボリューム :コンテナ内の指定されたマウントポイントからホストマシン上のディレクトリへのアクセスを有効にします。
ネットワーキング
- 公開 :特定のポートを公開して、コンテナと外部との間のネットワークを有効にします。
次に、これらのコマンドのいくつかを利用するDockerfileの例を作成します。
Dockerfileの作成
Dockerfileを作成するには:
-
コマンドプロンプトで(SSHまたはLinode ManagerのLishを介して)、新しいディレクトリを作成して変更します:
mkdir ~/mydockerbuild && cd ~/mydockerbuild
注 これにより、Dockerビルドディレクトリがホームディレクトリに配置されます。グッドプラクティスとして、Dockerfileをホームディレクトリ自体またはサーバーのルートディレクトリに保存しないでください。代わりに、このガイドに示すように、別のディレクトリを作成し、その中に必要なすべてのファイルを(Dockerfileと一緒に)配置します。 -
Dockerfileの例を作成します:
touch example_dockerfile
-
選択したテキストエディタを使用してDockerfileを開きます(この例では、nanoを使用します):
nano example_dockerfile
-
次の例をDockerfileにコピーします。これにより、Debianイメージを生成し、メンテナ情報を設定し、単に「Hello、Sunshine!」を返すDockerfileが作成されます。実行時:
- ファイル:example_dockerfile
-
Dockerfileを保存します。
-
cat example_dockerfile
と入力します 上からのテキストが含まれていることを確認してください。
DockerfileからのDockerイメージの構築
docker build
を使用してDockerfileからイメージをビルドします コマンド:
docker build ~/mydockerbuild -f example_dockerfile -t example_image
example_image
で画像にラベルを付ける 次のステップでコンテナを簡単に展開できます。
出力は次のようになります。
Sending build context to Docker daemon 4.096kB
Step 1/3 : FROM debian
---> 4a7a1f401734
Step 2/3 : MAINTAINER Jane Doe [email protected]
---> Running in fdd81bd8b5c6
Removing intermediate container fdd81bd8b5c6
---> 1253842068a3
Step 3/3 : CMD ["echo", "Hello, Sunshine!"]
---> Running in d33e1bacf1af
Removing intermediate container d33e1bacf1af
---> a5d95e138b97
Successfully built a5d95e138b97
Successfully tagged example_image:latest
ご覧のとおり、example_dockerfile
からの手順 順番に実行されます。 example_image
というラベルの付いた画像 これで、コンテナをデプロイするために実行する準備が整いました。
Dockerイメージを実行してコンテナをデプロイする
Dockerコンテナーをデプロイするために作成したイメージの実行は、次のように入力するのと同じくらい簡単になりました。
docker run example_image
example_image
に基づく新しいコンテナ がデプロイされ、CMD
で指定されたコマンド 次に、命令がコンテナから実行され、次の出力が表示されます。
Hello, Sunshine!
注 docker run
の場合 コマンドが実行され、Dockerイメージが現在の作業ディレクトリで使用できない場合は、代わりにDockerレジストリからプルされます。
さらに読む
おめでとう!最初のDockerfileを作成し、最初のDockerイメージを実行しました。
DockerイメージおよびコンテナーでのDockerfileの使用に関するその他の例と情報については、以下を参照してください。
-
Dockerイメージ、コンテナー、Dockerファイルを詳細に使用する方法に関するガイド;
-
DockerのDockerfileのベストプラクティス。
詳細情報
このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。
- Dockerfileを作成するためのベストプラクティス
- DockerHub上の公式Dockerイメージ
- Docker Docs