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

Docker超入門:Dockerコンテナからイメージを作る流れ①:取得・実行・操作

Dockerコンテナからイメージを作る流れ①:取得・実行・操作

 Dockerでは、既存のイメージからコンテナを作り、そこに手を加えることで新しいイメージを作成することができます。ここではその前半部分、つまり ①イメージの取得 → ②コンテナの作成と実行 → ③コンテナの操作 を順に体験していきましょう。

全体の流れ

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

  1. イメージの取得(pull)
  2. コンテナの作成と実行(run)
  3. コンテナの操作(ファイルの追加や変更)
  4. イメージの作成(commit)
  5. イメージの公開(push)

今回は①~③の部分を扱います。

① イメージの取得

まずはベースとなるUbuntuの最新イメージを取得します。

コマンドの書式

docker image pull <イメージ名>:<タグ>

実行例

docker image pull ubuntu:latest

タグを省略した場合は、自動的に :latest が指定されます。

出力例

PS C:\Users\joeac> docker image pull ubuntu:latest
latest: Pulling from library/ubuntu
Digest: sha256:353675e2a41babd526e2b837d7ec780c2a05bca0164f7ea5dbbd433d21d166fc
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest

実行結果の確認

docker image ls

出力例

PS C:\Users\joeac> docker image ls
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
ubuntu-echo              latest    83e81b62b3c4   13 days ago   117MB
infralinux1/ubuntu-smp   1.0       83e81b62b3c4   13 days ago   117MB
ubuntu                   latest    353675e2a41b   13 days ago   117MB

これでUbuntuイメージが取得できました。

② コンテナの作成・実行

次に、取得したイメージからコンテナを作成して実行します。

コマンドの書式

docker container run --name <コンテナ名> -it -d <イメージ名>:<タグ>

実行例

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

出力例

PS C:\Users\joeac> docker container run --name ubuntu-smp -it -d ubuntu:latest
070315c81ee92397377ece4f03ad1ea7f1656d8bbc5dcfcded1354be6d5cf739
  • --name ubuntu-smp : コンテナにわかりやすい名前を付ける
  • -it : 対話的に操作できるようにする(-i と -t の組み合わせ)
  • -d : デタッチモードでバックグラウンド実行する

オプション解説

オプション説明
-i標準入力を開いたままにする。
-t疑似端末(tty)を割り当てる。
-it対話的にコンテナを操作できる。
-dデタッチモードでバックグラウンド実行

コンテナ確認

docker container ls -a

出力例

CONTAINER ID   IMAGE           COMMAND                 CREATED         STATUS                    PORTS     NAMES
070315c81ee9   ubuntu:latest   "/bin/bash"             2 minutes ago   Up 2 minutes                        ubuntu-smp
bc9be182e8a6   ubuntu-echo     "echo 'Hello Ubuntu'"   11 hours ago    Exited (0) 11 hours ago             cranky_dijkstra

STATUSが「Up」になっていれば、コンテナが動作中です。

③ コンテナの操作

次に、作成したコンテナに手を加えてみます。

ホストからコンテナにファイルをコピー

ホストのファイルをコンテナにコピーするには docker container cp を使います。

【構文】

docker container cp <ホストのファイル> <コンテナ名>:<パス>

実行例

echo "Ubuntu Sample" > sample.txt
docker container cp sample.txt ubuntu-smp:/root

出力例

PS C:\Users\joeac> echo "Ubuntu Sample" > sample.txt
PS C:\Users\joeac> docker container cp sample.txt ubuntu-smp:/root
Successfully copied 2.05kB to ubuntu-smp:/root

コピーできたかを確認します。

docker exec ubuntu-smp ls /root

出力例

PS C:\Users\joeac> docker exec ubuntu-smp ls /root
sample.txt

コンテナ内の変更を確認

コンテナで行われたファイルの変更は docker container diff で確認できます。

【構文】

docker container diff <コンテナ名>

実行例

docker container diff ubuntu-smp

出力例

PS C:\Users\joeac> docker container diff ubuntu-smp
C /root
A /root/sample.txt
  • C : 変更されたディレクトリやファイル
  • A : 新しく追加されたファイル
  • D : 削除されたファイル

このように、sample.txt/root に追加されたことが確認できます。

まとめ

 ここまでで、Ubuntuイメージを取得し、コンテナを作成・実行し、その中でファイルを操作する流れを学びました。次のステップでは、このコンテナをベースにして新しいDockerイメージを作成・公開する方法に進んでいきます。