【Docker】コンテナをcommitして更新内容をDockerimageにしてみる
0.はじめに
今回は、「コンテナをcommitして更新内容をDockerimageにする」方法を解説します。
本記事の内容に沿って、ハンズオンいただくと以下を習得できます。
- コンテナを再起動する方法
- 実行中のコンテナ内でコマンドを実行する方法
- 更新したコンテナから新しいDockerimageを作成する方法
前提として、以下は準備できているものとして解説をしていきます。
- ✅Linux基礎の理解
- ✅DockerHubの登録
- ✅Dockerのインストール
まだご準備できていない方は、以前書いた記事をご覧いただければと思います。
では、次の章から具体的な解説を進めます!!
1.UbuntuのDockerimageをrunしてみる
この章で、図のようにUbuntuイメージをrunしてログインする方法を解説します。
ホストOS上のターミナルを立ち上げて、以下コマンドを実施します。
-
$ docker run -it ubuntu bash
(Ubuntuのコンテナを起動しbashでログインする)
では、docker run
してみましょう。
$ docker run -it ubuntu bash
すると、以下のような表示結果となり、Ubuntuのコンテナを起動しbashでログインした状態となります。
root@a8f40efabba4:/# ←ログインユーザー@コンテナIDで表示される
ちなみに、docker run
をした際、ホストOS上に指定したイメージがない場合は、DockerHubから自動的にpullしてきてくれます(今回だとUbuntuイメージ)。
次の章で、ログインしたUbuntu上で新しいファイルを作成し、コンテナを更新していきます。
2.Ubuntuのコンテナを更新してみる
前章でログインしたUbuntuのコンテナ内に新しいファイル(test)を作成し、コンテナを更新してみます。
具体的には、以下コマンドを実施していきます。
-
$ touch <file>
(新しいファイルを作成) -
$ exit
(Ubuntuのコンテナ上からログオフしてホストOS上へ戻る)
早速、touch
コマンドを実行しましょう。
root@a8f40efabba4:/# touch test
ls
コマンドでtestファイルが作成されていることを確認しましょう。
root@a8f40efabba4:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys test tmp usr var
root@a8f40efabba4:/#
testファイルが作成されていることを確認したら、exit
コマンドでコンテナ上から抜けましょう。
root@a8f40efabba4:/# exit
$
ホストOS上に戻ってこれたと思います。
次の章で、今回更新したUbuntuコンテナを再起動する方法を見ていきます。
3.コンテナを再起動してログインしてみる
前章で変更を加えた、Ubuntuのコンテナを再起動してみます。
具体的には、以下コマンドを実施していきます。
-
$ docker restart <container>
(コンテナを再起動する) -
$ docker ps -a
(コンテナの起動状態を確認する) -
$ docker exec -it <container> bash
(起動しているコンテナ対して、指定したプログラムを実行する) -
$ exit
(Ubuntuのコンテナ上からログオフしてホストOS上へ戻る)
まず、$ docker ps -a
コマンドでコンテナの状態を確認してみます。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8f40efabba4 ubuntu "bash" 54 minutes ago Exited (0) 5 minutes ago fervent_ardinghelli
$
STATUS欄を見ると、「Exited (0)」になっていることが確認できると思います。
では、以下コマンドで上記コンテナを再起動してみましょう。
$ docker restart a8f40efabba4
a8f40efabba4
$
再度、$ docker ps -a
コマンドで該当コンテナの起動状態を確認してみます。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8f40efabba4 ubuntu "bash" 59 minutes ago Up About a minute fervent_ardinghelli
$
STATUS欄を見ると、「Up」になっていることが確認できると思います。
では、以下コマンドを実施して再度コンテナへログインしてみましょう。
$ docker exec -it a8f40efabba4 bash
root@a8f40efabba4:/#
ログインできましたら、ls
コマンドを実行して、testファイルがあるか確認してみましょう。
root@a8f40efabba4:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys test tmp usr var
root@a8f40efabba4:/#
testファイルが作成されていることを確認したら、exit
コマンドでコンテナ上から抜けましょう。
root@a8f40efabba4:/# exit
$
ホストOS上に戻ってこれました。
以上のことから、前回更新したtestファイルの存在が確認できたと思います。
次の章で、コンテナをcommitして更新内容をDockerimageにしてみましょう。
4.コンテナをcommitして更新内容をDockerimageにしてみる
更新したUbuntuのコンテナから新たなDockerimageを作成してみます。
具体的には、以下コマンドを実施していきます。
-
$ docker commit <container> <new image>
(コンテナをcommitして更新内容をDockerimageにする)
では、実際に$ docker commit
を実行してみましょう。新しいイメージ名は「タグ名:イメージ名」で指定します。
$ docker commit a8f40efabba4 ubuntu:update
sha256:7737b7f797e25f4b003a331fd4b546baf5f0286c280c13390921377299e471bd
上記のように、作成した新しいイメージのハッシュ値が出力され、正常終了すると思います。
作成されたことを確認するために、docker images
コマンドを実行してみましょう。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu update 7737b7f797e2 6 seconds ago 77.9MB
指定した「タグ名:イメージ名」で作成されていることが確認できると思います。
今回はtestファイルを追加しただけですが、本当はミドルウェアの追加など、もっと複雑な更新を行なって新しいイメージにします。
5.おわりに
今回はコンテナの理解を深めるために、Ubuntuのコンテナを使って以下を学びました。
- コンテナを再起動する方法(
docker restart
) - 実行中のコンテナ内でコマンドを実行する方法(
docker exec
) - 更新したコンテナから新しいDockerimageを作成する方法(
docker commit
)
一回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。
次回以降、「DockerHubにDockerimageをpushする」方法などを解説していきたいと思います。
おわりっ!!
あわせて読んでいただきたい記事
Discussion