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の格言って結構ふざけてる