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

【Docker基礎】ホストからコンテナへファイルをコピーする

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

 ここでは、ホスト(あなたのPC)からコンテナ側にファイルをコピーする手順を実践してみましょう。たとえば Apache のコンテナを作成し、そこへ index.html ファイルを配置してブラウザで表示させる、という流れを体験します。これができれば、WordPress や他のアプリケーションでも、テーマファイルや画像などを自由にコピー・差し替えができるようになります。

1.index.html ファイルを作成する

はじめに、ホスト側で「index.html」を用意します。

  • 作業ディレクトリ(例: C:\Users\ユーザー名\Desktop\docker)などに移動し、VSCode などで index.html を作成
  • ファイルの中身は何でも構いませんが、ここでは以下の簡易的な HTML を例に使います。必ず文字コードを UTF-8 にして保存しましょう。

作業ディレクトリに移動します。
作業ディレクトリへに簡単に移動する方法については、以下を参考にしてください。

【Docker入門】Dockerの作業ディレクトリを作成する
URL:https://www.infra-linux.com/menu-docker2/create-workdir/

 作業ディレクトリに移動して、VSCodeなどのテキストエディタで「index.html」ファイルを作成しておきます。

PowerShellに入力する内容

PS C:\Users\joeac> cd C:\Users\joeac\Desktop\docker
PS C:\Users\joeac\Desktop\docker> code index.html

VSCodeで入力する内容

<html>
<meta charset="utf-8"/>
<body>
<div>演習で学ぶDocker基礎</div>
</body>
</html>

2.Apache コンテナを作成・起動する

 題材として、Apache のコンテナを動かします。以下の情報でコンテナを作成し、ブラウザからアクセスできるようにします。

項目
コンテナ名apache-container
イメージ名httpd
ポート設定8080:80

実行コマンド

docker run --name apache-container -d -p 8080:80 httpd
  • --name apache-container: コンテナ名を「apache-container」にする
  • -d: バックグラウンド実行
  • -p 8080:80: ホストのポート 8080 をコンテナの 80 番ポートに紐づける
  • httpd: Apache (httpd) イメージを使う

3.初期画面を確認する

 ブラウザで http://localhost:8080/ にアクセスすると、Apache の初期画面が表示されます。この段階ではまだ何もファイルを配置していないため、デフォルトの Apache Welcome ページが表示されているはずです。

図:Apacheの初期画面

4.「docker cp」コマンドを使ってファイルをコピーする

index.html をホストからコンテナへコピーし、Apache がそれを表示するようにしてみましょう。

コマンド構文

docker cp <コピー元パス> <コンテナ名>:<コピー先パス>

  • コピー元パス: ホスト上の index.html の場所
  • コンテナ名: 今回は apache-container
  • コピー先パス: /usr/local/apache2/htdocs/ (Apache のドキュメントルート)

実行コマンド

docker cp index.html apache-container:/usr/local/apache2/htdocs/

 これで、ホストの index.html がコンテナ内の /usr/local/apache2/htdocs/index.html としてコピーされます。

5.コピー結果を確認する

 再びブラウザで http://localhost:8080/ を開き(またはリロード)、Apache の初期画面が index.html の内容に置き換わっていれば成功です。HTML の <div> タグに記載した「演習で学ぶDocker」という文字列が表示されます。

図:作成したホームページの画面

6.後始末

この演習で作成したファイルやコンテナを削除しておきましょう。

index.html を削除(ホスト側)

rm index.html

コンテナを停止・削除

docker stop apache-container
docker rm apache-container

イメージを削除

docker image rm httpd

まとめ

  • ファイルコピーコマンド: docker cp ホスト側パス コンテナ名:コンテナ側パス
  • ホストからコンテナへコピーすると、コンテナ内でそのファイルをすぐに使える。
  • Apache のような Web サーバでは index.html を置くと初期画面が上書きされる。
  • コピー後はブラウザをリロードして確認

 このように、ホスト ⇄ コンテナ間でファイルをやり取りできると、Web サーバのデプロイや簡易的な更新作業などがスムーズになります。次のコンテンツでは、コンテナからホストへファイルを取り出す方法を解説していきます。