このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker入門】コンテナからDockerイメージを作る①

ここでは、コンテナからDockerイメージを作る方法について解説しています。

少々、長くなりますので、以下の2部で構成しています。

コンテナからDockerイメージを作る流れは、下図のとおりです。

①イメージの取得
②コンテナの作成・実行
③コンテナの操作
④イメージの作成
⑤イメージの公開

ここでは、①~③までのステップを順に試していきます。

①イメージの取得

CentoOSの最新バージョンを取得します。

 最新バージョンを取得するには、タグに「:latest」と指定します。このタグは省略することができます。

・「docker image pull centos:latest」を実行します。

PS C:\Users\joeac> docker image pull centos:latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

イメージを取得できたかどうかを確認します。

・「docker image ls」コマンドを実行します。

PS C:\Users\joeac> docker image ls
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
infralinux1/ubuntu-smp   1.0       9a9568f10c24   2 weeks ago   77.9MB
ubuntu-echo              latest    9a9568f10c24   2 weeks ago   77.9MB
ubuntu                   latest    ca2b0f26964c   2 weeks ago   77.9MB
centos                   latest    5d0da3dc9764   2 years ago   231MB

②コンテナの作成・実行

コンテナを作成して実行します。

コンテナの作成と実行までを行うには「docker container run」コマンドを使います。

docker container run --name centos-smp -it -d centos:latest

docker container run--name centos-smp-it -d centos:latest
コンテナの作成と実行コンテナ名の指定オプションイメージ名タグ
docker container run コマンド

オプションの意味

 「-it」オプションを付けることで ターミナルでコンテナを実行することができるようになります。このコマンドに付けておく「お約束事」だと覚えておきましょう。また「-d」オプションでデタッチモードを指定して、バックグラウンドでコンテナを起動させます。

・「docker container run --name centos-smp -it -d centos:latest 」コマンドを実行します。

PS C:\Users\joeac> docker container run --name centos-smp -it -d centos:latest
caa7ac8a53808891712f7ed16a53fccb2d2223f01e7eb3d4d000e8f668de5791

作成したコンテナを確認します。

・「docker container ls -a」コマンドを実行します。

PS C:\Users\joeac> docker container ls -a
CONTAINER ID   IMAGE           COMMAND                    CREATED          STATUS                  PORTS     NAMES
caa7ac8a5380   centos:latest   "/bin/bash"                21 seconds ago   Up 20 seconds                     centos-smp
3e2aaf829cc0   ubuntu-echo     "/bin/sh -c 'echo \"H…"   2 days ago       Exited (0) 2 days ago             serene_pascal

 コンテナのSTATUSが「Up」になっています。これは停止中ではなく実行中であることを意味しています。

この実行中のイメージを操作していきます。

③コンテナの操作

ここでは、下図の「③コンテナを操作」を行っていきます。

 オリジナルのイメージから作成したコンテナに手を加えないで、そのコンテナからイメージを作成しても意味がないので、コンテナを操作して変更を加えていきます。

ホストOS上にあるファイルをコンテナにコピーする。

 ホストOS上にあるファイルをコンテナにコピーするには「docker container cp」コマンドを使用します。

このコマンドは、コンテナ間、およびホストOSとコンテナ間のファイルのコピーに使用します。

 ホストOS上にある「sample.txt」ファイルをコンテナ「centos-smp」の「/root」ディレクトリにコピーします。

【構文】
docker container cp sample.txt centos-smp:/root

docker container cpsample.txt centos-smp:/root
ファイルをコンテナにコピーする。ホストOS上のファイル名コンテナ名区切りパス名
コマンド構文

コンテナにコピーする「sample.txt」を作成する。

コンテナにコピーする「sample.txt」を作成します。

・PowerShell 上で以下のコマンドを実行します。

「cat sample.txt」で作成したファイルの内容を確認します。

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> echo "CentOS Sample" > sample.txt
PS C:\Users\joeac\Desktop\docker> cat sample.txt
CentOS Sample

「sample.txt」をコンテナ「centos-smp」にコピーする。

「/root」ディレクトリにコピーします。

・「docker container cp sample.txt centos-smp:/root」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker> docker container cp sample.txt centos-smp:/root
Successfully copied 2.05kB to centos-smp:/root

コンテナに接続してファイルがコピーされたかを確認する。

コンテナに接続するために「docker exec」コマンドを使います。

【構文】
docker exec centos-smp ls /root

docker exec centos-smpls /root
コンテナ接続コマンドコンテナ名コマンド
コマンド構文

「ls /root」は、ファイルやディレクトリ内容を一覧表示するコマンドです。

・「docker exec centos-smp ls /root」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker> docker exec centos-smp ls /root
anaconda-ks.cfg
anaconda-post.log
original-ks.cfg
sample.txt

「sample.txt」ファイルがあることが確認できます。

コンテナ内で行われたファイルシステムの変更を確認する。

 Dockerコンテナ内で行われたファイルシステムの変更を確認するには、「docker container diff」コマンドを使います。このコマンドは、Dockerコンテナ内で行われたファイルシステムの変更を表示します。

 このコマンドを使用することで、特定のDockerコンテナ内でファイルやディレクトリが追加、削除、変更されたことが確認できます。

基本的な使用法は次のとおりです。

【構文】
docker container diff centos-smp

変更のタイプには、ファイルやディレクトリの

A・・・追加
D・・・削除
C・・・変更

が含まれます。

・「docker container diff centos-smp」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker> docker container diff centos-smp
C /root
A /root/sample.txt

上の出力から「/root」ディレクトリに「sample.txt」が追加(A)されたことが確認できます。

 この続きは、「コンテナからDockerイメージを作る②」で、残りの④⑤のステップを確認していきます。