Dockerのコンテナの中のファイルをVsCodeで編集したい。
その悩みはバインドマウントをすることで解決します。
[参考記事]
https://nyakanishi.work/docker_mount/
https://qiita.com/aki_55p/items/63c47214cab7bcb027e0
#バインドマウントとボリュームマウントについて知っておきたいこと
###バインドマウント
コンテナ内の特定のディレクトリやファイルをDockerホストにマウントさせリンクする。
リンクしたディレクトリ内のファイルを修正するとコンテナ内のファイルも修正される。
※ホストマシン上でVscodeを使ってファイルを修正したい時はこっちを使う。
###ボリュームマウント
コンテナの外(Dockerホスト上)にストレージ領域(ボリューム)を作成してコンテナ内の特定のディレクトリをリンクさせる。
コンテナを削除してもマウントしたディレクトリ内のデータはボリュームに保持されているため、利用していたボリュームをマウントすることで同じデータを持つコンテナが作れる。1つのボリュームを参照し、複数のコンテナに同じファイルを共有したりすることができる。
###-vオプション
か--mountオプション
でマウントできる
・どちらのオプションを使うかによって書き方が異なる。
・--mountオプション
の方が推奨されている。
-vオプション
ではタイプミスしてもタイプミスした名前で新しいディレクトリを作成し、コンテナへのマウントを行う。
--mountオプション
ではホスト側に存在しないディレクトリやファイルを指定するとエラーになる。
よって--mountオプション
の方が推奨されている。
#マウントの方法の違い
##バインドマウント
#-vオプションの場合
# docker run -itd --name 任意の名前 -p 8080:80 -v ホスト側PATH:コンテナ側PATH イメージ
$ docker run -itd --name sample-nginx -p 8080:80 -v /Users/<ユーザ名>/tmp_dir:/usr/share/nginx/html nginx:latest
#--mountオプションの場合
# docker run -itd --name 任意の名前 -p 8080:80 --mount type=bind,src=ホスト側PATH,dst=コンテナ側PATH イメージ
$ docker run -itd --name sample-nginx -p 8080:80 --mount type=bind,src=/Users/<ユーザ名>/tmp_dir,dst=/usr/share/nginx/html nginx:latest
#上下とも同じことをしています
##ボリュームマウント
#ボリュームマウントを使用する際は、事前にボリュームをホストマシン上で作成する。
$ docker volume create sample-volume
#-vオプションの場合
# docker run -itd --name 任意の名前 -p 8080:80 -v ボリューム名:コンテナ側PATH イメージ
$ docker run -itd --name sample-nginx -p 8080:80 -v sample-volume:/usr/share/nginx/html nginx:latest
#--mountオプションの場合
# docker run -itd --name 任意の名前 -p 8080:80 --mount type=volume,src=ボリューム名,dst=コンテナ側PATH イメージ
$ docker run -itd --name sample-nginx -p 8080:80 --mount type=volume,src=sample-volume,dst=/usr/share/nginx/html nginx:latest
#上下とも同じことをしています