docker

Dockerの作業済みコンテナからイメージを作って移植を楽にする

More than 3 years have passed since last update.

tuboneです。

前回はDockerのnode.jsイメージを利用してnode.jsが動くコンテナを作り、そこからhubotを導入しました。

Dockerでは通常、イメージからコンテナを生成、起動するのが一般的ですが

前回のように、コンテナ内で作業をしてしまった場合、せっかくでしたらイメージとして保存し、別環境に簡単に移植できた方が便利です。

イメージを作る方法としてはDockerfileが定番ですが、

Dockerにはコンテナからイメージを作るCommitというコマンドがあるので今回はこちらをつかったイメージ作成をしてみたいと思います。


dockerコンテナに接続する


補足:コンテナからの抜け方の違い

(冗長このうえないので知っている人は無視してください)

dockerのコンテナでbashなどを起動している場合はexitで抜けるとコンテナのbashがExit(停止)して元の環境に移行しますが、バックで動かしたまま抜ける方法もあります。

Cntl + p , Cntl + q で プロセスをExitせず抜けることができます。

Exit(停止)していないコンテナに再接続するには attach を利用します。

root@localhost:/# docker attach hubot1

停止しているコンテナを起動するにはstartを利用します。

root@localhost:/# docker start hubot1

hubot1


Dockerコンテナを終了させる

dockerのコンテナに接続している場合はコンテナのbash上でexitすれば大丈夫です。

root@811aa8ed56dd:/# exit

exit

psコマンドで停止したことが確認できました。

root@localhost:/# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
811aa8ed56dd node "/bin/bash" 40 hours ago Exited (0) 7 seconds ago hubot1

また、コンテナが動いている状態でコンテナに接続されていない場合はstopコマンドでいけます。

root@localhost:/# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
811aa8ed56dd node "/bin/bash" 40 hours ago Up 5 seconds hubot1

このようにpsコマンドで動いている状態のコンテナを確認し…

stopコマンドで… コンテナを停止させます。

root@localhost:#/ docker stop hubot1

hubot1

exitしていることが確認できました。

root@localhost:/# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
811aa8ed56dd node "/bin/bash" 40 hours ago Exited (0) 4 seconds ago hubot1


停止したDockerコンテナからイメージを作る

停止したコンテナからイメージを作るときはcommitコマンドを使います。

root@localhost:/# docker commit hubot1 hubot:tubone

292281c11f0c2adf2a052b2b30625df0f48d81d3ab523635eb97b360f03096b4

imagesコマンドで確認してみます。

root@localhost:/# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hubot tubone 292281c11f0c 49 seconds ago 691 MB
node latest 8c599b26d97b 2 days ago 643 MB

hubot:tuboneができていることが確認できました。


作ったDockerイメージからコンテナを作る

runでコンテナを生成起動します。

ここらへんは前回と同じです。

名前は便宜上hubot2にしました。

root@localhost:/# docker run -it --name "hubot2" hubot:tubone /bin/bash

root@f1bff93c0d2c:/#

お疲れ様でした。