スポンサーリンク

【Docker速攻入門】Dockerの動きの理解とコンテナを「commit」して再利用する。

スポンサーリンク

前回の記事ではdockerでubuntuを起動してコマンドをインストールしてみました。

前回説明したとおりコンテナにインストールしたコマンドやソフトウェアは実行中がコンテナするとインストール内容は破棄され、諸々行った作業内容が無かったことになります。

これは当たり前ですが、コンテナを起動するときに読み込むコンテナイメージはインストール前の物を再び読み込んでいる為です。

せっかくインストールしたのですから継続して使いたいと思いますよね。

こんな時は作業を行った状態のコンテナイメージを「commit」と言うコマンドオプションにより新たなコンテナイメージを作成することが出来ます。

そしてこの作成したコンテナイメージからコンテナを起動すれば「commit」を行った時点の状態で起動できることになります。

ではやり方を見て行きましょう。

スポンサーリンク

1.コンテナを起動する。

前回のコンテナ起動はフォアグランドで行っていましたのでubuntuから抜けると即コンテナも終了していました。

今回はバックグラウンドで起動してubuntuから抜けてもコンテナが終了しないように起動します。

バックグランドで起動するには「-d」オプションを指定します。

①ubuntuのコンテナを起動します。

C:\Users\user01>docker run -it -d ubuntu bash
8192b1138668d39e0c659cdcd15c3c6cce5d83a76e5c476abec67d7111517a9a

表示された「8192b1138668d39e0c659cdcd15c3c6cce5d83a76e5c476abec67d7111517a9a」はコンテナIDです。毎回変わります。
コンテナIDを指定するには先頭から一意で判別できる長さの文字列で指定することが出来ます。
この場合「8192b」とかでも大丈夫です。

②「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が先頭の一部分で表示されていることが分かります。

③バックグラウンドで動いているコンテナに接続します。

C:\Users\user01>docker exec -it 8192b1138668 bash --login
root@8192b1138668:/#

④コマンドをインストールする。

前回同様ipコマンドが使えるようにしてみます。

apt-get upgrade
apt-get update
apt-get install iproute2 -y

⑤コマンドを実行してみます。
ipコマンドが実行されることを確認しておいてください。

ip addr show

⑥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コマンドが作成されたコンテナイメージで起動することで、作業内容が反映されたコンテナイメージで起動できることが確認できたと思います。

スポンサードサーチ

2.まとめ

このように必要な環境を構築したコンテナイメージを作成することが理解いただけたと思います。

作成したコンテナイメージはローカル環境に格納された状態です。
これをdockerハブにアップロードして他の利用者に公開することも可能です。(アップロードする場合はコメントや作成者情報などを追記したほうがいいでしょう)

 

 

 

 

 

 

 

 

 

docker

Posted by garnet