バインドマウントを使ってホストOS上のファイルと連携させる機能について解説します。
バインドマウントは、ボリュームとは違い、実際のホストOS上のフォルダとコンテナ内のフォルダを連携させる機能です。
コマンドや機能としては、対象がボリューム
なのかホストOSのフォルダ
なのかだけなのでコマンドもそこまで変化はありません。
docker container run -v {ホストOSのフォルダへの絶対パス}:{マウント名}
- ホストOSのフォルダへの絶対パス:
/Users/djima/Desktop/ttt
などの、絶対パスである必要があります。相対パスの指定はできません - マウント名 : コンテナ内のパスの絶対パスを指定する必要があります。
/app
など
例 : ホストOSのデータをコンテナ内から書き換えてみる
以下の情報を使ってコンテナにボリュームをリンクさせます。
- ホストOSフォルダの絶対パス :
/Users/djima/Desktop/ttt
- マウント名 :
/myDir
Zsh
docker container run -it -v /Users/djima/Desktop/ttt:/myDir —-rm ubuntu:20.04
絶対パスを省略する
dockerコマンドの実行時のパスであれば、pwd
コマンドで取得することができます。
この性質を使用して、以下のような記述が可能です。
Zsh
docker container run -it -v "$(pwd)/ttt:/myDir" —-rm ubuntu:20.04
この場合、dockerコマンド実行時のカレントディレクトリは、/Users/djima/Desktop
である必要があります。
適材適所で使い分けるものですが、私はDockerを開発環境として今はよく使っているので、ホストOSからもファイルの構造などが見やすいように「バインドマウント」をよく使います。
逆にボリュームはデータベース用のコンテナを使うときなどは多用すると思います。
まとめると
- 開発環境として使う場合 : バインドマウント
- データベースなどホストOS上にある必要はないがコンテナがなくなっても保持しておきたい場合 : ボリューム