「Dockerコンテナ開発入門」読む

Dockerfileで使用するインストラクション
-
FROM
コンテナのベースイメージ指定。 -
WORKDIR
コンテナ内のカレントディレクトリを指定。指定したディレクトリが存在しない場合は新たに作成される。 -
COPY
ビルドコンテキストのファイルやディレクトリをコンテナ内にコピーするコマンド。
ビルドコンテキストについては下記記事が参考になった。
docker buildコマンドでなんとなく指定しているcontextを理解する -
RUN
コンテナイメージビルド時に実行するコマンド。
パッケージマネージャでのツールのインストールや、アプリケーションのビルド処理などを記載する。 -
CMD
コンテナ起動時に実行するコマンド。
アプリケーションそのものを動作させる。

コンテナを起動してみる
docker container run -it golang:1.23.0
root@22cc11b2072d:/go# echo $SHELL
/bin/bash
docker image内で CMD["bash"] が指定されているので、bashで立ち上がる
bash以外で立ち上げたい場合は、コンテナ起動時にdocker container run -it golang:1.23.0 sh
の様に指定する
上記のようにCMDはコンテナ起動時に上書きすることができるが、ENTRYPOINTを使用することで上書きされない様にすることができる。
ENTRYPOINT・CMDを組み合わせることで、ENTRYPOINTで指定したコマンドにCMDで引数を渡すことができる。
DockerfileのENTRYPOINTとCMDの違いは何でしょうか。 #dockerfile - Qiita

docker image buildに関してのメモ
- ホストに存在するdocker imageと同様の部分はキャッシュが使用される。差分だけがbuildされる
docker image build -t ch02/echo:latest .
[+] Building 0.2s (10/10) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 183B 0.0s
=> [internal] load metadata for docker.io/library/golang:1.23.0 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/5] FROM docker.io/library/golang:1.23.0 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 29B 0.0s
=> CACHED [2/5] WORKDIR /go/src/github.com/gihyodocker/echo 0.0s
=> CACHED [3/5] COPY ./main.go . 0.0s
=> [4/5] COPY ./main.go . 0.0s
=> [5/5] RUN go mod init 0.1s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:12f9befa6e3a18d318bbe2b45364cb79437b8e0f40b8cbfb3a68418d80cd4ac7 0.0s
=> => naming to docker.io/ch02/echo:latest
- 一つのタグに紐づけられるimageは一つまでなので、タグを新規に付け直した場合は、古いimageのタグは
<none>
と表示される
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ch02/echo latest 12f9befa6e3a 9 seconds ago 844MB
<none> <none> 46a84e8a5bfb 45 minutes ago 844MB

コンテナのライフサイクル
実行中・停止・破棄という3つの状態に分類される。
-
実行中
docker container run
で指定されたイメージをもとにコンテが作成され、アプリケーションの実行が開始される。コマンドを一度実行するのみのコンテナの場合は、コマンド実行後、停止の状態に移行する。 -
停止
ユーザーが明示的にコンテナを停止する or コンテナで実行されているアプリケーションが正常・異常を問わず終了した場合に自動的に停止する。コンテナ停止後もディスクに残り続ける。 -
破棄
頻繁に実行・停止を繰り返す様な場合は、ディスクに残り続けるため不要なコンテナは削除したほうがいい。