Raspberry Pi 2 Alpine Linux(3.8.1) – TEST

学習用に構築したRaspberry Pi 2 on Alpine Linux(3.8.1) + dockerで簡単なテストをしてみたいと思います。

Alpineの公式イメージにnginx + phpをインストールして動作を確認してみます。

コンテナの作成

Alpineの公式イメージ

# docker pull alpine


ちょっと確認してみるとrcコマンドが入ってないようです。
イメージサイズも4.01MBとあって初期インストールパッケージも少ないですね。

新たにnginxコンテナ作成

# docker container run --privileged -d -p80:80 --name nginx_alpine alpine /sbin/init
# docker container exec -it nginx_alpine /bin/sh

コンテナに入ってbashをインストール後はdocker cpで.bashrcをコピー /bin/bashで入り直しています。

# apk update
# apk add openrc bash

nginxインストール

# apk add nginx
# nginx -v
nginx version: nginx/1.14.0
# rc-update add nginx
# rc-service nginx start

rc-service nginx startを実行するとネットワーク関連でエラーが出てしまいます。
dockerコンテナ内ではinterfaces設定が必要ないので/etc/init.d/nginxのネット項目をコメントアウトします。

/etc/init.d/nginx
#depend() {
#   need net
#   use dns logger netmount
#}


一旦exitしてコンテナを再スタート
# docker container restart nginx_alpine
無事動き出しました。

php7インストール

# apk add php7-fpm

nginx同様/etc/init.d/php-fpm7もネットをコメントアウト

/etc/init.d/php-fpm7
#depend() {                                              
#       need net                                         
#       use apache2 lighttpd nginx                       
#}

/etc/php7/php-fpm.d/www.confの編集

/etc/php7/php-fpm.d/www.conf
user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx
# rc-update add php-fpm7
# rc-service php-fpm7 start


php-fpm7も無事動きました。

nginx default.conf設定
apkでインストールされるnginxにはhtml関連ファイルは一切入ってないので頑張って編集するかコピーしなければいけません。ファイルの置き場所は/usr/share/nginx/htmlです。
phpは以下の設定で動きました。

/etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        root   /usr/share/nginx/html;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
# rc-service nginx restart
# rc-service php-fpm7 restart

raspbianコンテナを作成

Alpine Linuxからraspbianベースイメージを使ってコンテナを作成してみました。
作成方法は前回の記事と一緒です。スタートすると問題なく動くのですが再スタートすると以下のようなエラーが出てしまいます。Webるとこの手のエラーはいろいろ報告されていますがdiskless Alpineでの有効な対策はいまのところ見つかっていません。回復するにはOSのリブートをする必要があります。

# docker container start nginx_alpine
Error response from daemon: cgroups: cannot find cgroup mount destination: unknown
Error: failed to start containers: nginx_alpine


今回作成したコンテナをcommitしてみました。比較するとAlpineベースは圧倒的に小さいですね。小さいコンテナを積み上げていくという概念がよくわかると思います。

dockerの基本的な使い方は目的にあった信頼できるイメージがあればコンテナ外から設定ファイルを付け加えていくという方法のようです。いずれそんな使い方ができるかもしれません。(?)