このドキュメントで説明されているソフトウェアはサポートされていないか、拡張サポートが提供されています。
現在サポートされているリリースにアップグレードすることをお薦めします。

4.3 既存コンテナからのDockerイメージの作成

コンテナのコンテンツを変更する場合、docker commitコマンドを使用すると、コンテナの現在の状態をイメージとして保存できます。

次の例は、oraclelinux:6.6イメージをベースとするコンテナを、Apache HTTPサーバーが実行できるように変更する方法を示しています。 コンテナを停止した後で、そのイメージmymod/httpd:v1が作成されます。

oraclelinux:6.6コンテナからApacheサーバー・イメージを作成する手順:

  1. guestという名前のコンテナ内でbashシェルを実行します。

    [root@host ~]# docker run -i -t --name guest oraclelinux:6.6 /bin/bash
    [root@guest ~]#
  2. Webプロキシを使用する場合は、『Oracle Linuxリリース7管理者ガイド』https://docs.oracle.com/cd/E52668_01/E54669/html/ol7-proxy-config.htmlに関する項の説明に従ってゲストでyum構成を編集します。

  3. httpdパッケージをインストールします。

    [root@guest ~]# yum install httpd
  4. 必要な場合は、ゲスト上の/var/www/htmlディレクトリ階層以下に表示するWebコンテンツを作成します。

  5. ホスト上でdocker stopコマンドを使用してゲストを終了します。

    [root@host ~]# docker stop guest
    guest
  6. 停止したコンテナのIDを使用して、タグv1の付いたイメージmymod/httpdを作成します。

    [root@host ~]# docker commit -m "ol6 + httpd" -a "A N Other" \
      `docker ps -l -q` mymod/httpd:v1
    8594abec905e6374db51bed1bfb208804cfb60d96b285efb897db581a01676e9

    イメージにメモや作成者を記述するには、-mオプションと-aオプションを使用します。 このコマンドでは、新しいイメージのIDの完全バージョンが返されます。

    ここでdocker imagesコマンドを使用すると、新しいイメージがリストに表示されます。

    [root@host ~]# docker images
    REPOSITORY    TAG         IMAGE ID       CREATED       VIRTUAL SIZE
    mymod/httpd   v1          8594abec905e   2 minutes ago 938.5 MB
    oraclelinux   6           9ac13076d2b5   5 days ago    319.4 MB
    oraclelinux   6.6         9ac13076d2b5   5 days ago    319.4 MB
    oraclelinux   latest      073ded22ac0f   5 days ago    265.2 MB
    oraclelinux   7           073ded22ac0f   5 days ago    265.2 MB
    oraclelinux   7.0         073ded22ac0f   5 days ago    265.2 MB
  7. guestという名前のコンテナを削除します。

    # docker rm guest
    guest

これで、次のように新しいイメージを使用して、Webサーバーとして機能するコンテナを作成できます。

# docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
7afbbefec5191f632e149f85ae10ed0ba88f1c545daad18cb930e575ef6a3e63

-dオプションを使用すると、コマンドはバックグラウンドで非対話的に実行され、一意のコンテナIDの完全バージョンが表示されます。 -p 8080:80オプションは、ゲストのポート80をホストの8080にマップします。 ポート・マッピングを表示するには、次のようにdocker psまたはdocker portを実行します。

[root@host ~]# docker ps
CONTAINER ID  IMAGE         COMMAND    CREATED    STATUS   PORTS                  NAMES
7afbbefec519  mymod/httpd:v1           ...        ...      0.0.0.0:8080->80/tcp   newguest
[root@host ~]# docker port newguest 80
0.0.0.0:8080
注意

docker psコマンドでは、コンテナIDの短縮バージョンが表示されます。 --no-truncオプションを使用すると、長いバージョンを表示できます。

デフォルトのIPアドレスの値0.0.0.0は、ホスト上のすべてのネットワーク・インタフェースにポート・マッピングが適用されることを意味します。 再マッピングの適用先のIPアドレスを制限するには、次のように複数の-pオプションを使用します。

# docker run -d --name newguest -p 127.0.0.1:8080:80 -p 192.168.1.2:8080:80 \
  mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND

ゲストが提供しているWebコンテンツを表示するには、ブラウザがホストのポート8080を参照するように指定します。 別のシステムからコンテンツにアクセスする場合は、次のようにホストのポートに対する着信接続の許可が必要になる可能性があります。

[root@host ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
[root@host ~]# service iptables save

イメージを削除する必要がある場合は、docker rmiコマンドを使用します。

[root@host ~]# docker rmi mymod/httpd:v1
Untagged: mymod/httpd:v1
Deleted: 7afbbefec5191f632e149f85ae10ed0ba88f1c545daad18cb930e575ef6a3e63
注意

バージョン1.8のDockerから、実行中のコンテナのイメージを削除できません。

本番環境でdocker commitコマンドを使用してイメージを作成すると、そのイメージの作成手順を記録できる便利な方法がないので、消失や破損したイメージの再作成が困難になる場合があります。 イメージを作成する場合の推奨方法は、Dockerfileを設定して、ユーザーのかわりにDockerがイメージをビルドできるように命令を定義することです。 4.4項「DockerfileからのDockerイメージの作成」を参照してください。