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
はビルド時にのみ利用可能な環境変数です。