LoginSignup
7
4

More than 3 years have passed since last update.

軽量なSambaのDockerイメージを作ってRaspberry Piで動かしてみた

Posted at

はじめに

Raspberry PiをNASにするため,Dockerでsambaを立ち上げるべく,Alpine Linuxをベースイメージとして,(たぶん)軽量なイメージを作成してみました↓↓

Dockerでsambaを動かす場合はdperson/sambaが有名ですが,今回は勉強もかねてすべて自分でDockerfileを書いてみました.

環境

Raspberry Piで動かします。

  • マシン: Raspberry Pi 3B+
  • OS: hypriot OS
$ docker --version
Docker version 19.03.5, build 633a0ea

つくるもの

機能は単純に高望みせず,以下のような物を目指します.

  • ユーザのホームディレクトリを共有
  • 軽量にするためベースイメージはAlpine Linux
  • あくまで個人利用目的で複数ユーザ、セキュリティは考慮しない

つくったもの

構成は、

  • Dockerfile
  • smb.conf
  • start_samba_system.sh

の3ファイルです。

smb.confはbuild時にイメージに取り込まれ、デフォルトのsmb.confと置き換えられます。また、start_samba_system.shはsamba起動スクリプトです.

Dockerfile

FROM alpine:3.9
MAINTAINER HoriThe3rd

ENV USERNAME="name" \
    PASSWD="weak_passwd"

RUN apk update && apk --no-cache add samba

COPY ./smb.conf /etc/samba/
COPY ./start_samba_system.sh /usr/local/bin
RUN chmod 775 /usr/local/bin/start_samba_system.sh

EXPOSE 139 445
ENTRYPOINT [ "/bin/ash" ]
CMD [ "/usr/local/bin/start_samba_system.sh" ]

コンテナ起動時は、ENTRYPOINTで/bin/ashを呼び出し、CMDでstart_samba_system.shを走らせています.
このシェルスクリプト内で環境変数USERNAMEとPASSWDを使ってsambaユーザを作成し,sambaを起動します.docker run時に環境変数を設定することで任意のユーザ名とパスワードに対応します.

なお、Alpine Linuxを用いているので、シェルはbashではなくashが標準です。

samba起動スクリプト

ユーザの作成を行った後にsambaを起動しています.
シェバンが#!/bin/ashになっています.

#!/bin/ash

# Create an account
adduser -D $USERNAME
echo $USERNAME':'$PASSWD | chpasswd
echo -e $PASSWD'\n'$PASSWD | pdbedit -a -u $USERNAME

# Start daemons
nmbd restart -D
smbd restart -FS </dev/null

最後の行の</dev/nullはコンテナを起動した瞬間にexitedとなってしまうのを防ぐために入れています.こちらの記事を参考にさせていただきました.
Dockerでイメージ作成してsamba立ち上げる

smb.conf

ホームディレクトリを共有する設定をしたものを配置しました.

[homes]
   comment = Home Directories
   browseable = no
   writable = yes

ビルド

Dockerfileのあるディレクトリでビルドします。

docker build -t mysamba:1.0 . 

ビルド後のimageのサイズは、私の環境で32.1 MBと思いの外軽量に出来あがりました。dockerhubで有名なdperson/sambaが200 MB以上だったので大幅に軽くなっています。
もちろん、今回作成したものは必要最低限の構成なので、この比較はあくまで参考値とお考えください。

ラズパイのようなリソースの少ないマシンでは特に小型なのは助かります。

Run

自分でビルドしない場合は,次の"Dockerhubからダウンロードして実行する場合"を使ってください.

コンテナの/home/USERNAME/以下がsambaで共有されるので、-vオプションなどでホストのストレージと同期するようにして起動します。--restart=alwaysで再起動時に起動するようにしています。

docker run -d -p 139:139 -p 445:445 --name smb --restart=always -v <host path>:/home/USERNAME -e USERNAME="<your_name>" -e PASSWD="<your_pw>" mysamba:1.0

Dockerhubからダウンロードして実行する場合

Dockerhubにイメージをpushしていますので,以下のコマンドで実行できます.
ラズパイで実行する場合は,rpiタグで使用できます.latestはアーキテクチャがamd64なので通常のマシン用です(試していませんが・・・).

docker run -d -p 139:139 -p 445:445 --name smb --restart=always -v <host path>:/home/USERNAME -e USERNAME="<your_name>" -e PASSWD="<your_pw>" horithe3rd/lw_samba:rpi

おわりに

実際にDockerfileを手書きしてなかなか勉強になりました.

Alpine Linuxを用いることでかなり軽量なsambaイメージを作成することができました.ラズパイのようにリソースが少ないマシンで扱うにはやはりCentOSやUbuntuをベースにすると重たくなってしまうのでAlpine Linuxが便利ですね.

なお,今回作成したイメージはセキュリティなどは全く考えていないので,何かあっても作者は責任は取らないことはお約束です・・・

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4