はじめに
業務では Docker を使う場面が多いため、備忘録として Docker コマンドのメモを残していこうと思います。
今回は docker cp の使い方についてまとめます。
簡単な使い方
docker cp はホストとコンテナ間でファイルやディレクトリをコピーするコマンドです。
コンテナ → ホスト
docker cp <コンテナ名 or ID>:<コンテナ内パス> <ホストのパス>
例:
docker cp my-container:/app/output.txt ./output.txt
ホスト → コンテナ
docker cp <ホストのパス> <コンテナ名 or ID>:<コンテナ内パス>
例:
docker cp ./config.json my-container:/app/config.json
ディレクトリごとコピーするときも同じ構文で問題ありません。
# ディレクトリをまるごとコンテナへコピー
docker cp ./src/ my-container:/app/src/
よく使うシチュエーション
コンテナ内の成果物を抜き取りたいとき
ビルドコンテナなど、ボリュームをマウントせずに起動したコンテナの中に成果物が出力されることがあります。そのような場合でも docker cp を使えばコンテナを停止させずにファイルを取り出せます。
# 成果物をホストへ取り出す
docker cp build-container:/app/dist ./dist
コンテナ内でデバッグするとき
docker exec でコンテナ内に入ってデバッグする際、コンテナ内のファイルを編集していろいろと試したいことがあります。しかし、コンテナ内にはエディタが入っていないことが多いため、直接編集するのは難しいです。そんなときは一度ファイルをホストにコピーして編集し、再度コンテナに送り返すという流れが便利です。
- コンテナからファイルをホストへコピー
- ホスト上で普段使いのエディタで編集
- 編集したファイルをコンテナへ送り返す
# 1. ファイルをホストへ取り出す
docker cp my-container:/app/config.yaml ./config.yaml
# 2. ホスト上で編集(省略)
# 3. 編集済みファイルをコンテナへ送り返す
docker cp ./config.yaml my-container:/app/config.yaml
停止中のコンテナからログを回収したいとき
docker cp はコンテナが停止していても使えるため、コンテナが落ちてしまった後にログファイルや設定ファイルを回収したいときにも便利です。
docker cp stopped-container:/var/log/app.log ./app.log
まとめ
docker cp はシンプルながらも意外と開発中のトラブルシューティングなどに使えます。 Dockerを使用される方は覚えておくとどこかで役立つ場面があるかと思います。


コメント