このページで解説している内容は、以下の 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\dockerApache コンテナを作成・起動
今回も 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 httpdapache-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サーバやアプリケーションで生成されたファイルをダウンロードしたり、ホスト上で作った設定ファイルをコンテナにアップロードしたりできるようになります。
次のコンテンツでは、ボリュームとマウントについて学び、ファイルをより効率的に扱う方法を見ていきましょう。
