Copy and Mount Methods

docker での copy と mount

コピー

ホストとコンテナ間でファイルをコピーするときは次のようにする

$ docker cp <option> <コピー元path> <コピー先path>

コンテナのパスは<container name>:<path>のように書く

マウント

※マウントはコンテナをrunするときにオプションとして指定する

バインドマウント

既存(ホスト側)のファイルやフォルダをマウントする方法のこと。

普通のファイル同様に編集やバックアップが可能となるため、頻繁にアクセスするファイルなどはこちらに置く。

$ docker run (省略) -v <マウント元のパス>:<マウントポイント> (省略)

ボリュームマウント

ボリュームを作成し、マウントする方法のこと。

Dockerホストから変更を加えたくないようなファイルなどはこちらに置く。

  • ボリュームの作成

    $ docker volume create <volume name>
    
  • ボリュームの削除

    $ docker volume rm <volume name>
    
  • マウント方法

    $ docker run (省略) -v <ボリューム名>:<マウントポイント> (省略)
    

    ※ただしボリュームが存在しないときには新規作成される。

  • docker volume コマンドにおけるサブコマンド

    サブコマンド 意味
    create ボリュームの作成
    inspect ボリュームの詳細情報を確認
    ls ボリューム一覧を確認
    prune コンテナからマウントされていないボリュームをすべて削除
    rm ボリュームの削除

ボリュームマウントとバインドマウントを明示的に指定した設定方法

$ --mount type=<bind or volume>,src=<マウント元>,dst=<マウント先>

※この方法ではバインドマウントとボリュームマウントが明示的に指定されているためわかりやすく、 ボリュームが存在しない場合には新規作成されずエラーが出力される。そのため-vオプションより --mountオプションを使用することが推奨されている。

  • src は source でもOK
  • dst は destination でもOK
  • type=tmpfs としてメモリーを特定のマウント先に指定することもできる。

appendix

ボリュームのバックアップ方法

$ docker run --rm -v <volume name>:/src -v <バックアップ先のフォルダ名>:/dest busybox tar czf /dest/backup.tar.gz -C /src .
  1. 軽量なLinux イメージの busybox を起動
  2. バックアップ対象をコンテナの /src にボリュームマウント
  3. Docker ホストの任意のディレクトリを /dest にバインドマウント
  4. /src 以下の全ファイルが /dest/backup.tar.gz にバックアップされる
  5. コンテナが破棄される

※ただしこの方法ではバックアップしたいボリュームのボリューム名がわかっていなければならない。 バックアップ対象をボリューム名ではなくコンテナのディレクトリ名で指定したい場合は--volume-fromオプションを使用する!

$ docker run --rm --volume-from <container name> -v <バックアップ先>:/dest busybox tar czf /dest/bachup.tar.gz -C /var/lib/mysql .

バックアップのリストア

バックアップを取っておいたデータを任意のvolumeに復元する方法

$ docker run --rm -v <volume名>:/dest -v <バックアップデータの置かれているディレクトリ>:/src busybox tar xzf /src/backup.ta.gz -C /dest

データボリュームコンテナ