はじめに
Dockerで立ち上げたコンテナに、ローカルPCの任意のフォルダをマウントすれば
docker内の閉じたNW内に自由にファイルをおけるぜー!って思い、調べた結果をまとめる
なぜ今更こんな記事を上げるのか?
googleで「Docker windows ファイル 共有」で検索すれば瞬殺かと思ったらそんなことなくて
・記事の内容を見たら実はDocker for Windows向けだった(※Hyper-V クライアントが実行できないPCはDocker ToolboxでDocker環境を利用するため 参考にならない)
・virtualboxの設定(後述)はあったが、そのあとのdocker上でのコマンド方法の書式があいまいで、結局よくわからなかった
といった感じでイマイチ自分の置かれた環境とハマらなかったので苦労したので、
PCが飛んでもまたやり直せるように記事に残す。
手順(概要)
ちょっと概要だけではわけわからないけど、全部で3STEPあるってところが自分の中ではポイントだったのでメモとして残す。
1.Virtualboxにて共有フォルダ設定を行う
2.Docker Machineにてコンテナ用の共有フォルダを作成し、1.の共有フォルダをマウントする
3.コンテナをコンテナ用共有フォルダとコンテナの任意のディレクトリにマウントさせて起動する
手順(詳細)
1.Virtualboxにて共有フォルダ設定を行う
1.Oracle VM VirtualBoxを起動する
2.default→右クリック→設定
3.共有フォルダークリック
4.ポップアップしたウィンドウの右側にある共有フォルダ新規追加アイコンをクリック
5.下記内容を入力して「OK」
フォルダーのパス:共有フォルダとして使いたいローカルPCのフォルダパスを入力
例)C:\Users\watya\work\docker
フォルダー名:docker-machineが認識するときのフォルダー名
C:\→/C/、\→/に置き換えるところがポイント
例)/C/Users/watya/work/docker
2.Docker Machineにてコンテナ用の共有フォルダを作成し、1.の共有フォルダをマウントする
Docker Quickstart Terminal を起動し、コマンドを実行する。
以下のコマンドで /e に、1.で設定した共有フォルダー をマウントする。
これで、ローカルPC→VirtualBox→Docker machineというつながりでファイル共有がつながる。
Docker Machine 側に作成するディレクトリ名は e にしてますが、被らなければなんでもよいです。
個人的にはドライブ番号っぽくなって共有フォルダってことがわかりやすいので気に入っている。
$ docker-machine ssh default 'sudo mkdir -p /e'
$ docker-machine ssh default 'sudo mount -t vboxsf -o uid=0,gid=0 /C/Users/watya/work/docker /e'
3.コンテナをコンテナ用共有フォルダとコンテナの任意のディレクトリにマウントさせて起動する
Docker Toolboxより、コマンドを実行する。
以下のコマンドで、2.で作成した/eがnginxコンテナの/homeにマウントされる。
$ docker run -d -v /e:/home --name nginx nginx
確認のためにログインして/homeの内容をチェックすると無事マウントされていることが確認できる
補足:Docker Machine 起動時に自動でマウントするよう設定
参考URL
今回参考にしたサイトは下記の通り。
っていうかこちらのほうが丁寧で内容の説明が深いのでよくわからなくなったら折に触れて立ち返りたい。
https://humo-life.net/memo/doku.php?id=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2:docker:docker_toolbox%E3%81%A7%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88_%E5%85%B1%E6%9C%89%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80_%E8%A8%AD%E5%AE%9A