はじめに
この実験では、Docker コンテナのファイルシステムをエクスポートするためにdocker container exportコマンドを使用する方法を学びます。まず、シンプルなコンテナを作成して実行することから始めます。
コンテナ作成後、コンテナのファイルシステムをエクスポートするさまざまな方法を探求します。これには、ファイルシステムを直接標準出力(STDOUT)にエクスポートする方法、シェルのリダイレクトを使用してファイルにエクスポートする方法、そして最後にdocker container exportコマンドの--outputオプションを使用してファイルにエクスポートする方法が含まれます。
シンプルなコンテナの作成と実行
このステップでは、シンプルな Docker コンテナを作成して実行する方法を学びます。コンテナは、コードとその依存関係をパッケージ化した標準的なソフトウェアユニットであり、アプリケーションを異なるコンピューティング環境間で高速かつ確実に実行できるようにします。
コンテナの作成と実行にはdocker runコマンドを使用します。基本的な構文はdocker run [OPTIONS] IMAGE [COMMAND] [ARG...]です。
ubuntuイメージとechoコマンドを使用してシンプルなコンテナを実行してみましょう。ubuntuイメージは最小限の Ubuntu オペレーティングシステムイメージです。
docker run ubuntu echo "Hello from Docker!"
このコマンドを初めて実行すると、Docker はまずローカルにubuntuイメージが存在するか確認します。存在しない場合、デフォルトのレジストリである Docker Hub からイメージをプルします。その後、このイメージから新しいコンテナを作成し、コンテナ内でecho "Hello from Docker!"コマンドを実行します。コマンドが終了すると、コンテナは停止します。
ターミナルにHello from Docker!という出力が表示されるはずです。
次に、実行状態を維持するコンテナを実行してみましょう。-dオプションを使用してコンテナをデタッチモード(バックグラウンド)で実行し、tail -f /dev/nullコマンドを使用してリソースをほとんど消費せずにコンテナを実行し続けます。また、--nameオプションを使用してコンテナに名前を付け、後で簡単に参照できるようにします。
docker run -d --name my-ubuntu-container ubuntu tail -f /dev/null
このコマンドは、ubuntuイメージを(まだ存在しない場合)プルし、my-ubuntu-containerという名前のコンテナを作成し、tail -f /dev/nullコマンドをデタッチモードで実行します。コマンドはコンテナ ID を出力します。
コンテナが実行中かどうかを確認するには、実行中のコンテナを一覧表示するdocker psコマンドを使用します。
docker ps
実行中のコンテナのリストにmy-ubuntu-containerが表示されるはずです。
コンテナのファイルシステムを STDOUT にエクスポート
このステップでは、Docker コンテナのファイルシステムをエクスポートする方法を学びます。コンテナのファイルシステムをエクスポートすると、コンテナの内容を tar アーカイブとして作成できます。これはバックアップの作成、コンテナ状態の共有、またはコンテナ内容の検査に役立ちます。
ファイルシステムのエクスポートにはdocker exportコマンドを使用します。基本的な構文はdocker export [OPTIONS] CONTAINERです。
前のステップで作成したmy-ubuntu-containerのファイルシステムをエクスポートしてみましょう。デフォルトでは、docker exportは tar アーカイブを標準出力 (STDOUT) に出力します。
docker export my-ubuntu-container
このコマンドを実行すると、ターミナルにバイナリデータのストリームが表示されます。これはコンテナのファイルシステムの tar アーカイブです。バイナリデータのため、ターミナル上では人間が読める形式ではありません。
エクスポート内容をより理解するために、出力をtarなどの tar アーカイブを処理できるコマンドにパイプすることもできます。ただし、このステップでは STDOUT へのエクスポートに焦点を当てています。
docker exportコマンドは、コンテナ作成以降に行った変更も含め、コンテナのファイルシステム全体をエクスポートします。
リダイレクトを使用してコンテナのファイルシステムをファイルにエクスポート
前のステップでは、コンテナのファイルシステムを STDOUT にエクスポートしました。これは出力を他のコマンドにパイプするのに便利ですが、実際にはエクスポートしたファイルシステムをファイルに保存する方が実用的な場合が多いです。
これはシェルのリダイレクト機能を使用して実現できます。>演算子はコマンドの標準出力をファイルにリダイレクトします。
my-ubuntu-containerのファイルシステムを、現在のディレクトリ (~/project) にあるubuntu-filesystem.tarというファイルにエクスポートしてみましょう。
docker export my-ubuntu-container > ubuntu-filesystem.tar
このコマンドはdocker export my-ubuntu-containerを実行し、バイナリ出力(tar アーカイブ)をubuntu-filesystem.tarファイルにリダイレクトします。今回はターミナルにバイナリデータは表示されません。
コマンドが完了したら、ls -lhコマンドを使用してファイルが作成されたことを確認し、サイズを確認できます。
ls -lh ubuntu-filesystem.tar
ubuntu-filesystem.tarファイルとそのサイズが表示されるはずです。サイズはubuntuイメージの内容によって異なります。
また、fileコマンドを使用して作成されたファイルが tar アーカイブであることを確認することもできます。
file ubuntu-filesystem.tar
出力には、例えばubuntu-filesystem.tar: POSIX tar archiveのように、ファイルが tar アーカイブであることが示されるはずです。
--output オプションを使用してコンテナのファイルシステムをファイルにエクスポート
前のステップでは、シェルのリダイレクト (>) を使用してエクスポートしたコンテナのファイルシステムをファイルに保存しました。Docker にはdocker exportコマンドで直接出力ファイルを指定できる専用の--output(または-o)オプションも用意されています。これはシェルのリダイレクトを使用するよりも便利な場合があります。
my-ubuntu-containerのファイルシステムを再度エクスポートしてみましょう。今回は--outputオプションを使用し、現在のディレクトリ (~/project) にubuntu-filesystem-output.tarという名前のファイルとして保存します。
docker export --output ubuntu-filesystem-output.tar my-ubuntu-container
このコマンドはリダイレクトを使用する場合と同等ですが、Docker 固有のオプションを使用しています。tar アーカイブは指定されたファイルに直接保存されます。
コマンドが完了したら、ls -lhを使用して新しいファイルの作成とサイズを確認できます。
ls -lh ubuntu-filesystem-output.tar
ubuntu-filesystem-output.tarファイルが表示されるはずです。そのサイズは前のステップで作成したubuntu-filesystem.tarファイルとほぼ同じになるでしょう。
また、fileコマンドを使用してubuntu-filesystem-output.tarが tar アーカイブであることを確認することもできます。
file ubuntu-filesystem-output.tar
出力により、これが tar アーカイブであることが確認できるはずです。
--outputオプションを使用すると、エクスポートするファイルシステムの出力先ファイルを明確に指定できます。
まとめ
この実験では、シンプルな Docker コンテナを作成して実行する方法を学びました。docker runコマンドを使用してコンテナ内でコマンドを実行したり、特定の名前を付けてデタッチドモードでコンテナを実行したりしました。また、docker psコマンドを使用してコンテナが実行中であることを確認しました。
その後、docker exportコマンドを使用してコンテナのファイルシステムをエクスポートする方法を探りました。ファイルシステムを標準出力 (STDOUT) にエクスポートする方法と、出力をファイルにリダイレクトする方法を学びました。最後に、docker exportで--outputオプションを使用して直接出力ファイルを指定する方法を学びました。



