Docker
建物の画像
サーチ…
パラメーター
| パラメータ | 詳細 |
|---|---|
| - 引く | Dockerfileの残りの部分を構築する前にベースイメージ( FROM )が最新であることを確認します。 |
Dockerfileから画像を構築する
あなたはDockerfileを持っていたら、使用して、それからイメージを構築することができdocker build 。このコマンドの基本的な形式は次のとおりです。
docker build -t image-name path
Dockerfileの名前がDockerfileでない場合は、 -fフラグを使用してビルドするDockerfileの名前を指定できます。
docker build -t image-name -f Dockerfile2 .
たとえば、現在の作業ディレクトリのDockerfileからdockerbuild-example:1.0.0という名前のイメージを構築するには:
$ ls
Dockerfile Dockerfile2
$ docker build -t dockerbuild-example:1.0.0 .
$ docker build -t dockerbuild-example-2:1.0.0 -f Dockerfile2 .
その他のオプションと設定については、 docker build使用方法に関するドキュメントを参照してください。
一般的な間違いは、ユーザーのホームディレクトリ( ~ )にDockerファイルを作成することです。これは悪い考えdocker build -t mytag .なぜなら、 docker build -t mytag .中にdocker build -t mytag .このメッセージは長い間表示されます:
コンテキストのアップロード
原因は、すべてのユーザーのファイル(ホームディレクトリとそのサブディレクトリの両方)をコピーしようとしているドッカーデーモンです。常にDockerfileのディレクトリを指定することでこれを避けてください。
.dockerignoreファイルをビルドディレクトリに追加することは良い方法です。その構文は.gitignoreファイルに似ており、必要なファイルとディレクトリだけがビルドのコンテキストとしてアップロードされるようにします。
シンプルなDockerfile
FROM node:5
FROMディレクティブは、開始するイメージを指定します。任意の有効な画像参照を使用することができる。
WORKDIR /usr/src/app
WORKDIRディレクティブはコンテナ内の現在の作業ディレクトリを設定します。コンテナ内のcdを実行するのと同じです。 (注: RUN cdは現在の作業ディレクトリを変更しません )。
RUN npm install cowsay knock-knock-jokes
RUNは、コンテナ内で指定されたコマンドを実行します。
COPY cowsay-knockknock.js ./
COPYコピー構築コンテキスト(から最初の引数で指定されたファイルまたはディレクトリpathに渡されるdocker build path 2番目の引数で指定されたコンテナ内の)位置に。
CMD node cowsay-knockknock.js
CMDは、イメージが実行され、コマンドが与えられていないときに実行するコマンドを指定します。これは、 docker runコマンドを渡すことによって無効にすることができます。
その他の多くの指示とオプションがあります。完全なリストについては、 Dockerfileリファレンスを参照してください。
ENTRYPOINTとCMDの違い
ビルドされたイメージでデフォルトで実行するコマンドを指定するDockerfileディレクティブが2つあります。 CMDのみを指定すると、 ENTRYPOINTはデフォルトのENTRYPOINT ( /bin/sh -cを使用してそのコマンドを実行します。ビルドされたイメージを起動するときに、エントリポイントとコマンドのどちらか、または両方をオーバーライドすることができます。両方を指定すると、 ENTRYPOINTはコンテナプロセスの実行可能ファイルを指定し、その実行可能ファイルのパラメータとしてCMDが提供されます。
たとえば、 Dockerfileに
FROM ubuntu:16.04
CMD ["/bin/date"]
次に、 /bin/sh -cのデフォルトのENTRYPOINTディレクティブを使用し、そのデフォルトのエントリポイントで/bin/dateを実行しています。コンテナプロセスのコマンドは、 /bin/sh -c /bin/date 。このイメージを実行すると、デフォルトで現在の日付が表示されます
$ docker build -t test .
$ docker run test
Tue Jul 19 10:37:43 UTC 2016
コマンドラインでCMDを無効にすることができます。この場合、指定したコマンドが実行されます。
$ docker run test /bin/hostname
bf0274ec8820
ENTRYPOINTディレクティブを指定すると、Dockerはその実行可能ファイルを使用し、 CMDディレクティブはコマンドのデフォルトパラメータを指定します。あなたのDockerfile含まれるもの:
FROM ubuntu:16.04
ENTRYPOINT ["/bin/echo"]
CMD ["Hello"]
その後、それを実行します
$ docker build -t test .
$ docker run test
Hello
必要に応じてさまざまなパラメータを指定できますが、すべてが/bin/echo実行します
$ docker run test Hi
Hi
Dockerfileにリストされているエントリポイントを上書きする場合(つまり、このコンテナにecho以外のコマンドを実行する場合)は、コマンドラインで--entrypointパラメータを指定する必要があります。
$ docker run --entrypoint=/bin/hostname test
b2c70e74df18
通常、 ENTRYPOINTディレクティブを使用して、実行するメインアプリケーションとCMDをデフォルトのパラメータにポイントします。
Dockerファイルにポートを公開する
EXPOSE <port> [<port>...]
EXPOSE命令は、コンテナが実行時に指定されたネットワークポートをリッスンすることをDockerに通知します。EXPOSEは、コンテナのポートをホストからアクセス可能にしません。そのためには、ポート範囲を公開するには-pフラグを使用するか、公開されているすべてのポートを公開するには-Pフラグを使用する必要があります。 1つのポート番号を公開し、別の番号で外部に公開することができます。
例:
Dockerfileの中で:
EXPOSE 8765
ホストマシンからこのポートにアクセスするには、この引数をdocker runコマンドに含めます。
-p 8765:8765
動詞とパラメータとして見られるENTRYPOINTとCMD
あなたがDockerfileで終わるとしましょう
ENTRYPOINT [ "nethogs"] CMD ["wlan0"]
この画像を
docker built -t inspector .
そのようなDockerfileで構築されたイメージを以下のようなコマンドで起動します。
docker run -it --net=host --rm inspector
nethogsはwlan0という名前のインタフェースを監視します
インターフェイスeth0(またはwlan1、またはra1 ...)を監視する場合は、次のようになります
docker run -it --net=host --rm inspector eth0
または
docker run -it --net=host --rm inspector wlan1
ドッカーハブまたは別のレジストリに画像をプッシュしてプルする
ローカルで作成されたイメージは、 Docker Hubまたはレジストリと呼ばれる他のドッカーrepoホストにプッシュできます。 docker loginを使用して、既存のドッカーハブアカウントにサインインします。
docker login
Login with your Docker ID to push and pull images from Docker Hub.
If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: cjsimon
Password:
Login Succeeded
サーバー名を指定することによって、別のドッカーレジストリを使用することができます。これは、プライベートまたは自己ホストのレジストリでも機能します。さらに、安全のために外部資格情報ストアを使用することも可能です。
docker login quay.io
その後、ログインしているレジストリに画像にタグを付けてプッシュすることができます。リポジトリは、 server/username/reponame:tagとして指定する必要があります。現在、サーバーを省略するとDocker Hubがデフォルトになります。 (デフォルトレジストリは別のプロバイダに変更することはできず、この機能を実装する予定はありません )。
docker tag mynginx quay.io/cjsimon/mynginx:latest
異なるタグを使用して、同じイメージの異なるバージョンまたはブランチを表すことができます。複数の異なるタグを含む画像では、各タグが同じリポジトリに表示されます。
docker imagesを使用して、新しくタグ付けされたイメージを含め、ローカルマシンにインストールされているインストール済みイメージのリストを表示します。次にプッシュを使用してレジストリにアップロードし、プルダウンしてイメージをダウンロードします。
docker push quay.io/cjsimon/mynginx:latest
イメージのすべてのタグは、 -aオプションを指定することで-aできます
docker pull quay.io/cjsimon/mynginx:latest
プロキシを使用したビルド
Dockerイメージを構築するとき、Dockerfileには、インターネットからリソースを取得するためのプログラムを実行するための命令が含まれています(例えば、GitHubでプログラムバイナリビルドを実行するwgetなど)。
Dockerに設定された環境変数を渡して、そのようなプログラムがプロキシを介してそれらのフェッチを実行するように指示することは可能です:
$ docker build --build-arg http_proxy=http://myproxy.example.com:3128 \
--build-arg https_proxy=http://myproxy.example.com:3128 \
--build-arg no_proxy=internal.example.com \
-t test .
build-argはビルド時にのみ利用可能な環境変数です。