(最終更新月:2023年8月)
✔当記事は以下の疑問を持つ方へ向けて書かれています
「docker cpコマンドの機能は何だろう?」
「docker cpコマンドの正しい記述形式を学びたい」
「docker cpコマンドの具体的な使用例を見たい」
✔当記事を通して伝えること
- docker cpコマンドの基本的な理解
- docker cpコマンドの記述法とその実用性
- docker cpコマンドを用いた実際の例
当記事では、docker cpコマンドの基礎から、オプションの活用に至るまで、具体的な例を示しながら詳しく解説していきます。
ぜひ最後までご覧ください。
Dockerの基本:コンテナとホストとは何か?
ここでは、Dockerの基本概念として「コンテナ」と「ホスト」について解説します。
- Dockerとは
- コンテナとホストとは?
Dockerとは
Dockerはオープンソースのソフトウェアで、開発者がアプリケーションをパッケージ化し、以下のような情報を全て「コンテナ」内に格納できるツールです。
- コード
- ランタイム
- システムツール
- ライブラリ
アプリケーションは個々のシステム環境から切り離され、どの環境でも同じように動作することが保証されます。
コンテナとホストの概念解説
「コンテナ」は、ソフトウェアとその依存関係をひとつにまとめた実行可能な単位。
各コンテナはほかのコンテナから隔離され、一意のIDが割り振られています。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08958be3c507 5a81c4b8502e "/bin/bash" 11 hours ago Exited (137) 9 hours ago myubuntu
5aec83f74ac0 nginx "/docker-entrypoint.…" 4 days ago Exited (0) 25 minutes ago nginx-proxy-20230819
それぞれがホストOS上で独立して実行されるため、ひとつのホスト上で複数の異なるコンテナを動かせます。
ホストとは、Dockerコンテナが実行される物理的または仮想的なマシンのこと。
コンテナはホストのリソースを利用しながら、以下を有します。
- 独自のプロセス空間
- ネットワークインターフェース
- ストレージ
「docker cp」コマンドとは
docker cpコマンドの基本についてご覧いただきます。
- 「docker cp」の定義
- 「docker cp」コマンドの基本形式
- 「docker cp」のオプション一覧
「docker cp」の定義
docker cpは、コンテナとホスト間でのファイルやディレクトリのコピーを可能にするコマンドです。
このコマンドを使用することで、ホストからコンテナへ、またはその逆方向へ、必要なデータを簡単に転送できます。
たとえば次のコマンドは、ホストマシンからコンテナへのファイルをコピーするものです。
docker cp /host/directory/myfile.txt mycontainer:/container/directory/
コピー先の指定は以下の形でおこないましょう。
コンテナ名: コンテナ内のパス
「docker cp」コマンドの基本形式
docker cp
コマンドの基本的な形式は次のとおりです。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
SRC_PATH
:コピー元のパス(ファイルまたはディレクトリ)DEST_PATH
:コピー先のパス
コロン(:
)を使って、コンテナ名とコンテナ内のパスを指定します。
「docker cp」のオプション一覧
以下に、このコマンドのオプションをまとめました。
オプション名 | 説明 | 例 |
---|---|---|
-a , --archive | メタデータを保持してファイル/ディレクトリをアーカイブ | docker cp -a my_container:/path/to/file /local/path |
--follow-link | シンボリックリンクの内容をコピーする | docker cp --follow-link my_container:/path/to/link /local/path |
docker cp
コマンドのオプションは比較的少ないですが、非常に便利な機能を提供します。
コンテナ内外でファイルを簡単に移動できるため、データのバックアップ、リストア、デバッグなどに役立つものです。
「docker cp」の具体的な使い方
こちらでは、docker cp
コマンドを使用したデータの転送方法について詳しく説明します。
- コンテナからホストへのデータ転送
- ホストからコンテナへのデータ転送
- コンテナ内のディレクトリのコピー方法
- ファイルやディレクトリのパーミッションおよびその引継ぎ
- シンボリックリンクの扱いと「-L」オプションの説明
- tarファイルの展開と格納方法
- 同名のファイルが存在する場合の動作
- 停止中のコンテナへのデータコピー
コンテナからホストへのデータ転送
docker cp
を使用して、コンテナからホストにファイルをコピーできます。
以下がその例です。
docker cp mycontainer:/container/directory/myfile.txt /host/directory/
「mycontainer
」コンテナの/container/directory/
myfile.txt
を、ホストの/host/directory/
にコピーします。
ホストからコンテナへのデータ転送
逆に、ホストからコンテナにファイルをコピーすることも可能です。
以下にその方法を示します。
docker cp /host/directory/myfile.txt mycontainer:/container/directory/
ホストの/host/directory/
にあるmyfile.txt
というファイルを、mycontainer
の/container/directory/
にコピーします。
コンテナ内のディレクトリのコピー方法
docker cp
コマンドは、コンテナ内のディレクトリ全体をコピーできます。
以下のコマンドでは、コンテナ内の/container/directory/
をホストの/host/directory/
にコピーします。
docker cp mycontainer:/container/directory/ /host/directory/
ファイルやディレクトリのパーミッションおよびその引継ぎ
docker cp
コマンドの-a
オプションを使用すると、コピー元のファイルやディレクトリの所有者、グループ、パーミッションなどの情報を引き継げます。
docker cp -a mycontainer:/container/directory/ /host/directory/
シンボリックリンクの扱いと「-L」オプションの説明
docker cp
コマンドの-L
オプションを使用すると、シンボリックリンクの実体にアクセスできます。
docker cp -L mycontainer:/container/directory/link_to_file /host/directory/
このコマンドは、link_to_file
の実体をホストにコピーします。
tarファイルの展開と格納方法
docker cp
コマンドで、コンテナ内部のファイルをホストにコピーする際に、tarアーカイブを作成します。
またホストからコンテナへファイルを転送する際にも、tarアーカイブを利用。
これにより、複数のファイルやディレクトリを一度に転送することが可能です。
# コンテナ内のファイルをtarアーカイブとしてホストにコピー
docker cp mycontainer:/container/directory file.tar
# tarアーカイブをコンテナに転送
docker cp file.tar mycontainer:/container/directory
以下の手順でおこなっています。
mycontainer
の/container/directory
をfile.tar
という名前のtarアーカイブにパッケージ化し、ホストにコピーfile.tar
というtarアーカイブをmycontainer
の/container/directory
コンテナ内でアーカイブを展開するには、コンテナ内部でtar
コマンドを使用しましょう。
同名のファイルが存在する場合の動作
docker cp
コマンドを使用して転送する際に、目的地に同名のファイルが存在すると、そのファイルは上書きされます。
この動作は、多くのファイル転送ツールと同様です。
停止中のコンテナへのデータコピー
docker cp
コマンドは、稼働中だけでなく、停止中のコンテナからや、停止中のコンテナへも、ファイルを転送できます。
この機能は、アプリケーションのデバッグやデータの取得に非常に便利です。
# 停止中のコンテナからホストへのファイル転送
docker cp stoppedcontainer:/container/directory/myfile.txt /host/directory/
# ホストから停止中のコンテナへのファイル転送
docker cp /host/directory/myfile.txt stoppedcontainer:/container/directory/
「docker cp」の便利性とメリット
ここでは、「docker cp」の便利性とそのメリットについて説明します。
- ファイルやディレクトリの操作の容易さ
- データ整理と管理のメリット
ファイルやディレクトリの操作の容易さ
docker cp
コマンドは、非常に簡単に使用でき、ファイルやディレクトリの操作を容易にします。
ホストとコンテナ間、またはコンテナとコンテナ間でファイルを転送するための、最も直感的でシンプルな方法を提供しているからです。
とくに、初心者やDockerを初めて利用するユーザーにとっては、覚えやすく、使いやすいコマンドといえるでしょう。
データ整理と管理のメリット
docker cp
コマンドを使用すると、ホストとコンテナ間でデータを簡単に移動できます。
データの整理と管理が容易になるのが、そのメリット。
とくに、大量のファイルやディレクトリをコンテナ間で移動する必要がある場合、時間を節約する効果的なツールとなります。
「docker cp」コマンドとほかのDockerコマンドの比較
docker cp
とdocker mount
の違いを見ていきましょう。
これらはどちらもDockerコンテナとホスト間でのファイル転送をおこなうコマンドですが、それぞれ異なる特性と利点を持っています。
どちらのコマンドを使用するべきかは、特定のユースケースとそれぞれの要件によるでしょう。
- docker cp
- docker mount
docker cp
コンテナとホスト間での一方向のファイル転送を実行。
簡易的で使いやすい一方、コピーしたファイルの変更は転送元には反映されません。
ホストからコンテナへファイルをコピーした後、そのファイルをコンテナ内で編集しても、ホストの元のファイルには影響が出ないのが特徴です。
docker cp mycontainer:/path/to/file /path/to/local/file
docker mount
ホストとコンテナ間でのデータの共有が可能。
ファイルシステムをコンテナにマウントし、その結果、コンテナ内で行われる変更はホストにも反映され、逆も可能です。
これは、コンテナとホスト間でのデータの永続性を必要とする場合や、リアルタイムでのデータ共有を必要とする場合に非常に有用です。
docker run -v /path/to/local/directory:/path/in/container myimage
まとめ
当記事では、docker cpコマンドについて学習してきました。
- 「docker cp」は、Dockerコンテナとホスト間でのファイルのコピーと転送を簡単に行うための便利なツール
- Dockerは開発環境の構築、テスト、デプロイなど、開発プロセス全体を効率化するための強力なツール
- 「docker cp」はその一部であり、基本的なDockerコマンドを理解していくことで、より深くDockerを理解できる
当記事を通じて、docker cpの基本的な使用方法、さまざまな使用シナリオ、および他のDockerコマンドとの比較を理解できたはず。
これからはたくさん使ってみて、その便利さを実感してください。
また次のステップとして、Dockerのネットワーキングやデータボリューム、Docker Composeなど、高度な機能について学ぶことをおすすめします。