終了した Docker イメージの保存とエクスポート方法

DockerBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、終了した Docker イメージを保存およびエクスポートする手順を案内します。終了した Docker イメージを識別およびリストし、ファイルに保存し、その後保存されたイメージをインポートおよびロードする方法を学習します。この知識は、Docker イメージ管理ワークフローを最適化し、Docker 環境を効率的に管理するのに役立ちます。

Docker イメージの概要

Docker は、開発者がアプリケーションとその依存関係を軽量で移植性があり、自己完結的な単位である Docker イメージにパッケージ化できる人気のコンテナ化プラットフォームです。これらのイメージは、Docker がインストールされているシステムであれば、基盤となるオペレーティングシステムやハードウェアに関係なく、簡単に共有、デプロイ、実行できます。

Docker イメージは Docker エコシステムの基盤であり、その構造と管理を理解することは、Docker を効果的に扱うために不可欠です。Docker イメージは本質的に、特定のアプリケーションまたはサービスを実行するために必要なファイル、ライブラリ、および依存関係を含む読み取り専用テンプレートです。

Docker コンテナを実行するときは、Docker イメージに基づいています。コンテナはイメージのすべてのプロパティと設定を継承し、一貫性があり再現可能な実行環境を保証します。これにより、開発環境から本番環境まで、さまざまな環境でアプリケーションをデプロイおよびスケールアップすることが容易になります。

graph TD A[Docker イメージ] --> B[Docker コンテナ] B --> C[実行中のアプリケーション]

Docker イメージを作成するには、Dockerfile を使用できます。Dockerfile は、イメージを構築するための手順を定義するテキストベースのスクリプトです。Dockerfile は、ベースイメージを指定し、必要なソフトウェアをインストールし、アプリケーションコードをコピーし、実行環境を設定します。

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Docker イメージが構築されると、Docker Hub やプライベートレジストリなどの Docker レジストリを通じて共有および配布できます。これにより、開発者やチームは協力し、既存のイメージを再利用できるため、さまざまな環境での効率性と一貫性を向上させることができます。

終了した Docker イメージの識別とリスト表示

Docker を使用する場合、終了した Docker イメージ(システムから停止または削除されたイメージ)に出会うことは一般的です。これらの終了したイメージは、貴重なディスク容量を消費し、クリーンで効率的な Docker 環境を維持するために管理または削除する必要がある場合があります。

終了した Docker イメージを識別およびリスト表示するには、次の Docker コマンドを使用できます。

終了した Docker コンテナのリスト表示

docker ps -a コマンドを使用して、終了したコンテナを含むすべての Docker コンテナをリスト表示できます。これにより、各コンテナのコンテナ ID、イメージ名、およびステータスが表示されます。

$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS                     PORTS     NAMES
a1b2c3d4e5f6   nginx:latest  "nginx -g 'daemon off"   10 minutes ago  Exited (0) 5 minutes ago             my-nginx-container

上記の例では、my-nginx-container が終了しています。

終了した Docker イメージのリスト表示

終了した Docker イメージをリスト表示するには、docker images コマンドに --filter オプションを使用できます。

$ docker images --filter "dangling=true"
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
<none>       <none>    a1b2c3d4e5f6   10 minutes ago 133MB

これにより、実行中のコンテナに関連付けられていない終了した Docker イメージがすべて表示されます。

あるいは、docker image ls コマンドに --filter オプションを使用しても同じ結果を得られます。

$ docker image ls --filter "dangling=true"
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
<none>       <none>    a1b2c3d4e5f6   10 minutes ago 133MB

--filter "dangling=true" オプションは、出力に現在実行中のコンテナに関連付けられていない終了した Docker イメージのみを表示するようにフィルタリングします。

終了した Docker イメージを識別およびリスト表示することで、必要に応じて保存、エクスポート、または削除して、クリーンで効率的な Docker 環境を維持できます。

終了した Docker イメージをファイルに保存する

終了した Docker イメージを識別およびリスト表示した後、バックアップ、配布、または将来の使用のために、それらをファイルに保存したい場合があります。docker save コマンドを使用すると、1 つ以上の Docker イメージを圧縮された tar アーカイブファイルに保存できます。

単一の終了した Docker イメージを保存する

単一の終了した Docker イメージをファイルに保存するには、次のコマンドを使用します。

$ docker save -o my-image.tar <image-name>

<image-name> を保存する終了した Docker イメージの名前または ID に置き換えます。

たとえば、nginx:latest イメージを my-nginx-image.tar というファイルに保存するには、次のコマンドを使用します。

$ docker save -o my-nginx-image.tar nginx:latest

複数の終了した Docker イメージを保存する

保存する終了した Docker イメージが複数ある場合は、イメージ名または ID のスペース区切りのリストを指定できます。

$ docker save -o my-images.tar <image1-name> <image2-name> <image3-name>

これにより、指定されたすべてのイメージが my-images.tar ファイルに保存されます。

保存されたイメージの検証

保存されたイメージファイルの内容を検証するには、tar アーカイブ内のファイルをリスト表示します。

$ tar tf my-image.tar

これにより、my-image.tar ファイルの内容が表示され、保存された Docker イメージのレイヤーとメタデータが表示されます。

終了した Docker イメージをファイルに保存することで、必要に応じてこれらのイメージをアーカイブ、配布、または復元し、Docker 環境が整理され、効率的であることを保証できます。

終了した Docker コンテナをアーカイブとしてエクスポートする

終了した Docker イメージをファイルに保存する以外にも、docker export コマンドを使用して圧縮アーカイブとしてエクスポートすることもできます。このプロセスは、終了したコンテナの完全なファイルシステムを含む単一のファイルを作成します。これは、コンテナの状態を共有または復元するために役立ちます。

単一の終了した Docker コンテナをエクスポートする

単一の終了した Docker コンテナをアーカイブとしてエクスポートするには、次のコマンドを使用します。

$ docker export -o my-container.tar <container-id>

<container-id> をエクスポートする終了した Docker コンテナの ID または名前で置き換えます。

たとえば、my-nginx-containermy-nginx-container.tar というアーカイブファイルとしてエクスポートするには、次のコマンドを使用します。

$ docker export -o my-nginx-container.tar my-nginx-container

複数の終了した Docker コンテナをエクスポートする

エクスポートする終了した Docker コンテナが複数ある場合は、ループを使用してプロセスを自動化できます。

$ for container in $(docker ps -a -q --filter "status=exited"); do
    docker export -o "${container}.tar" "$container"
  done

このスクリプトは、各終了した Docker コンテナを個別の tar アーカイブファイルにエクスポートします。ファイル名はコンテナ ID を使用します。

エクスポートされたアーカイブの検証

エクスポートされたアーカイブファイルの内容を検証するには、tar アーカイブ内のファイルをリスト表示します。

$ tar tf my-container.tar

これにより、my-container.tar ファイルの内容が表示され、エクスポートされた Docker コンテナのファイルシステム構造が表示されます。

終了した Docker コンテナをアーカイブとしてエクスポートすることは、バックアップ、移行、またはトラブルシューティングに役立ちます。エクスポートされたファイルには、コンテナのファイルシステムと設定を含む、コンテナの完全な状態が含まれています。

保存済み Docker イメージのインポートとロード

終了した Docker イメージを保存またはエクスポートした後に、それらを Docker 環境に戻すためにインポートまたはロードする必要がある場合があります。これは、イメージを復元したり、他者と共有したり、異なるシステム間で移動したりする場合に役立ちます。

保存済み Docker イメージのインポート

ファイルに保存された Docker イメージをインポートするには、docker load コマンドを使用します。

$ docker load -i my-image.tar

これにより、my-image.tar ファイルから Docker イメージがロードされ、ローカルの Docker イメージリポジトリに追加されます。

インポートされたイメージは、システム上の Docker イメージをリスト表示することで確認できます。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    a1b2c3d4e5f6   10 minutes ago 133MB

エクスポートされた Docker コンテナアーカイブのロード

Docker コンテナをアーカイブファイルとしてエクスポートした場合は、docker import コマンドを使用して Docker 環境に戻すことができます。

$ docker import - my-container:latest < my-container.tar

これにより、my-container.tar アーカイブの内容から、新しい Docker イメージ my-container:latest が作成されます。

次に、このイメージを使用して新しいコンテナを作成したり、その内容を調べたりできます。

$ docker run -d my-container:latest
$ docker inspect my-container:latest

保存済みイメージのインポートとロードの利点

保存済み Docker イメージのインポートとロードには、いくつかの利点があります。

  1. 移植性: 保存済みイメージは、開発、テスト、本番環境間で一貫したデプロイを可能にするため、簡単に共有および転送できます。
  2. バックアップと復元: 保存済みイメージはバックアップとして使用でき、必要に応じて Docker 環境を既知の状態に復元できます。
  3. オフラインデプロイ: 保存済みイメージは、イメージにすべての必要なコンポーネントが含まれているため、インターネット接続が制限されているか、全くない環境でアプリケーションをデプロイするために使用できます。
  4. ビルド時間の短縮: 保存済みイメージをロードすることは、特に複雑または大規模なアプリケーションの場合、イメージを最初から再構築するよりも高速です。

保存済み Docker イメージのインポートとロードの方法を理解することで、Docker ワークフローを効率化し、コンテナ化されたアプリケーションの移植性と信頼性を確保できます。

まとめ

このチュートリアルでは、終了した Docker イメージを保存およびエクスポートする方法を学びました。これで、終了したイメージを識別し、リスト表示し、ファイルに保存し、保存したイメージをインポート/ロードできるようになりました。このプロセスにより、必要なときに終了したイメージに簡単にアクセスして再利用できるため、Docker イメージを効率的に管理できます。これらの技術を習得することで、Docker イメージの管理を効率化し、Docker ベースのアプリケーション全体の効率を向上させることができます。