このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker基礎】コンテナからホストにファイルをコピーする

コンテナからホストにファイルをコピーする
前回は、ホストからコンテナへファイルをコピーする方法を学びました。今回はその逆である、コンテナからホスト側にファイルをコピーするやり方を学んでみましょう。たとえば、コンテナ内に作成された設定ファイルや、Webサーバ(Apache)の初期ページなどを取り出したいときに便利です。

1.事前準備
作業ディレクトリへ移動
- Windows の場合:
PS C:\Users\joeac> cd C:\Users\joeac\Desktop\docker
- Mac / Linux の場合、該当ディレクトリへ
cd
コマンドで移動
PS C:\Users\joeac> cd C:\Users\joeac\Desktop\docker
Apache コンテナを作成・起動
今回も Apache (httpd
) イメージを使います。
- コンテナ名:
apache-container
- ポート:
8080:80
入力するコマンド
docker run --name apache-container -d -p 8080:80 httpd
実行コマンドの例
PS C:\Users\joeac\Desktop\docker> docker run --name apache-container -d -p 8080:80 httpd
--name apache-container
→ コンテナ名をapache-container
に指定-d
→ バックグラウンド実行-p 8080:80
→ ホストの 8080 ポートをコンテナの 80 番ポートへ紐づけ
ブラウザで初期画面を確認
http://localhost:8080/
にアクセスし、「It works!」などの初期ページが表示されれば成功

2.コンテナ内のファイルをコピーするコマンド

Docker では、docker cp
コマンドを使って、コンテナ ⇔ ホスト 間のファイルコピーを行います。
docker cp <コピー元> <コピー先>
コピー元
:コンテナ名:コンテナパス
またはホストパス
コピー先
:ホストパス
またはコンテナ名:コンテナパス
Apache の初期ページをホストへコピー
今回の例では、コンテナ内 /usr/local/apache2/htdocs/index.html
を作業ディレクトリ(カレントディレクトリ)にコピーしてみます。
入力するコマンド
docker cp apache-container:/usr/local/apache2/htdocs/index.html .
実行コマンドの例
PS C:\Users\joeac\Desktop\docker> docker run --name apache-container -d -p 8080:80 httpd
apache-container
: コンテナ名:/usr/local/apache2/htdocs/index.html
: コンテナ内のファイルパス.
: 「現在のディレクトリ」という意味(ここにコピー先ファイルが作られる)
3.コピー結果の確認
作業ディレクトリに index.html
ができているか
dir
コマンドを入力します。
PS C:\Users\joeac\Desktop\docker> dir
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2007/06/12 3:53 45 index.html
例: 出力に index.html
が含まれていれば成功
テキストエディタで内容を確認
PS C:\Users\joeac\Desktop\docker> dir
例: It works!
など、Apache の初期ページが書かれている
表示される内容
<html><body><h1>It works!</h1></body></html>
4.後始末
index.htmlファイルの削除 (ホスト側)
rm index.html
コンテナを停止・削除
docker stop apache-container docker rm apache-container
イメージを削除
docker image rm httpd
これで作業環境をクリーンな状態に戻せます。
まとめ
docker cp
コマンドは、ホスト ⇔ コンテナのどちらの方向でもファイルをコピー可能
・docker cp <コンテナ名>:<コンテナ内パス> <ホスト側パス>
→ コンテナから取り出す。
・docker cp <ホスト側パス> <コンテナ名>:<コンテナ内パス>
→ ホストからコンテナへ送る。- 「.」(ドット) は「現在のディレクトリ」を意味する。コマンドの末尾につけるのを忘れない。
- 使い終わったファイルやコンテナ、イメージは
docker stop
→docker rm
→docker image rm
でクリーンアップ
ファイルコピーを自由に行えると、Webサーバやアプリケーションで生成されたファイルをダウンロードしたり、ホスト上で作った設定ファイルをコンテナにアップロードしたりできるようになります。
次のコンテンツでは、ボリュームとマウントについて学び、ファイルをより効率的に扱う方法を見ていきましょう。