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:/#
お疲れ様でした。