【Docker基礎】コンテナのイメージ化

 ここまで、公式が提供するイメージを使ってコンテナを起動してきました。しかし、自分の作ったコンテナを “そのまま” 別のパソコンやサーバに持って行きたい場面は、意外と多いものです。そこで重要になるのが、「コンテナをイメージにする」テクニック。
 ここでは、コンテナをイメージ化する方法として、「commit(コンテナからの書き出し)」と「Dockerfile(ビルド)」の 2 つのアプローチを学びます。サーバエンジニアにとっては必須知識ですので、ぜひ押さえておきましょう。

1.コンテナをイメージ化するメリット

  1. 同じ構成のコンテナを量産
    ・一度カスタマイズしたコンテナを“ひな形”として繰り返し使える。
    ・バージョンの違いや環境差が出にくい。
  2. コンテナの移動が容易
    ・イメージファイルにしてしまえば、他のパソコンやサーバにコピーして docker run するだけで再現できる。
  3. チーム開発や本番運用で役立つ
    ・開発チームにまったく同じ環境を配る。
    ・CI/CD パイプラインでイメージを扱う。

2.コンテナを量産できるイメージ作成のイメージ

2.1. コンテナそのものをコピーはできない

 Docker ではコンテナを直接コピーする仕組みは存在せず、イメージを作ってからコンテナを増やすという流れになります。

コンテナ
   |
   | docker commit
   v
イメージ
   |
   | docker save
   v
イメージファイル
   |
   | 移動
   v
別の環境
   |
   | docker load
   v
イメージ
   |
   | docker run
   v
コンテナの量産

3.コンテナのイメージ化には 2 つの方法

  1. docker commit
    ・すでに動いている(あるいは停止している)コンテナを元に、コマンド1つでイメージを作成
    手軽だが、コンテナを自分で作り込む必要があり、“手順書” が残りにくい。
  2. Dockerfile
    ・Dockerfile に「何をコピー」「どんなコマンドを実行」など手順を記述し、docker build でイメージ化
    再現性や保守性に優れ、チーム開発で重宝する。
    ・イメージを一から作るため、最初に Dockerfile を書く手間がかかる。

3-1. commit でイメージを書き出す

docker commit <コンテナ名> <作成するイメージ名>
  • 例: docker commit my-container myapp:1.0
  • 用途: 既に構築済みコンテナを丸ごとイメージ化したいとき
  • 注意: コンテナの状態や設定を後から確認しづらい(Dockerfile 的な手順書がない)

3-2. Dockerfile でイメージを作成する

docker build -t <作成するイメージ名> <材料フォルダのパス>
  • 例: docker build -t myapp:1.0 .
  • 用途: 手順書(Dockerfile)を元に自動的にイメージをビルド
  • 特徴
    ・Dockerfile に FROMCOPYRUN などを記述
    ・再現性が高く、チームで共有しやすい。
Dockerfile の例
FROM ubuntu:latest
COPY app/ /usr/src/app/
RUN apt-get update && apt-get install -y python3
CMD ["python3", "/usr/src/app/main.py"]
  • FROM: ベースイメージ指定
  • COPY: ホストの app/ ディレクトリをコンテナ内 /usr/src/app/ にコピー
  • RUN: イメージビルド時に実行するコマンド
  • CMD: コンテナ起動時のデフォルトコマンド

4.主な Dockerfile コマンド(覚えておきたいもの)

コマンド内容
FROMベースにするイメージを指定
COPYホストのファイル/フォルダをイメージに追加
RUNイメージビルド時にLinuxコマンドを実行
CMDコンテナ起動時に実行する既定コマンドを指定
ENTRYPOINTコンテナの起動コマンドを強制する(CMDより優先度高)
ENV環境変数を定義
WORKDIRRUN/CMD時の作業ディレクトリを指定
EXPOSEコンテナが使用するポートを宣言(実際の通信には-pなどでマッピングが必要)

5.まとめ

  • コンテナをイメージ化するメリット: 同じ環境の再利用や移動が容易
  • 2つの方法
    docker commit → すでにあるコンテナを簡単にイメージ化
    ・Dockerfile + docker build → 再現性・管理性に優れた方法
  • サーバエンジニアにとっては必須スキル: システムのアップデートや移行をスムーズにする。

 次のコンテンツでは、これらの手法を実際にどのように操作するか、さらに詳しく解説していきます。どちらを選ぶかはシーンによりけりですが、Dockerfile 方式が主流です。まずは、手軽なcommitでイメージを作る方法から紹介します。