Owncloud-dockerをRaspberry Pi3で動かす

Dropboxのようなソフトウェアで著名な[ownCloud](https://owncloud.org/)をラズパイ上のdockerで動かしてみます。

# 1. ownCloud用のコンテナー

[owncloud-docker](https://github.com/owncloud-docker)の[server](https://github.com/owncloud-docker/server)では、owncloud、db、redisと ３つのコンテナーを使用していますが、それぞれのベースイメージは以下のようになっています。

| サービス | owncloud | db | redis |
|---|---|---|---|
| コンテナー | owncloud/server | webhippie/mariadb | webhippie/redis |
| ベースイメージ | owncloud/base | webhippie/alpine | webhippie/alpine |
| ベースイメージ | owncloud/ubuntu |   |   |
| ベースイメージ | ubuntu:16.04 | alpine:edge | alpine:edge |

これらをラズパイ用として作成することが目標となります。

# 2. owncloud/serverコンテナーの作成
[owncloud/server](https://github.com/owncloud-docker/server)は、ubuntuから[owncloud/ubuntu](https://github.com/owncloud-docker/ubuntu)を作成し、owncloud/ubuntuから[owncloud/base](https://github.com/owncloud-docker/base)を作成し、出来上がった owncloud/baseから[owncloud/server](https://github.com/owncloud-docker/server)を作成していきます。

## 2.1 owncloud/ubuntuコンテナーの作成
まず[owncloud/ubuntu](https://github.com/owncloud-docker/ubuntu.git)をクローンして、ラズパイ用に修正してからビルドします。

```
git clone https://github.com/owncloud-docker/ubuntu.git
```

### 2.1.1 `update-tools.sh`の修正

`update-tools.sh`でwgetしている、`dockerize`と`gosu`をラズパイ用に修正します。

__dockerize__

```
wget -O - https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-armhf-v0.6.1.tar.gz | tar -C rootfs/usr/bin -xzvf -
```

__gosu__

```
wget -O rootfs/usr/bin/su-exec https://github.com/tianon/gosu/releases/download/1.10/gosu-armhf
```

### 2.1.2 `Dockerfile`の修正

`Dockerfile`をラズパイ用に修正します。

```
FROM armhf/ubuntu:16.04
```

### 2.1.3 `owncloud/ubuntu`コンテナーのビルド

ファイルを修正したら、`owncloud/ubuntu`コンテナーをビルドします。

```
bash update-tools.sh
IMAGE_NAME=owncloud/ubuntu ./hooks/build
```

## 2.2 `owncloud/base`コンテナーの作成

`owncloud/base`をクローンしてビルドします。

```
git clone https://github.com/owncloud-docker/base.git
cd base
IMAGE_NAME=owncloud/base:latest ./hooks/build
```

## 2.3 `owncloud/server`コンテナーの作成

`owncloud/server`をクローンしてビルドします。

```
git clone https://github.com/owncloud-docker/server.git
cd server
source .env
IMAGE_NAME=owncloud/server:${VERSION} ./hooks/build
```

`.env`ファイルに`VERSION=10.0.7`と書かれていました。

# 3. `webhippie/mariadb`コンテナーの作成

`webhippie/mariadb`コンテナーは、`alpine:edge`コンテナーをベースイメージとして作成した、`webhippie/alpine`コンテナーをベースイメージとしています。

ラズパイ用には、`alpine:edge`に相当するコンテナーイメージを作成してから作業を進めます。

## 3.1 `alpine:3.6.2`コンテナーの作成

ラズパイ用の`alpine:3.6.2`が見当たらなかったので、公式から`rootfs`をダウンロードしてコンテナーを作成しています。`Dockerfile`　を作成したディレクトリに公式からダウンロードした`rootfs` を展開しておきます。

```
wget -O - https://dl-4.alpinelinux.org/alpine/v3.6/releases/armhf/alpine-minirootfs-3.6.2-armhf.tar.gz | sudo tar -C rootfs -zxvf -
```

`Dockerfile`はこんな内容です。

```
FROM armhf/alpine

ADD rootfs /

RUN apk update \
 && apk upgrade

CMD /bin/sh
```

これを `alpine:3.6.2`としてビルドします。

```
sudo docker build -t armhf/alpine:3.6.2 .
```

## 3.2 `webhippie/alpine`コンテナーの作成
何故かしら`webhippie/alpine`は、`dockhippie/alpine`をクローンして作成していきます。

```
git clone https://github.com/dockhippie/alpine.git
```

クローンしたら、`update-tools.sh`で`wget`している`templater`をラズパイ用に修正します。

```
https://dl.webhippie.de/misc/templater/master/templater-master-linux-arm-7
```

続けて `Dockerfile`を修正します。

最初に、ベースイメージをラズパイ用にします。

```
FROM armhf/alpine:3.6.2
```

次に、`apk add`している`s6`の行を以下の内容に修正します。

```
    git gcc make skalibs-dev linux-headers musl-dev \
    libc6-compat && \
```

`Dockerfile`の`ENV`行の上に以下の内容を追加します。

```
RUN cd /tmp \
 && git clone https://github.com/skarnet/skalibs \
 && cd skalibs \
 && ./configure \
 && make \
 && make install \
 && cd ..; rm -fr /tmp/skalibs

RUN cd /tmp \
 && git clone https://github.com/skarnet/execline \
 && cd execline \
 && ./configure \
 && make \
 && make install \
 && cd ..; rm -fr /tmp/execline

RUN cd /tmp \
 && git clone https://github.com/skarnet/s6 \
 && cd s6 \
 && ./configure \
 && make \
 && make install \
 && cd ..; rm -fr /tmp/s6
```

準備ができましたので、`webhippie/alpine`をビルドします。

```
bash update-tools.sh
IMAGE_NAME=webhippie/alpine ./hook/build
```

## 3.3 `webhippie/mariadb`コンテナーの作成

この`webhippie/mariadb`も、`dockhippie/mariadb`をクローンして作成します。

```
git clone https://github.com/dockhippie/mariadb.git
```

クローンした`mariadb`にある`setup`の`templater`の行を修正します。ファイルは、`mariadb/rootfs/etc/s6/mariadb/setup`になります。

```
/usr/bin/templater --debug --prefix mariadb \
  --output /etc/mysql/my.cnf \
  /etc/templates/my.cnf.tmpl
```

`templater`のバージョンによって引数の扱いが変わっているようです。

ファイルを修正したら、`webhippie/mariadb`コンテナーをビルドします。

```
docker build -t webhippie/mariadb .
```

## 3.4 `webhippie/redis`コンテナーの作成
ここまで準備ができていますから、クローンしてそのままビルドしちゃいます。

```
git clone https://github.com/dockhippie/redis.git
cd redis
docker build -t webhippie/redis .
```

# 4. `ownCloud`の起動
目標としていた 3つのコンテナーを作成できましたので、`docker-compose` で`ownCloud`　を起動します。

先に `2.3 owncloud/serverコンテナーの作成`で、クローンしている`owncloud-docker/server`ディレクトリに移動して`docker-compose`を実行します。

```
cd owncloud-docker/server
docker-compose up -d
```

# 5. ブラウザからのアクセス
無事に`ownCloud`が起動できれば、ログイン画面が表示されます。ここで、先の`owncloud-docker/server`ディレクトリの`.env`ファイルに管理者ユーザ
ーとパスワードが`admin`と書かれていますので、修正していなければユーザー：admin、パスワード：adminでログインできます。

```
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
```

[ownCloud Docker](https://github.com/owncloud-docker)には、__Docker images for Production usage__ と書かれていますが、実際に使用する場合には、もちろんこれらのユーザー名、パスワードなどは変更しておきましょう。