
我が家では自宅サーバ(ubuntu 18.04 LTS)を立てて運用しています。
最近、Linuxサーバを新しく購入したので旧サーバからの移行を行いました。
今回はdockerを使ってsambaをインストールする手順を紹介したいと思います。
自分の場合は以前Raspberry piでsambaを構築・運用していたので、手順は同じDebian系のubuntuでセットアップしていますが、centos(RHL系)でも同じです。
Contents
Sambaサーバ とは
職場で共有フォルダを使ったことはありませんか?
チーム内や、プロジェクト内、部署内、あるいは社内でフォルダやファイルを共通の場所に配置して、それを参照・編集・ダウンロードしたことがあると思います。いわゆる、NASです。
Linux上でそのような共有フォルダ、共有ファイルを実現する際には、Sambaを使います。
これらは通常、パッケージ管理システム(apt,yum,rpm等)を使えば簡単にインストールできます。
今回は、自宅サーバの環境を汚さずにdockerを使ってsambaを構築してみましたので、その方法を紹介します。
既に作成済みのsmb.confファイルがあればそれを活用することも可能です。
インストール手順
前提
dockerおよびdocker-composeがインストールされていることが前提です。
もし、まだインストールしていない場合はこちらを参照してインストールしましょう。
私のマシン
私と同じ環境で構築される場合、構築で躓いた際にサポートできると思います。メモリ8GB以上を選択すればエンコード等しても性能的に問題はないと思います。Windows10マシンですが、私はUbuntuを上書きインストールして自宅サーバを構築しています。
ディレクトリ構成
今回作業するディレクトリを作成し、作成したディレクトリ配下に
- docker-compose.yml
- smb.conf
を準備します。
docker-composeは新規で作成しますが、smb.confは今使っているものがあれば流用します。無ければ新規で作成します。
今回はDocker hubで公開されているイメージを使うため、Dockerfileを自分で作る必要はありません。
今回は適当な場所にdocker-sambaというディレクトリを新規作成しました。
ディレクトリ構成は、以下の通りです。
それでは、さっそく準備してみましょう。
1 2 3 |
./docker-samba/ |--docker-compose.yml |--smb.conf |
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 |
samba: image: vimagick/samba container_name: samba volumes: - ./smb.conf:/etc/samba/smb.conf - /mnt:/mnt - /media:/media net: host tty: yes restart: always |
たったこれだけ。
今回使うイメージはvimagick/samba。
6-7行目は、共有するディレクトリをvolumesに指定しています。
自分の場合は外付けHDDをマウントしている/mntと/mediaをコンテナ内でも同じ場所にリンクしたいので、このような記述です。
コンテナ内の環境とsmb.confに合わせて修正しておきましょう。
10行目は基本、sambaは常に起動させておきたいのでrestart: alwaysとしています。
上記は後で如何様にもやり直しできるので、わからなければそのまま使ってください(これがdockerのいいところ)。
smb.conf
こちらは、環境に合わせて動くものならなんでもOKです。
なにも持ってなければ、まずはこれで試してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[global] unix charset = UTF-8 dos charset = CP932 workgroup = WORKGROUP server string = %h server (Samba, Ubuntu) dns proxy = no interfaces = 127.0.0.0/8 10.29.3.0/24 bind interfaces only = yes map to guest = Bad User log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d server role = standalone server passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = yes [mnt] path = /mnt/ writable = yes guest ok = yes guest only = yes create mode = 0664 directory mode = 0775 veto files = "lost+found" [media] path = /media/ writable = yes guest ok = yes guest only = yes create mode = 0664 directory mode = 0775 veto files = "lost+found" |
[global]は共通設定です。
7行目のinterfaces = 127.0.0.0/8 10.29.3.0/24
は、接続許可するインターフェースの設定です。私の自宅のNW環境はで、クラスAのプライベートアドレス帯(10.29.3.0/24)を使っていて、サーバには10.29.3.7のIPアドレスを振っているため、このような設定になっています。
良くある、クラスCのプライベートアドレス192.168.x.x/24を使っている場合は、ここの設定を変更してください。
後半の[mnt]、[media]は共有フォルダに表示させる名称です。この場合はmnt、mediaという名前でフォルダを共有します。
[share]でも[mount]でも[HDD]等なんでもOKです。要するに、どのフォルダにどのディレクトリが紐づいているか、自分が分かっていればOKです。
コンテナ起動
あとはdockerコンテナを起動するだけ。
1 |
docker-compose up -d |
エラーが出なければこれで共有フォルダが作成されたはず。
Windowsのエクスプローラーから見えたら成功です。
うまくいかない場合は、smb.confを見直してみましょう。
私の場合は、サーバのIPアドレスは10.29.3.7なので、\\10.29.3.7のパスを表示させます(このように見えれば成功です!)。

コンテナ停止
1 |
docker-compose down |
まとめ
共有フォルダをLinuxで用意する場合は、sambaを使います。
dockerを使えば、サーバの環境を汚さずに構築できます。
しかも、docker-compose.ymlとsmb.confがあれば構築可能です。
お家の中に共有フォルダがあると、写真やビデオの管理と参照が楽になっていいですよ。オススメです。
ぜひ、お試しあれ♪
docker-composeを使ったサービスをいくつか紹介しています。関連記事も参考にしてください。
コメント