Dockerのコンテナとホストで共有フォルダを設定する手順

はじめに
Dockerのホスト側(すなわち、自分のローカルPC)とコンテナ側で共有フォルダを作成すると、ホスト側で色々なファイルを編集したり追加したりして、コンテナ側でそのファイルを実行することができます。これならコンテナ側で使いたいコードをホスト側で好きなエディタを使って編集できます。ここでは、ホスト側とコンテナ側の共有フォルダを設定するための手順をメモします。
環境と手順概要
- ホストOS : Ubuntu18.04
- Docker version: 18.06.0-ce
具体的な手順としては以下のようになります。
- ホスト側のユーザのUIDを確認する
- 同一のUIDを持つユーザを追加する設定をDockerfileに記述
- 共有フォルダを指定してコンテナを作成、起動する
ホスト側のユーザのUIDを確認する
以下のように、idコマンドでUIDを確認します。
hostuser1のUIDが1000となっているので、コンテナ側でもUIDが1000であるユーザを作成します。
UIDについて
Ubuntuで設定されるUIDは、通常だと1000からになります。これは、以下のように
/etc/adduser.confというファイルにて設定されています。/etc/adduser.confシステム用には100から、ユーザ用に1000からスタートしていることが分かります。
同一のUIDを持つユーザを追加する設定をDockerfileに記述
まず、適当なフォルダに移動して、そこでDockerfileを作成します。Dockerfileの中身は後述します。以下では/home/hostuser1/dockerという適当なフォルダにDockerfileを作成しています。
Dockerfileの中身を以下のように記述します。
上記のuserddコマンドでコンテナ側のユーザcontuser1を新規作成しています。useraddの-u 1000にてuidを1000に指定しています。なお、useraddコマンドについては、useraddコマンドについて詳しくまとめました 【Linuxコマンド集】に詳しく説明が載っており大変参考になります。
また、上記で使用しているuseraddのオプションの説明をいかに載せます。その他のオプションについては、useraddマニュアルにまとめられており勉強になります。
| -u UID | 新規追加するユーザのUIDを指定します。 |
|---|---|
| -m | 新規追加するユーザのホームフォルダも一緒に作成します。 |
| -d フォルダパス | 新規追加するユーザのログイン時のデフォルトのフォルダを指定します。 |
以下のコマンドでビルドします。mydockerは適当につけたコンテナ名です。
これで後はDockerを起動します。
共有フォルダを指定してDockerを作成、起動する
以下のコマンドでホスト側とコンテナ側の共有するフォルダを指定してコンテナを作成、起動することができます。以下のコマンドでは、ホスト側のフォルダとして/home/hostuser1/docker、コンテナ側のフォルダとして/home/contuser1を共有フォルダとしてそれぞれ指定しています。以下に各オプションの説明を載せます。
| オプション | 説明 |
|---|---|
| -v ホストのフォルダパス:コンテナのフォルダパス | ホストのフォルダパスとコンテナのフォルダパスを共有フォルダとして指定します。 |
| -it | シェルで操作するために入力待受状態にします。厳密には、-i、-tと別々のオプションです。コンテナ内で操作したい場合は使います。 |
上記で必要な設定は完了です。ホスト側、コンテナ側で指定したフォルダにファイルを追加したり、ファイルを編集したりするとそれぞれのフォルダが同期されます。このようにホスト側とコンテナ側で共有フォルダを設定できれば、コードなどはホスト側の好きなエディタを使って編集し、そしてそのコードをコンテナ側で実行することが便利です。
dockerコマンドをsudoなしで使用するための設定
なお、dockerコマンドはデフォルトだと実行にroot権限が必要になります。ただ、毎度sudoをつけるのは面倒な上、セキュリティ上よろしくありません。そこで通常使用している一般ユーザをdockerグループに所属させることでroot権限なしにdockerコマンドを実行できるようにします。以下手順です。
まずdockerというグループが存在しているかを/etc/groupの中に含まれるかで確認します。すでに存在している場合は以下のようにdockerと記載されている部分を見つけられると思います。
もしまだdockerというグループが存在しない場合はgroupaddで作成します。
そして一般ユーザをusermodでdockerグループに所属させます。$USERにはいまログインしている一般ユーザ名が入ります。
これで後はホストを再起動すれば、sudoなしでdockerを実行できるようになります。
なお、usermodコマンドにて-aオプションをつけずに-Gオプションのみで所属グループを指定してしまうと、指定したグループにのみ所属する状態となり、元々所属していたグループから外れるので注意してください。以下の参考サイトにusermodのオプション全般について詳しく書かれており大変勉強になりました。
【linux】 ユーザーをグループに追加する際は gpasswd -a か usermod -aG を使う方がいい
usermodコマンドについて詳しくまとめました 【Linuxコマンド集】
まとめ
Dockerを使い始めてみると、これまで色々な環境構築にかかっていた時間を大幅に短縮でき、またローカル環境をいじる必要がないので精神的にもハードルが下がりました。環境構築手順に変更があっても、それに対応済のコンテナを持ってくれば良いのは楽です。
関連記事
公開日:2020/01/01 更新日:2020/01/01Docker ComposeをUbuntuにインストールする手順
Docker ComposeをUbuntu18.04にインストールしたのでその手順をメモしておきます。docker-composeコマンドを使えるようにするまでの手順です。Docker Composeのインストール自体はとても簡単です。
公開日:2019/07/13 更新日:2019/07/13DockerでCouldn't connect to Docker daemonが出る場合の原因と解決方法
Dockerをいざ使おうとした時に、「ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?」というエラーが表示されました。この記事ではこのエラーの原因と解決方法をまとめます。
公開日:2018/08/20 更新日:2018/08/20NextcloudをDockerで構築する手順
プライベートなDropbox環境を構築することができるOwnCloudですが、OwnCloudから派生したNextcloudが開発されています。 このNextcloudを実際に触って使ってみるために、Dockerを使って環境構築したのでその手順をメモします。
公開日:2018/06/09 更新日:2018/06/09Ubuntu18.04にDockerをインストールする手順
はじめはわかりにくいDockerですが、とりあえず手を動かして実際に使ってみると、その良さが次第にわかります。私自身、最初は良くわからないまま使い始めましたが、その便利さを使っているうちに実感できました。そこでここではUbuntu18.04にDockerをインストールする手順をメモします。