【Docker基礎】コンテナとファイル間のファイルのコピー

 多くのシステムは、プログラムだけで構成されているわけではありません。5章で説明したとおり、プログラムの他に、プログラム言語の実行環境や、Webサーバ、データベースなどで構成されています。これらはシステムを動かすために必要なものですが、さらに、画面を作るための素材や、入力されるデータ本体なども存在します。WordPressの例で言えば、Webページを構成するHTMLファイルやCSSファイル、個々の記事のテキストや画像などが該当します。

 こうしたファイルは、WordPress上での操作によってサーバに保存されていますが、時にはサーバとを介さずにサーバと自分のパソコンでファイルのやりとりをしたいことがあります。そのために、コピー操作を覚えておきましょう。

 コピーは、コンテナからホスト(主台となるパソコン)、ホストからコンテナのどちらも可能です。ホスト側は、どこに置いたファイルでも構いませんし、コンテナ側も、コンテナ内のどの場所に置くかを指定できます。

ファイルをコピーするコマンド

 ファイルをコピーするためのDockerコマンドは docker cp です。WindowsやMacでは、ドラッグ&ドロップでファイルをコピーできますが、Dockerではコマンドを使用します。以下に、docker cp コマンドの基本的な使い方と具体例を示します。

docker cp コマンドの基本構文

docker cp [コピー元] [コピー先]

  • コピー元: コピーするファイルやディレクトリのパス。ホスト側またはコンテナ側のパスを指定します。
  • コピー先: ファイルやディレクトリをコピーする先のパス。ホスト側またはコンテナ側のパスを指定します。

ホストからコンテナへファイルをコピーする(ホスト→コンテナ)

 ホストマシン上のファイルやディレクトリをコンテナ内にコピーする場合、以下のようにコマンドを実行します。

docker cp ホスト側パス コンテナ名:コンテナ側パス

例: ホストの「C:\Users\ユーザー名\Documents\example.txt」をコンテナ「wordpress-container」の「/var/www/html/」ディレクトリにコピーする

docker cp wordpress-container:/var/www/html/wp-content/uploads/ C:\Users\ユーザー名\Documents\uploads

コマンドの説明

  • docker cp: Dockerのコピーコマンド。
  • C:\Users\ユーザー名\Documents\example.txt: コピー元のホスト側のファイルパス。
  • wordpress-container:/var/www/html/: コピー先のコンテナ名とコンテナ内のディレクトリパス。

コンテナからホストへファイルをコピーする(コンテナ→ホスト)

 コンテナ内のファイルやディレクトリをホストマシンにコピーする場合、以下のようにコマンドを実行します。

docker cp コンテナ名:コンテナ側パス ホスト側パス

例: コンテナ「wordpress-container」の「/var/www/html/wp-content/uploads/」ディレクトリをホストの「C:\Users\ユーザー名\Documents\uploads」にコピーする。

docker cp wordpress-container:/var/www/html/wp-content/uploads/ C:\Users\ユーザー名\Documents\uploads

コマンドの説明

  • docker cp: Dockerのコピーコマンド。
  • wordpress-container:/var/www/html/wp-content/uploads/: コピー元のコンテナ名とコンテナ内のディレクトリパス。
  • C:\Users\ユーザー名\Documents\uploads: コピー先のホスト側のディレクトリパス。

docker cp コマンドの詳細

以下の表に、docker cp コマンドの主要なオプションとその説明をまとめます。

項目説明
コピー元コピーするファイルやディレクトリのパス。ホスト側またはコンテナ側を指定。
コピー先ファイルやディレクトリをコピーする先のパス。ホスト側またはコンテナ側を指定。
コンテナ名ファイルをコピーする対象となるコンテナの名前。
パス指定ホスト側のパスはOSに応じた形式(Windows: C:\path\to\file、Mac/Linux: /path/to/file)、コンテナ側はUnix形式のパス。

ホスト側パスの記述例

 ホスト側(土台となるパソコン側)は、どこにファイルを置いても構いません。ファイルを置いた場所は、「パス」で記述します。パスは、ファイルやフォルダ(ディレクトリ)のパソコン内での住所を表したものです。

以下に、主要なOSにおけるパスの記述例を示します。

OS種類パス例
Windows の「ドキュメント」C:\Users\ユーザー名\Documents\ファイル名
Mac の「書類」/Users/ユーザー名/Documents/ファイル名
Linux のホームディレクトリ/home/ユーザー名/ファイル名

例:ホストからコンテナへファイルをコピーする場合

 例えば、Windows環境で「C:\Users\joe\Documents\site-config.php」というファイルをコンテナ「wordpress-container」の「/var/www/html/wp-config.php」にコピーする場合、以下のコマンドを実行します。

docker cp C:\Users\joe\Documents\site-config.php wordpress-container:/var/www/html/wp-config.php

例:コンテナからホストへファイルをコピーする場合

 例えば、コンテナ「wordpress-container」の「/var/www/html/wp-content/uploads/2025/01/image.png」というファイルをホストの「C:\Users\joe\Documents\uploads\image.png」にコピーする場合、以下のコマンドを実行します。

docker cp wordpress-container:/var/www/html/wp-content/uploads/2025/01/image.png C:\Users\joe\Documents\uploads\image.png

コピー操作の注意点

  • パスの正確性: コピー元とコピー先のパスを正確に指定することが重要です。特にコンテナ側のパスはUnix形式で記述します。
  • ファイルの権限: コンテナ内にファイルをコピーする際、ファイルの権限(パーミッション)に注意してください。必要に応じて、コピー後に権限を変更することがあります。
  • ディレクトリのコピー: ディレクトリ全体をコピーする場合、末尾にスラッシュを付けることでディレクトリの内容のみをコピーできます。

まとめ

 ここでは、コンテナとホスト間でのファイルコピーについて詳しく解説しました。以下のポイントを押さえておきましょう。

  • docker cp コマンドの理解: ファイルやディレクトリをコンテナとホスト間でコピーするための基本コマンドです。
  • コピー元とコピー先の指定方法: ホストからコンテナ、コンテナからホストへのコピー方法を理解する。
  • パスの記述方法: 各OSにおけるパスの形式を理解し、正確に指定する。
  • 注意点: コピー時のパスの正確性やファイルの権限に注意し、適切に操作を行う。

 これらの知識を基に、実際の運用環境でもコンテナとホスト間で効率的にファイルをやりとりすることが可能になります。次のコンテンツでは、ホストからコンテナへファイルをコピーする具体的な方法についてさらに詳しく解説していきます。