📚

コンテナのイメージ化

に公開

イメージの作成方法は以下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