Dockerの学習資料について-04-docker buildのいくつかの基本的な操作


詳細
Dockerfileの作成が完了すると、docker buildコマンドを使用してDockerfileに基づいてミラーを構築できます.前節では、Dockerfileが存在するフォルダの下でdocker build-t myimageを実行します.このコマンドは、ミラーが構築されます.今、この命令を詳しく話しましょう.このdocker buildのコマンドフォーマットは次のとおりです.
参照
#docker build[OPTIONS]コンテキストパス|URL
ここで、
「docker build:Dockerfileでミラーを構築するコマンドキーワード
「[OPTIONS]:コマンド・オプション.通常のコマンドには-tがミラーの名前を指定し、-fが指定Dockerfileを表示し、-fを使用しない場合は、コンテキスト・パスの下にあるDockerfileというファイルをデフォルトでミラーを構築する「Dockerfile」と見なします.具体的なコマンドはdocker build-helpを使用して表示できます.
「コンテキストパス|URL:ミラーを構築するコンテキストのパスを指定します.ミラーを構築する過程で、コンテキスト内の任意のファイルのみを参照できます.
"
では、docker build-t myimageを見てみましょう.このコマンドでは、-tを使用してミラー名をmyimageと指定します.-fコマンドは使用されていないため、デフォルトではコンテキストパスの下にあるDockerfileというファイルを使用してミラーを構築する「Dockerfile」と見なします.最後にコンテキストパスを指定します.このコマンドでは、コンテキストパスは.
docker buildを実行すると、まずコンテキストディレクトリのすべてのファイルがパッケージ化され、Docker daemonに渡されます.これにより、Docker daemonがこのコンテキストパッケージを受信すると、展開するとミラーの構築に必要なすべてのファイルが得られます.
下図に示すように、docker buildを実行すると、まずsending build context to Deckor daemon、つまりコンテキストディレクトリの下にあるすべてのファイルをDocker daemonにパッケージします.したがって、Dockerfileファイルを使用するときにミラーを構築する場合は、他の余分なファイルが転送されないように、空のフォルダの下に置くのが一般的です.次にDockerfileの命令を順次実行し、命令が正しく実行された場合、すべての命令が正しく実行され、ミラー構築が完了するまで次の命令を実行します.命令の実行にエラーが発生した場合、ミラー構築を終了します.
参照
1. [root@localhost newdir]# docker build-t myimage .
2. Sending build context toDocker daemon 2.048 kB
3. Step1/2: FROM ubuntu
4. --->14f60031763d
5. Step2/2: RUN mkdir dir1
6. --->Runningin c5117d908931
7. ---> cb0193727724
8. Removing intermediate container c5117d908931
9. Successfully built cb0193727724
ローカルから構築するほか、docker buildはURLから構築することもサポートします.
$ docker build github.com/creack/docker-firefox

このbuildコマンドはGitHubウェアハウスのアイテムをクローニングし、クローニングされたウェアハウスをdockerのウェアハウスコンテキストとして使用し、buildコマンドはコンテキストのルートディレクトリでDockerfileを探します.git://またはgit@scheme任意のGit倉庫を指定します.
注意:build URLの場合、コンテキストパスを指定する必要はありません.
docker build -f ctx/Dockerfile http://server/ctx.tar.gz

上のビルド文はURLから表示されます.http://server/ctx.tar.gzdockerの倉庫コンテキストをダウンロードします.圧縮パッケージ内のパスの下でctx/DockerfileをこのサブbuildingのDockerfileとして指定します.次は出力です.
参照
$ docker build -f ctx/Dockerfile http://server/ctx.tar.gz
Downloading context: http://server/ctx.tar.gz [===================>]    240 B/240 B
Step 1/3 : FROM busybox
---> 8c2e06607696
Step 2/3 : ADD ctx/container.cfg/
---> e7829950cee3
Removing intermediate container b35224abf821
Step 3/3 : CMD/bin/ls
---> Running in fbc63d321d73
---> 3286931702ad
Removing intermediate container fbc63d321d73
Successfully built 377c409b35e4
上記の2つのbuild(ローカルとURL経由)のほか、dockerはstdINでbuildを行うことができます.具体的には、ミナのbuildコマンドを参照してください.
$ docker build - < Dockerfile
このコマンドは、dockerが標準入力(stdIN)を使用してミラーをbuildすることを示しますが、このbuildには倉庫コンテキストパスがないため、コンテキストが欠けているため、dockerのデーモンプロセスにローカルディレクトリ関連のコンテンツが送信されません.コンテンツがないため、buildのdockerfileで使用されるADDコマンドはaddリモートURLのみです.
$ docker build - < context.tar.gz
上記のbuildコマンドも標準入力(stdIN)を使用してミラーをbuildしますが、標準入力ソースには圧縮パケットがあり、docker buildはbizp 2、gzip、xzのフォーマットをサポートします.
次にdocker buildの一般的なコマンドについて学びます.
1.-tコマンド
$ docker build -t vieux/apache:2.0 .

このbuildコマンドには-tというコマンドが追加されています.ミラー名vieux/apacheを指定し、指定バージョンtagを2.0とします.
1回のbuildの過程で複数のtagを1つのimageに提供することができます.以下のbuildは、buildがwhenry/fedora-jbossのミラーを持っていることを示していますが、同時に2.1バージョンとlatestバージョンをtageしています.
$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .

2.-fコマンド
$ docker build -f Dockerfile.debug .

Dockerfileが-fコマンドを使用することを指定します.現在のディレクトリの下にある特定のDockerfileを指定します.debugは使用するdockerfileです.
$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .
$ docker build -f dockerfiles/Dockerfile.prod  -t myapp_prod .

上のコマンドの最初の項目は、ディレクトリdockerfilesの下でDockerfileを探します.DebugファイルはDockerfileファイルとして、現在のディレクトリの下でmyapp_というbuildを行います.debugのミラー.
上のコマンドの2番目は、ディレクトリdockerfilesの下でDockerfileを探します.ProdファイルはDockerfileファイルとして使用され、現在のディレクトリの下でbuildと呼ばれるmyapp_prodのミラー.
3.--add-hostコマンド
$ docker build --add-host=docker:10.180.0.1 .

上記のbuildは、buildの後にdocker:10.180.0.1をbuildの良いミラーの/etc/hostsファイルに書き込むことを示しています.-add-hostを複数追加できます.
1.--targetコマンド
参照
FROM debian AS build-env
...
FROM alpine AS production-env
...
上記のように、1つのDockerfileにbuildの複数のstageの内容が必要である場合、-targetラベルを以下に指定すると、buildはこのbuild-envの内容しかbuildできません.
$ docker build -t mybuildimage --target build-env .