このページで解説している内容は、以下の 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 stopdocker rmdocker image rm でクリーンアップ

 ファイルコピーを自由に行えると、Webサーバやアプリケーションで生成されたファイルをダウンロードしたり、ホスト上で作った設定ファイルをコンテナにアップロードしたりできるようになります。
 次のコンテンツでは、ボリュームとマウントについて学び、ファイルをより効率的に扱う方法を見ていきましょう。