このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:Docker Composeでホストのファイルをコンテナにコピーする方法

Docker Composeでホストのファイルをコンテナにコピーする方法

 Docker Composeを使ってコンテナを管理していると、ホスト側で作成したHTMLや画像などのファイルを、コンテナ内にコピーして反映させたい場面があります。
 ここでは、docker compose cp コマンドを使って、ホスト上のファイルをコンテナ内にコピーする方法を、実際の操作例とともにわかりやすく解説していきます。

作業前のクリーンアップ

まずは環境をリセットして、不要なコンテナやイメージを削除しておきましょう。
これを行っておくことで、検証作業がスムーズになります。

💡実行コマンド

docker system prune -a

このコマンドは以下のオブジェクトをまとめて削除します。

削除対象説明
停止中のコンテナ動作していないコンテナを削除します。
未使用のネットワークどのコンテナにも紐づいていないネットワークを削除します。
参照されていないイメージ現在のコンテナで使用されていないDockerイメージを削除します。
ビルドキャッシュ不要なキャッシュデータを削除します。

実行中に次のメッセージが出たら、「y」 と入力して進めましょう。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y

作業ディレクトリの移動

 今回は、前回の記事「Docker Composeでコンテナ内のファイルをホストにコピーする方法」で作業した desktop/docker/apache ディレクトリを使います。

cd desktop/docker/apache

実行結果

PS C:\Users\joeac> cd desktop/docker/apache
PS C:\Users\joeac\Desktop\docker\apache>

Webコンテンツの準備

 ここでは、ホスト上でWebページ用のHTMLと画像ファイルを準備して、それをコンテナへコピーします。

🐋 画像ファイルの用意

まず、クジラのアイコン画像をダウンロードして「whale.png」という名前に変更します。
この画像を apache ディレクトリに保存しておきましょう。

以下のリンクからダウンロードします。

📝 index.html の作成

次に、VS CodeなどでHTMLファイルを作成します。

code index.html

エディタが開いたら、以下の内容を入力して保存します。

<HTML>
<BODY>
<H1>Development environment</H1>
<BR>
<IMG src="whale.png">
</BODY>
</HTML>

「index.html」を表示する

保存後に、ブラウザで「index.html」をダブルクリックして開き、正しく表示されるか確認します。
画面に「Development environment」とクジラの画像が表示されればOKです。

ファイル構成の確認

作成したファイルが正しく配置されているか確認します。

ls

実行結果

PS C:\Users\joeac\Desktop\docker\apache> ls

    Directory: C:\Users\joeac\Desktop\docker\apache

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2025/10/05     3:54             87 compose.yaml
-a---          2025/10/06    22:29             89 index.html
-a---          2025/09/27    22:16           7792 whale.png

コマンドでコンテナを作成・実行する

compose.yaml を使ってApacheコンテナを動かしてみましょう。
実行するコマンドは次の通りです👇

docker compose up -d

このコマンドは、compose.yaml があるディレクトリで実行します。

コマンドの意味とオプション解説

コマンド説明
docker compose upcompose.yamlの内容をもとにコンテナを作成・起動する。
-d「detached(デタッチド)」モードで実行。バックグラウンドで動作し、ターミナルをブロックしない。

実行結果

PS C:\Users\joeac\Desktop\docker\apache> docker compose up -d
(省略)
[+] Running 7/7
 ✔ apache Pulled                                                              7.9s
   ✔ fbb3c2cad9f8 Pull complete                                               0.5s
   ✔ af3b83c443ec Pull complete                                               0.7s
   ✔ 4f4fb700ef54 Pull complete                                               0.3s
   ✔ 6c19a85825c3 Pull complete                                               3.6s
   ✔ 8c7716127147 Pull complete                                               3.4s
   ✔ 12844f4198f6 Pull complete                                               3.9s
[+] Running 2/2
 ✔ Network apache_default     Created                                         0.1s
 ✔ Container apache-apache-1  Started                                         0.8s
PS C:\Users\joeac\Desktop\docker\apache>

このように表示されれば成功です!

コンテナへのファイルコピー

それでは、ホスト上のファイルをコンテナへコピーしてみましょう。
ここでは、docker compose cp コマンドを使用します。

📘コマンド書式

docker compose cp <ホストのファイルパス> <サービス名>:<コンテナ内のパス>

例えば、以下のように実行します:

docker compose cp ./index.html apache:/usr/local/apache2/htdocs
docker compose cp ./whale.png apache:/usr/local/apache2/htdocs

実行結果の例:

PS C:\Users\joeac\Desktop\docker\apache> docker compose cp ./index.html apache:/usr/local/apache2/htdocs
(省略)
[+] Copying 1/0
 ✔ apache-apache-1 copy ./index.html to apache-apache-1:/usr/local/apache2/htdocs Copied

PS C:\Users\joeac\Desktop\docker\apache> docker compose cp ./whale.png apache:/usr/local/apache2/htdocs
(省略)
[+] Copying 1/0
 ✔ apache-apache-1 copy ./whale.png to apache-apache-1:/usr/local/apache2/htdocs Copied

💡コマンド解説表

要素説明
docker compose cpホストとコンテナ間でファイルをコピーするコマンド。
./index.htmlホスト側でコピーするファイルのパス。ここではカレントディレクトリの index.html。
apachecompose.yamlで定義されたサービス名(コンテナ名ではない点に注意)。
/usr/local/apache2/htdocsコンテナ内のコピー先ディレクトリ。Apacheのドキュメントルート。

Webブラウザで確認

コピーが完了したら、ブラウザで確認してみましょう。
URLバーに以下を入力します。

localhost

これで、コンテナ内のApacheが提供するWebページが表示され、
先ほど作成した index.htmlwhale.png が表示されていれば成功です。

注意点:コンテナ削除時のデータ

ここで重要なのが、コンテナ削除時のデータ消失です。

Dockerコンテナは基本的に「使い捨て」が前提なので、削除すると中のファイルもすべて消えます。

状況結果
コンテナを停止ファイルは残る。
コンテナを削除ファイルは消える(再作成時は空状態)

そのため、もしファイルを永続的に保持したい場合は、

  • コンテナ削除前に docker compose cp でホストにバックアップ
  • または Docker Volume を使って永続化

といった対策を行いましょう。

まとめ

Docker Composeを使えば、ホスト上で編集したファイルをコンテナへ簡単に反映できます。

ポイントをおさらいすると

  • docker compose cp コマンドでファイルをコンテナにコピーできる。
  • サービス名を指定してコピー先を明確にできる。
  • コンテナ削除時はファイルが消えるので、必要なら永続化対策を行う。

この方法を覚えておくと、Web開発やテスト環境の反映作業が格段に効率化します。
ぜひ試してみてください! 🚀