SIer営業1年目がDockerを使ってファイルサーバを構築してみた

以下の記事に~~騙されて~~触発されて頑張って週1ペースで書いてみようと思います。
https://zine.qiita.com/products/creek-and-river-job-agent/
今までまともに文章を書いたことがないので、稚拙な点も多く、技術的にも未熟な点もあるとは思いますが、暖かく見守って下さい。
ここ間違ってるよ！とかありましたら、ぜひ**優しく**教えて下さい。

#今回やること
記念すべき初投稿のネタはOSインストールからファイルサーバの構築です。
数日前に5年前くらいに作ったファイルサーバのシステムが壊れました。だいぶ前に作ったやつで、OSも古く、知識のない状態でいじっていたやつなのでゴミファイルの蓄積もすごかったため、はじめから作ろうと思いました。
せっかくだし、最近(?)流行りのDockerとかいうやつがあるらしいので、勉強も兼ねて構築していきます。

#構築した環境
- CentOS 7.5
- Sambaを使ったファイルサーバの構築

#CentOSのインストール
クライアントの環境がMacなので、以下のリンクの通りにBootable USBを作成してインストール。
https://blog.adachin.me/archives/5273
minimalでも
OSのインストールは特に問題なく終了。

#やったこと
- ifconfigのインストール
- IPアドレスの固定
- SSHの設定
- smartctlm,rsyncのインストール
- HDDのマウント
- 所有者、パーミッションの変更
- 定期的にバックアップ・シャットダウン

## ifconfigのインストール
使い慣れているifconfigがCentOS7から非推奨になったらしい。
そのうち移行したいが、とりあえずifconfigを使いたい。
以下参照。
https://qiita.com/s_makinaga/items/ce45f3e20b8edafab9dd

##IPアドレスの固定

##SSHの設定
- ポート変更
https://qiita.com/TakashiOshikawa/items/8141fe9c8318be183318
- 公開鍵認証方式へ変更 
https://qiita.com/uhooi/items/137de4578534c8e7e7f2
- SCPを使った公開鍵の受け渡し
https://qiita.com/nnahito/items/8f019aa92e5f008a1946
- Macから名前でsshする方法 **そのうち追加**

## smartctl,rsyncのインストール
https://qiita.com/rhap/items/a220483696b8d17b4090

```
$ yum install rsync
```

## HDDのマウント
自動マウント設定のみ
https://qiita.com/bwtakacy/items/c181f661e8655c42d85a

## 所有者、パーミッションの変更
- 再帰的な所有者の変更 https://qiita.com/pman-maru/items/e75aaa771e8167df8a1d
- 再帰的なパーミッションの変更 https://qiita.com/takeshi81/items/48ea62eae2fc7f1cb2f0

## 定期的にバックアップ・シャットダウン
以下のコマンドをroot権限にてcrontabに追加

```
#起動時にログを残す
@reboot /usr/bin/date >> /home/tororu/launchTime.txt

#平日朝3時にはシャットダウン
0 3 * * mon-fri /usr/sbin/shutdown -h now

# 毎日2時にrsyncによるバックアップ
0 2 * * * rsync -a --delete /mnt/main/ /mnt/bkp_main/
```


# Dockerのインストール
Docker公式に載っている方法です。
https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1

```
# Dockerがすでに入っている場合削除
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

# Dockerに必要なパッケージをインストール
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# レポジトリの追加
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Dockerの最新版をインストール
$ sudo yum install docker-ce
```

私の環境だと、デフォルトゲートウェイの設定がなくなり、Dockerインストール後にネットワークへ繋がらなくなったため、/etc/sysconfig/networkを以下のように修正。

```
# cat /etc/sysconfig/network
# Created by anaconda
GATEWAY=192.168.11.1 #この行を追加。デフォルトゲートウェイのIPアドレスは各々の環境に設定
```
Dockerの起動といろいろ設定

```
# Dockerの起動
$ sudo systemctl start docker

# hello-worldコンテナの起動（Dockerがちゃんとインストールされたかテスト）
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
--以下略

# sudo不要とするためにdockerグループに現在のユーザを追加
$ sudo usermod -aG docker $USER

# sudo不要でdockerのコンテナが起動できることを確認
$ docker run hello-world

# 起動時に開始
$ sudo systemctl enable docker
```
これでDockerのコンテナを使う基盤が整いました！

## SAMBAのコンテナを起動
コンテナのいいところは、OSにかかわらず機能単位でパッケージングできることです。
パッケージングの結果、単一機能のコンテナを作成し、他の人に配ることが可能となっています。
有志の方が作ったコンテナはいろいろなところで配布されていますが、以下のサイトを使うのがとりあえずいいでしょう。
https://hub.docker.com/
ここで"samba"と検索して一番上に出てきたdpersonさんが作ってくれたコンテナを今回は使用して行きたいと思います。

以下の条件でsambaサーバを構築したい場合、次のコマンドを実行します。

|コンテナ名|samba|
|---|---|
|共有したいフォルダパス|/mnt/pub|
|アクセスしたいユーザ名|foo|
|アクセスしたいユーザのパスワード|bar|

```
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"
```

・・・はい、これでSAMBAサーバの構築完了です。
Macからアクセスしてみましょう。
Finder > 移動 > サーバへ接続を選択（⌘K)

```
smb://<サーバのIPアドレス>/pub
```
で接続を押下し、ユーザ名:foo、パスワード:barで接続。
すると/mnt/pubのファイルが見えると思います。