このページで解説している内容は、以下の 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 |
コンテナの作成と実行 | コンテナ名の指定 | オプション | イメージ名 | タグ |
オプションの意味
「-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 cp | sample.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-smp | ls /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イメージを作る②」で、残りの④⑤のステップを確認していきます。