Help us understand the problem. What is going on with this article?

Docker上 で samba を動かしてファイル共有する

More than 3 years have passed since last update.

続き

Docker上で samba を動かす

ZFSのファイルシステムは NFS または SMB(CIFS)で共有することができます。ただし、on Linux では別途 nfs-kernel-serverやsambaをインストールする必要があるため1 今回はZFSを通じて共有するのではなく、Docker上でsambaを動かしてSMB共有してみます。

Docker をインストールする

最初に公式ドキュメントに従ってDockerをインストールします。14.04なので前準備(Prerequisites)は不要だそうです。

$ curl -sSL https://get.docker.com/ | sh
apparmor is enabled in the kernel and apparmor utils were already installed
+ sudo -E sh -c apt-key adv --keyserver ...
(略)
+ sudo -E sh -c docker version
Client:
 Version:      1.9.0
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   76d6bc9
 Built:        Tue Nov  3 17:43:42 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.0
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   76d6bc9
 Built:        Tue Nov  3 17:43:42 UTC 2015
 OS/Arch:      linux/amd64

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker hoge

Remember that you will have to log out and back in for this to take effect!

てっきり1.8がインストールされると思っていたら1.9でした。
テスト実行してみます。

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b901d36b6f2f: Pull complete
0a6ba66e537a: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.
...
(略)

インストールできているようです。簡単で助かる!
次に 自身のユーザアカウントを dockerグループに加えることで、sudoなしでdockerを実行できるようにします。

$ sudo usermod -aG docker hoge

hogeがユーザ名です。このとき -aG でなく -G としてしまうと大変なことになるそうなので注意します。

ログアウト、再ログイン後に 今度はsudoなしで動作確認します

$ docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.
(略)

問題ないようです。

Dockerイメージを探す

Dockerイメージを自分で構成するのは sambaでない他のサービスを動かすときに試すこととして、今回は公式のDocker Hubで既存イメージを探して、それを利用してみます。

  1. 右上の検索ボックスでsambaを検索
    クリップボード.png

  2. Starsを選択:Starが多い順に検索結果を表示

  3. 上から順にいくつか見ていき、Full Description の記述がわかりやすかったdperson/samba に決定!

共有用のファイルシステムを作成する

前準備として、共有用のファイルシステムtank/pubを作成し、/mnt/pub にマウントします。また、dperson/samba から書き込み可能にするため /mnt/pubの所有者をdockerを実行するユーザに変えます。

$ sudo zfs create tank/pub
$ sudo zfs set atime=off tank/pub
$ sudo zfs set mountpoint=/mnt/pub tank/pub
$ sudo chown hoge /mnt/pub
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        94G  1.5G   92G   2% /
(略)
tank/home       1.3T  128K  1.3T   1% /home
tank/pub        1.3T  128K  1.3T   1% /mnt/pub
$ ll /mnt
total 16
drwxr-xr-x  3 root    root   16 Nov 12 01:14 ./
drwxr-xr-x 21 root    root 4096 Nov 13 19:33 ../
drwxr-xr-x  2 hoge    root    6 Nov 13 20:56 pub/

dperson/samba を起動する

いよいよDockerで dperson/samba を起動します。docker run のオプションはこちらを参考にさせて頂きました。
パラメータ中の dperson/samba より後のオプション -s と -u については dperson/samba のConfigurationに説明があります。普段ならsmb.confに記述する内容を、-s と -u で指定する感じです。

$ docker run --name samba -p 139:139 -p 445:445 -v /mnt/pub:/mnt/pub -d dperson/samba -s "pub;/mnt/pub;no;no;no;foo" -u "foo;bar"
Unable to find image 'dperson/samba:latest' locally
latest: Pulling from dperson/samba
a719479f5894: Pull complete
91bac885982d: Pull complete
69865d53ad81: Pull complete
52390241cd86: Pull complete
c7005920b097: Pull complete
26ee48a2628d: Pull complete
ffc195f7d642: Pull complete
bf2b48e20c44: Pull complete
Digest: sha256:19aeb4df3ee0a81095c5f2006b916af08abcc143540f9cd595f3839b3d77343a
Status: Downloaded newer image for dperson/samba:latest
0cf58b5f4d1ba117b94a0533c43cca55c9f40b90f8f5523633bb90d23b15a07c

dperson/sambaはローカルにないのでpull(ダウンロード)が始まります。10秒程度待ったら起動した(ように見える)のですが 本当にうまくいったのか…?

別の環境から共有してみます。192.168.0.10は、Docker/sambaを動かしている環境のIPアドレスです。

$ sudo mount -t cifs -o username=foo,password=bar,iocharset=utf8 //192.168.0.10/pub /media/nas

あっさりマウントできた!
今度はファイルを置いてみます。

$ echo aaa > /media/nas/test.txt
$ cat /media/nas/test.txt
aaa

置けました!pull含めて10秒程度で本当に立ち上がるとはびっくりです。

dperson/samba を停止・削除する

起動がうまくいったので コンテナを停止・削除してみます。

$ docker stop samba && docker rm samba
samba
samba

コンテナは消えましたが、先ほど置いたファイル(test.txt)は /mnt/pub/ に残っているはずなので、確認します。

$ ll /mnt/pub
(略)
-rw-rw-r-- 1 hoge     users  4 Nov 13 22:24 test.txt

夢じゃなかったようです。

続く


  1. 本家Solaris版ではZFS単体で共有ができるようです 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした