【Docker基礎】記憶領域をマウントするコマンド

 コンテナのデータを消さずに保持したり、ホスト上のファイルをコンテナ内で利用したりしたい場合、マウントを使います。
 前回、ボリュームマウントとバインドマウントの違いを学びましたが、ここでは実際にマウントを指定する方法や、ボリュームを管理するコマンドなどを解説します。

記憶領域をマウントする基本

「-v」オプション

 マウントを行うときは、docker run(または docker container run)コマンドのオプションとして -v を使います。

【書式】
docker run ... -v <マウント元>:<マウント先> ...

  • マウント元: ホスト側のディレクトリ、または Docker ボリューム名
  • マウント先: コンテナ内で使用したいパス

バインドマウント vs. ボリュームマウント

  • バインドマウント-v <ホスト上のパス>:<コンテナ側のパス>
  • ボリュームマウント-v <ボリューム名>:<コンテナ側のパス>

どちらも -v オプションで指定しますが、マウント元の書き方が異なるだけです。

記憶領域を作る

バインドマウントの場合

  • ホスト上にフォルダやファイルを作っておく
  • Windowsなら C:\Users\ユーザー名\Desktop\docker など、Mac/Linuxなら ~/dockerなど好きな場所にディレクトリを作る。

ボリュームマウントの場合

  • Docker 上でボリュームを作成
  • コマンド例: docker volume create <ボリューム名>
  • 必要なくなれば: docker volume rm <ボリューム名>

ボリューム管理コマンドの概要

コマンド内容省略主なオプション
createボリュームを 作成 する不可あまり指定しない
inspectボリュームの詳細情報を表示不可あまり指定しない
ls既存ボリュームの一覧を表示不可あまり指定しない
prune未使用ボリュームを一括削除不可あまり指定しない
rm指定したボリュームを削除不可あまり指定しない

実際のコマンド例

バインドマウントのよくある例

docker run --name my-web -d -v C:\Users\myuser\Desktop\docker\html:/usr/local/apache2/htdocs -p 8080:80 httpd

説明

  • C:\Users\myuser\Desktop\docker\html(ホスト側のフォルダ)を/usr/local/apache2/htdocs(コンテナ内)にマウント
  • これでホスト上の html フォルダを編集すると、コンテナ内からも即時に反映される。

ボリュームマウントのよくある例

docker volume create my-volume

docker run --name my-db -d -v my-volume:/var/lib/mysql -p 3306:3306 mysql:5.7

説明

  • my-volume(Docker ボリューム)を /var/lib/mysql(コンテナ内)にマウント
  • DB データはコンテナが消えても my-volume に残るので安全

マウントのイメージ:ショートカットのようなもの

 イメージとしては、コンテナ内にあるディレクトリパス(例: /usr/local/apache2/htdocs)が、実際には外部(ホストのディレクトリまたは Docker ボリューム)へショートカットされている状態。
 コンテナからすると「そこにデータがある」ように見えますが、本当の実体は別の場所にあるという仕組みです。

まとめ

  1. マウントの基本
    -v <マウント元>:<マウント先>docker run コマンドに付与
  2. バインドマウント
    ・ホスト上の既存ディレクトリやファイルをコンテナに見せる方式
    自由に編集できるが OS パス依存がある。
  3. ボリュームマウント
    ・Docker が管理する専用領域を使う方式
    OS差異を気にしなくて良いが、ホストから直接編集しにくい。
  4. 使い分け
    ・頻繁に編集するデータ → バインドマウント
    ・環境依存を避けたい or ホスト側から直接編集しない → ボリュームマウント

 次のコンテンツでは、バインドマウントする具体例について詳しく解説します。実際にコマンドを打ちながら、ホストのディレクトリをコンテナ内にマウントする手順を学びましょう。