docker cpの使いどころ

Tips

はじめに

業務では 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. コンテナからファイルをホストへコピー
  2. ホスト上で普段使いのエディタで編集
  3. 編集したファイルをコンテナへ送り返す
# 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を使用される方は覚えておくとどこかで役立つ場面があるかと思います。

コメント

タイトルとURLをコピーしました