📚
コンテナのイメージ化
イメージの作成方法は以下2通り
・docker commit コマンドでイメージを作成する。
・docker build コマンドでイメージを作成する。(Dockerfileからイメージを作成する。)
それぞれのやり方を以下にまとめます
①docker commit コマンドでイメージを作成する。
#コンテナの作成
% docker run --name apa000ex -d -p 8092:80 httpd
70426bb18c3dcbd8141b24b90c4d829cbee72df9f86aab5b8ad765f5e5cd5dc7
#コンテナをイメージ化(イメージ名はex00000としています)
% docker commit apa000ex ex00000
sha256:4319fbe3aec946e977942db38d188a7d6a6bc76e15881ab2a7d2e067cf2839fa
#確認コマンド
% docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
ex00000:latest 4319fbe3aec9 175MB 45.2MB
httpd:latest dd178595edd6 177MB 47.6MB U
#後始末
% docker image rm ex00000
Untagged: ex00000:latest
Deleted: sha256:4319fbe3aec946e977942db38d188a7d6a6bc76e15881ab2a7d2e067cf2839fa
% docker image ls #docker runで作成したコンテナのイメージは残りますが想定内です
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
httpd:latest dd178595edd6 177MB 47.6MB U
#U・・・使用中コンテナのため上記を消す場合はコンテナを停止する必要がある。
②docker build コマンドでイメージを作成する。(Dockerfileからイメージを作成する。)
% touch Dockerfile #Dockerfileを作成する
% vi Dockerfile #中身の編集
% cat Dockerfile #以下中身です
FROM httpd
COPY index.html /usr/local/apache/htdocs/
% mv ~/Documents/index.html ~/Documents/apa_folder/
#index.htmlファイルをDocumentsフォルダ内のapa_folderに移動します・
% docker build -t ex00000 /Users/kasaisachisei/Documents/apa_folder/
#apa_folder内のindex.htmlファイル内の記載を表示するためのイメージを作成
[+] Building 1.0s (7/7) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 90B 0.0s
=> [internal] load metadata for docker.io/library/httpd:latest 0.2s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 109B 0.0s
=> [1/2] FROM docker.io/library/httpd:latest@sha256:dd178595edd6d4f49296f62f9587238db2cd1045adfff6fccc15a6c4d 0.2s
=> => resolve docker.io/library/httpd:latest@sha256:dd178595edd6d4f49296f62f9587238db2cd1045adfff6fccc15a6c4d 0.1s
=> [2/2] COPY index.html /usr/local/apache/htdocs/ 0.0s
=> exporting to image 0.2s
=> => exporting layers 0.1s
=> => exporting manifest sha256:4683ebf48ef242ac2150523795f6680d43b0fe4ab5454f44bbf695e47d0a4433 0.0s
=> => exporting config sha256:1dedfd85d03b19fa9f17778d277f10fbed49423ea0ba625241d87bfaf12e7d02 0.0s
=> => exporting attestation manifest sha256:586420871d27a2c7173730289878e39c2bd65568c41a485fab02cf24821d0eb7 0.0s
=> => exporting manifest list sha256:3ae68d74f1a083500406caf8af0167e9d6e31049cf18b9d141950d2014d9f88c 0.0s
=> => naming to docker.io/library/ex00000:latest 0.0s
=> => unpacking to docker.io/library/ex00000:latest 0.0s
%
一旦ここでイメージ作成までの流れを振り返りましょう
① docker build 実行
② ビルドコンテキスト送信
③ Dockerfile を読む
④ ベースイメージ取得
⑤ Dockerfileの命令を上から順に実行
% docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
ex00000:latest 3ae68d74f1a0 175MB 45.2MB
httpd:latest dd178595edd6 177MB 47.6MB U
#①の手順で削除の後、ex00000イメージがdocker buildコマンドで再作成されたことが分かります。
ちなみにイメージを持ち運ぶためには以下を実施する。
これを行うと開発・本番環境で作成したイメージを任意の環境へ移動させることができます
% docker save -o 000.tar ex00000
#移動先の別環境で.tarファイルを読み込み!
% docker image load -i ex00000.tar

分かりやすくすると以下のようになります。
docker build(イメージ作成)
↓
docker image save(.tarファイルへ変換!)
↓
別環境のサーバーへ
↓
docker image load(.tarファイルを読み込み!)
↓
docker run
以下後始末です。
% docker image rm ex00000
Untagged: ex00000:latest
Deleted: sha256:3ae68d74f1a083500406caf8af0167e9d6e31049cf18b9d141950d2014d9f88c
% docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
httpd:latest dd178595edd6 177MB 47.6MB U
#ex00000のイメージは削除できましたね、残っているhttpd:latestはコンテナ起動時のものなのでこれも始末します。※コンテナが動いているとイメージは削除できないのでまず停止させます。
#まずコンテナの停止→削除
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
70426bb18c3d httpd "httpd-foreground" About an hour ago Up About an hour 0.0.0.0:8092->80/tcp, [::]:8092->80/tcp apa000ex
% docker stop apa000ex
apa000ex
% docker rm apa000ex
apa000ex
% docker ps #確認コマンド
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#コンテナ削除できましたね、イメージを削除します↓
% docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
httpd:latest dd178595edd6 177MB 47.6MB
% docker image rm httpd
Untagged: httpd:latest
Deleted: sha256:dd178595edd6d4f49296f62f9587238db2cd1045adfff6fccc15a6c4d08f5d2e
% docker image ls
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
Discussion