docker公式Alpine Linuxイメージの初期設定

#まえがき
isoでインストールするといろいろ入ってるらしいですが、DockerHubから引っ張ってきたイメージはさらに絞られています。たとえば初期設定に便利なスクリプト"setup-alpine"とか"setup-ほにゃらら"系は全くありません。
（かと思えば、ifconfig や vi は入ってたりします）
dockerを動かすだけ and/or イメージをDIYするならubuntuでも贅肉ありありなのでAlpine Linuxでマシンを組みました。
・・・本当は512MBなVPSのリソースを無駄遣いできない、というビンボー事情です💦・・・
ちなみに、"setup-ほにゃらら"はシェルスクリプトみたいなものらしいです。ソースは[ここ](https://github.com/alpinelinux/alpine-conf "alpinelinux/alpine-conf")にあります。

#原典とか

https://wiki.alpinelinux.org/wiki/Newbie_Alpine_Ecosystem

#環境
最近のdockerな環境なら依存しないはず。
ちなみに現在は
　　Windows10 Education build 19042.928
　　PowerShell 5.1.19041.906
　　Docker Desktop for Windows version 20.10.5, build 55c4c88
特段、妙なアップデートはしてないはず。

#操作
##imageを引っ張ってきてコンテナを作る
###docker run
```
PS> docker run -d -it -name ali alpine /bin/ash
```

"ali" はコンテナ名です。ご自由につけてください。
/bin/ashは最初から入ってる唯一のshellです。/bin/shでも通じますが同じものが起動します。

###docker exec
中に入ります。

```
PS> docker exec -it ali /bin/ash
/ #
```

##初期設定
###rootパスワードの設定
初期値は"空”ですので、早めに設定しましょう。

```
# passwd root
Changing password for root
New password:***
Retype password:***
passwd: password for root changed by root
```

###ホスト名の設定
デフォルトではイメージIDになってます。

```
# hostname aliwww
```

"aliwww"がホスト名です。ご自由にどうぞ。
、、、といきたいところですが、「権限あらへん」エラーとなります。
現状、__docker run する時に"--hostname aliwww"とする__しか方法を知りません💦

ちなみに

```
# echo "aliwww" > /tmp/t
# hostname -F /tmp/t
```

も同じエラーとなります。また、"setup-hostname"のソースにあるとおりに

```
# echo "aliwww" > /etc/hostname
```

すれば、エラーにはなりませんが再起動すると元のイメージIDに書き戻ります。
これは”df”の結果が：

```
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
...
/dev/sdc             263174212   2923424 246812632   1% /etc/resolv.conf
/dev/sdc             263174212   2923424 246812632   1% /etc/hostname
/dev/sdc             263174212   2923424 246812632   1% /etc/hosts
...
```

となっているからだと思います（ということはDNSの設定もhostsの設定も一筋縄でいかない、ってことですね）。

###タイムゾーンの設定
残念ながら
https://wiki.alpinelinux.org/wiki/Setting_the_timezone
、、、と、__apk前提__ですので後述します。

###keymapの設定
省略。JISキーボードな環境がないので検証できないからです。
isoインストールなら setup-keymap というコマンドで設定できますので[ここのソース](https://github.com/alpinelinux/alpine-conf/blob/master/setup-keymap.in)を読むといいかも、です。

##基本的なパッケージのインストール

###apk使用開始前のおまじない
なにはともあれ。

```ruby:
# apk update
# apk upgrade
```

/etc/apk/repositoriesは最初から設定されてますから、よく紹介されている

```
# cat > /etc/apk/repositories << EOF
http://dl-cdn.alpinelinux.org/alpine/v$(cat /etc/alpine-release | cut -d'.' -f1,2)/main
http://dl-cdn.alpinelinux.org/alpine/v$(cat /etc/alpine-release | cut -d'.' -f1,2)/community
EOF
```

は__要らない__です。

###タイムゾーンの設定（再掲）
別にUTCでもいいけど。

```
# apk add tzdata
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtim
# cat "Asia/Tokyo" > /etc/timezone
# apk del tzdata
```


###OpenRCのインストールと設定

```
# apk add openrc
# sed -i 's/#rc_sys=""/rc_sys="lxc"/g' /etc/rc.conf
# echo 'rc_provide="loopback net"' >> /etc/rc.conf
# sed -i 's/^#\(rc_logger="YES"\)$/\1/' /etc/rc.conf
# sed -i '/tty/d' /etc/inittab
# sed -i 's/hostname $opts/# hostname $opts/g' /etc/init.d/hostname
# sed -i 's/mount -t tmpfs/# mount -t tmpfs/g' /lib/rc/sh/init.sh
# sed -i 's/cgroup_add_service /# cgroup_add_service /g' /lib/rc/sh/openrc-run.sh
# rm -rf /var/cache/apk/
```

原典はここです。
https://github.com/neeravkumar/dockerfiles/blob/master/alpine-openrc/Dockerfile
これで rc-service でサービスを登録できるようになります。

###NTPの設定


```
# apk add openntpd
# vi /etc/ntpd.conf
...
近くのサーバを指すように修正
...
# rc-service openntpd start
```


###SSHdのインストールと起動

```
# apk add openssh
# rc-service sshd start
```

必要に応じて /etc/ssh/sshd_config などを設定してください。

###常用ユーザの設定
となると、rootでsshログインできないから、

```
# adduser boku
Changing password for boku
New password:***
Retype password:***
passwd: password for boku changed by root
```

"boku"はユーザー名です。ご自由にどうぞ。

###sudoのインストールと設定
rootになれないと困るから、

```
# apk add sudo
# visudo
...
boku ALL=(ALL) ALL　を追記
...
```

##そのほか
##IP固定
決め打ちするときは__docker run する時に"--ip 192.168.0.2"__とします。
ちなみにDockerの仕様として、
・デフォルトのbridgeネットワークの時は--ipオプションは無視されます（つまり--networkオプションは必須です）。
・docker network createした時の--subnetオプションで指定した範囲にないとエラーになります。


##再起動＊＊＊未解決＊＊＊

```
# /sbin/reboot
# /sbin/poweroff
```

いずれも反応しません。な、なんと

```
# shutdown -r now
```

に至っては「そげなコマンドあらへん」となります。
WindowsなのでGUIで停止/再起動するさせてますが、結局はこれと同じかも。

```
PS> docker container stop ali
```

vmtoolsみたいに正規の方法でシャットダウンしてるとは思えない=電源ブチ切りと同じみたいで気持ちわるいかも💦


###ちょっと進展

```
# rc reboot
```

とか

```
# rc shutdown
```

かもしれない。