アンドロイド

dockerfileを使用してdockerイメージを構築する方法

目次:

Anonim

Dockerイメージは、アプリケーションとアプリケーションを実行するために必要なすべてを含むDockerコンテナーの設計図です。 コンテナは、イメージのランタイムインスタンスです。

このチュートリアルでは、Dockerfileの概要、作成方法、およびDockerfileを使用してDockerイメージを作成する方法について説明します。

Dockerfileとは

Dockerfileは、ユーザーがコマンドラインで実行してイメージを作成できるすべてのコマンドを含むテキストファイルです。 Dockerがイメージを構築するために必要なすべての指示が含まれています。

Dockerイメージは、実行可能なソフトウェアアプリケーションを構成するイメージのDockerfile内の命令を表す一連のファイルシステムレイヤーで構成されます。

Dockerファイルは次の形式を取ります。

# Comment INSTRUCTION arguments

INSTRUCTION は大文字と小文字を区別しませんが、規則では名前に大文字を使用します。

以下は、最も使用されるDockerfile命令のいくつかの簡単な説明を含むリストです。

  • ARG-この命令により、ビルド時に渡すことができる変数を定義できます。 デフォルト値を設定することもできます。 FROM-新しいイメージを構築するためのベースイメージ。 この命令は、Dockerfileの最初の非コメント命令でなければなりません。 このルールの唯一の例外は、 FROM 引数で変数を使用する場合です。 この場合、 FROM 前に1つ以上の ARG 命令を指定できます。 LABEL-説明、バージョン、作成者などのメタデータを画像に追加するために使用されます。 複数の LABEL 指定でき、各 LABEL 命令はキーと値のペアです。 RUN-この命令で指定されたコマンドは、ビルドプロセス中に実行されます。 各 RUN 命令は、現在のイメージの上に新しいレイヤーを作成します。 ADD -Dockerイメージの指定されたソースから指定された宛先にファイルとディレクトリをコピーするために使用されます。 ソースは、ローカルファイルまたはディレクトリ、またはURLです。 ソースがローカルのtarアーカイブである場合、Dockerイメージに自動的に解凍されます。 COPY - ADD と似ていますが、ソースはローカルファイルまたはディレクトリのみです。 ENV-この命令により、環境変数を定義できます。 CMD-コンテナの実行時に実行されるコマンドを指定するために使用されます。 Dockerfileで使用できる CMD 命令は1つだけです。 ENTRYPOINT - CMD と同様に、この命令は、コンテナーの実行時に実行されるコマンドを定義します。 WORKDIR-このディレクティブは、 RUN CMD ENTRYPOINT COPY 、および ADD 命令の現在の作業ディレクトリを設定します。 ENTRYPOINT 次の RUN CMD ENTRYPOINT COPY 、および ADD 命令を実行するときに使用するユーザー名または UID を設定します。 VOLUME-ホストマシンのディレクトリをコンテナにマウントできます。 EXPOSE-実行時にコンテナがリッスンするポートを指定するために使用されます。

ファイルおよびディレクトリをイメージに追加しないようにするには、コンテキストディレクトリに .dockerignore ファイルを作成します。 .dockerignore の構文は、Gitの .gitignore ファイルの構文に似ています。

Dockerfileの手順の完全なリファレンスと詳細な説明については、公式のDockerfileリファレンスページを参照してください。

Dockerfileを作成する

Dockerイメージを作成する際の最も一般的なシナリオは、既存のイメージをレジストリ(通常はDocker Hubから)から取得し、ベースイメージに加える変更を指定することです。 Dockerイメージを作成するときに最も一般的に使用されるベースイメージはAlpineです。これは、サイズが小さく、RAMでの実行に最適化されているためです。

Docker Hubはクラウドベースのレジストリサービスであり、他の機能の中でも特にDockerイメージをパブリックまたはプライベートリポジトリに保持するために使用されます。

この例では、RedisサーバーのDockerイメージを作成します。 最新のubuntu 18.04をベースイメージとして使用します。

最初に、Dockerfileと必要なすべてのファイルを含むディレクトリを作成します。

mkdir ~/redis_docker

ディレクトリに移動し、次のDockerfileを作成します。

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Dockerfileの各行の意味を説明しましょう。

  • 1 行目では、ベースイメージを定義しています 3 行目から始まる RUN 命令は、aptインデックスを更新し、「redis-server」パッケージをインストールして、aptキャッシュを消去します。 命令で使用されるコマンドは、UbuntuサーバーにRedisをインストールするために使用するコマンドと同じです。EXPOSE命令は、Redisサーバーがリッスンするポートを定義します。最後の行では、 CMD 命令を使用してデフォルトのコマンドを設定しています。コンテナの実行時に実行されます。

ファイルを保存して、エディターを閉じます。

イメージの構築

次のステップは、イメージを構築することです。 そのためには、Dockerfileがあるディレクトリから次のコマンドを実行します。

docker build -t linuxize/redis.

オプション -t は、イメージ名と、オプションで「username / imagename:tag」形式のユーザー名とタグを指定します。

ビルドプロセスの出力は次のようになります。

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

ビルドプロセスが完了すると、新しいイメージがイメージリストにリストされます。

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

コンテナを実行する

イメージが作成されたので、次を実行してコンテナーからコンテナーを実行します。

docker run -d -p 6379:6379 --name redis linuxize/redis

-d オプションは、Dockerにコンテナを分離モードで実行するように指示し、 -p 6379:6379 オプションはポート6379をホストマシンに公開し、 --name redis オプションはコンテナ名を指定します。 最後の引数 linuxize/redis は、コンテナーの実行に使用されるイメージの名前です。

コンテナが起動したら、次のコマンドを使用して、実行中のすべてのコンテナを一覧表示します。

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

redis-cli を使用して redis-cli に接続する必要があるため、すべてが機能することを確認するには:

redis-cli ping

redisサーバーは PONG 応答する必要があります。

結論

このチュートリアルでは、Dockerfilesを使用してイメージを構築する基本のみを説明しました。 Dockerfileの作成方法と推奨されるベストプラクティスの詳細については、「Dockerfileを作成するためのベストプラクティス」を参照してください。

ドッカー