はじめに
最近Dockerを使ってYOLOv5を使ってみたのだが,結果の画像を確認するのにいちいちDockerコンテナ内からホスト側(Dockerコンテナ外)にコピーして確認していた.
今後,物体認識をしていくのにいちいちこんなことをやっていたら気が狂ってしまう.
そこで今回はDocker外のファイルをDockerにマウントすることでこの問題を解決した.
ぜひ参考にしてほしい.
ちなみにDockerやYOLOv5を使う方法はこちらの記事↓で紹介している.
マウント とは
そもそもマウントとは,ホスト側(Dockerコンテナ外)にあるディレクトリやファイルをDockerコンテナ内で利用できるようにする機能だ.
詳しいことは以下の記事を参考にした.
ディレクトリをマウントする
では実際にマウントをしてみる.
まず,マウントしたいディレクトリ test を用意する.
その中に例えば
Hello world!
この testディレクトリ を今回はマウントする.
マウントはコンテナを作る際に行う.runコマンドを打つときに以下のように打つ.
$ docker run -it -d --gpus all --name [name] -v /home/[ユーザディレクトリ]/[マウントしたいディレクトリ]:/usr/[マウント先のディレクトリ] [イメージ] bash
コンテナを作成がよく分からない人はこちらの記事に書いているので確認する.
マウント部分は -v /home/[ユーザディレクトリ]/[マウントしたいディレクトリ]:/[マウント先のディレクトリ] である.
まず,マウントしたいディレクトリは必ず絶対パスで指定すること.
自分はここで非常に手間取った.
$ pwd
で現在の絶対パスを確認できると思うので,それを入力する.
マウント先のディレクトリも絶対パスで書く必要がある.
今回はqiitaというディレクトリにマウントしたいと思う.
以下が私の環境でうったコマンドだ.
これで testディレクトリがマウントされた mount というコンテナができる.
ではコンテナ内に入って確認してみよう.
$ docker exec -it [name] bash
# ls
listをするとマウント先のディレクトリ qiita が作成されているのが確認できる.
そこに移動してみるとhello.txtが確認できる.
# cat hello.txt
次に,例えばtest ディレクトリ内で新しいファイルを作成してみる.
# touch docker.txt
ホスト側のディレクトリで確認すると,
docker.txtが作成されていることが確認できた.
ホスト側の操作もコンテナ内に反映され,コンテナ内の操作もホスト側に反映された.
これでDockerコンテナ内からホスト側のディレクトリを操作できるようになり,画像の確認やテキストの編集を行えるようになる.
おわりに
今回は,Dockerコンテナ内のファイルを確認できる方法を紹介した.