Docker ビルドについて(メモ)
Dockerイメージをビルドする
Dockerfile
Dockerイメージを作成するための指示書となる設定ファイル。
デフォルトでDockerfileという名前のファイルがイメージのビルドに使用される。
別名のDockerfileを使用することも可能。
Dockerビルドをした場合、Dockerfileに定義された内容を上から順位処理していき、最終的な状態の環境がDockerイメージとして保存される。
Dockerfileの作成
ターミナル
$ mkdir imagebuild && cd imagebuild && touch Dockerfile
作成したDockerfile
FROM docker/whalesay:latest RUN apt-get -y update && apt-get install -y fortunes CMD /usr/games/fortune | cowsay
- FROM命令・・・イメージを作成する際に元となるイメージを指定する命令
元のレイヤーの上に新しいレイヤーを重ねてカスタマイズしていくことが可能 - RUN命令・・・イメージビルドの際に実行を命令するコマンド
今回は引数にapt-get -y update && apt-get install -y fortunes
をとり、fortunesをインストールするように命令している。 - CMD命令・・・コンテナ起動時に行う命令
今回は英文の格言をwhalesayにしゃべらせるというコマンド命令
Dockerfileからイメージをビルドする
$ docker build -t docker-whale .
- build・・・イメージをビルドするサブコマンド
- -t docker-whale・・・タグ名を指定している
今回はdocker-whale
と名付けている - .・・・ビルドコンテキストの指定
ビルドコンテキストとは
イメージをビルドする際にDockerデーモンに送信をするOS側のディレクトリのことをビルドコンテキストという
$ docker build -t docker-whale . [+] Building 30.7s (6/6) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 156B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/docker/whalesay:latest 0.0s => [1/2] FROM docker.io/docker/whalesay:latest 0.3s => [2/2] RUN apt-get -y update && apt-get install -y fortunes 30.0s => exporting to image 0.3s => => exporting layers 0.2s => => writing image sha256:3f2ef4559f8a54019fca50dd8b2904ba33bf26b87 0.0s => => naming to docker.io/library/docker-whale 0.0s Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
ビルドキャッシュ
Dockerイメージをビルドした際に、イメージのレイヤーごとにビルド結果をキャッシュしている。
Dockerfileの内容が変更されていない場合はキャッシュを利用して、初回よりも早くビルドが完了する。
パッケージのインストールをする際に、update文などを入れて、ビルドの度最新のパッケージを取得する場合も、Dockerfileに変更がない場合はスルーされてしまう。
キャッシュを利用しない場合は、ビルドの際に--no-cache
を付け加えてビルドする。
$ docker build --no-cache -t docker-whale .
これでキャッシュを利用せずにビルドされます。
run!
$ docker run docker-whale _________________________________________ / <Knghtbrd> It's a trackball for one \ | <wichert> so it's not a rodent | | <wichert> it's a turd with a ball | | sticking out <wichert> which you fondle | \ constantly / ----------------------------------------- \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/
fortunesの格言って結構ふざけてる