docker cpコマンドの基本から応用した使い方まで実例付きで解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年8月)

✔当記事は以下の疑問を持つ方へ向けて書かれています

「docker cpコマンドの機能は何だろう?」

「docker cpコマンドの正しい記述形式を学びたい」

「docker cpコマンドの具体的な使用例を見たい」

✔当記事を通して伝えること

  • docker cpコマンドの基本的な理解
  • docker cpコマンドの記述法とその実用性
  • docker cpコマンドを用いた実際の例

当記事では、docker cpコマンドの基礎から、オプションの活用に至るまで、具体的な例を示しながら詳しく解説していきます。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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/directoryfile.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 cpdocker 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など、高度な機能について学ぶことをおすすめします。

Dockerとは?チュートリアル付きで基礎から使い方まで徹底解説
チュートリアルを通じて、Dockerをマスターしたいですか?当サイトでは、Dockerを触ったことないという方に向けた初期セットアップの方法から、具体的にコンテナ・イメージを作ってみたいという中級者までを対象に多数の記事を用意しています。ぜひご覧ください。
タイトルとURLをコピーしました