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

  • 52
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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:/#

お疲れ様でした。