【Docker速攻入門】「docker commit」でコンテナイメージをカスタマイズする
前回の記事ではdockerでubuntuのコンテナを起動してコマンドを追加インストールする方法を説明しました。
前回の記事でも説明しましたが、起動中のコンテナに対してインストールしたコマンドやソフトウェアは次回のコンテナ起動時には破棄されてしまいます。
これは使用するコンテナイメージ自体にインストールなどの作業内容が反映されていないためです。
せっかくインストールしたのですから継続して使いたいと思いますよね。
こんな時は作業を行った状態のコンテナをコンテナイメージに保存する「commit」と言うコマンドオプションがあります。
この「commit」でコンテナイメージを更新すれば作業内容が反映された状態のコンテナを使用することが出来ます。
ではやり方を見て行きましょう。
1.コンテナを起動する。
まず、前回のコンテナ起動ですが、フォアグランドで起動したのでubuntuから抜けると同時にコンテナも終了していました。
今回はバックグラウンドで起動することでubuntuから抜けてもコンテナが終了しないように起動します。
バックグランドで起動するには「-d」オプションを指定します。
1)ubuntuのコンテナ起動
コマンドプロンプトで以下のコマンドを入力してubuntuのコンテナを起動します。
C:\Users\user01>docker run -it -d ubuntu bash 8192b1138668d39e0c659cdcd15c3c6cce5d83a76e5c476abec67d7111517a9a
ここで表示された「8192b1138668d39e0c659cdcd15c3c6cce5d83a76e5c476abec67d7111517a9a」はコンテナIDです。これは毎回変わります。
コンテナIDを指定するには先頭から一意で判別できる長さの文字列で指定することが出来ます。
この場合「8192b」としても十分大丈夫です。
2)バックグランド動作しているコンテナの確認
続いて「docker ps」コマンドでバックグラウンドで動いているコンテナの状態を確認します。
C:\Users\user01>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8192b1138668 ubuntu "bash" 7 seconds ago Up 6 seconds fervent_chandrasekhar
先程も表示されたコンテナIDが先頭の一部分で表示されていることが分かります。
3)バックグランドのコンテナに接続
「docker exec」コマンドでバックグラウンドで動作しているコンテナに接続します。
C:\Users\user01>docker exec -it 8192b1138668 bash --login root@8192b1138668:/#
スポンサードサーチ
2.コンテナイメージを更新して新たなコンテナイメージを作成
1)コンテナに「ip」コマンドをインストール
コンテナ上のubuntuに接続できたのでコマンドをインストールしてみましょう。
前回同様「ip」コマンドをインストールします。
apt-get upgrade apt-get update apt-get install iproute2 -y
コマンドの実行を確認してみます。
ipコマンドが正常に実行されることを確認しておいてください。
ip addr show
2)「docker commit」で対象のコンテナイメージを更新する
①ubuntuから「exit」で抜けてコマンドプロンプトに戻ります。
フォアグランドで起動したときは即コンテナも終了していましたが、今回はバックグランドで動かしているのでコンテナは継続して動いています。
②「docker images」コマンドで現在PC上に存在するイメージの一覧を表示してみます。
C:\Users\user01>docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest f643c72bc252 1 days ago 72.9MB hello-world latest bf756fb1ae65 1 days ago 13.3kB
③「docker ps」で稼働中のコンテナを確認します。
C:\Users\user01>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8192b1138668 ubuntu "bash" 14 minutes ago Up 14 minutes fervent_chandrasekhar
稼働中のコンテナIDが「8192b1138668」であることが確認できました。
④コンテナID「8192b1138668」を「docker commit」コマンドでコンテナイメージとして書き出して新たに「ubuntu_01」として保存します。
C:\Users\user01>docker commit 8192b1138668 ubuntu_01 sha256:c0b93bce7b4d21396b1aa223b021658a16436ca86c2007f9d5fb3f8cab6aeace
⑤イメージの一覧を確認してみます。
C:\Users\user01>docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu_01 latest c0b93bce7b4d 14 seconds ago 104MB ubuntu latest f643c72bc252 5 weeks ago 72.9MB hello-world latest bf756fb1ae65 12 months ago 13.3kB
「ubuntu_01」というコンテナイメージが作成されたことが確認できました。
⑥作成したコンテナイメージで起動してipコマンドが実行できることを確認します。
C:\Users\user01>docker run -it ubuntu_01 bash root@4fea950e03c3:/# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defaul t qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000 link/sit 0.0.0.0 brd 0.0.0.0 27: eth0@if28: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:xx:xx:xx brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever root@4fea950e03c3:/#
今度はipコマンドが作成されたコンテナイメージで起動することで、作業内容が反映されたコンテナイメージで起動できることが確認できたと思います。
スポンサードサーチ
3.まとめ
このように必要な環境を構築したコンテナイメージを作成することが理解いただけたと思います。
作成したコンテナイメージはローカル環境に格納された状態です。
これをdockerハブにアップロードして他の利用者に公開することも可能です。(アップロードする場合はコメントや作成者情報などを追記したほうがいいでしょう)


