LoginSignup
9
9

More than 5 years have passed since last update.

ownCloud の Docker コンテナを作る

Posted at

ローカルで自分用の ownCloud が欲しくなったので docker コンテナとして用意してみました。

わざわざ自作しなくても DockerHub に沢山 ownCloud パッケージが存在しているのですが、細かいところを自分用にカスタマイズしたいというのと、コンテナ作成の練習も兼ねて作ってみた次第。

作りたいもの

要求策定。

  1. httpd を含んで ownCloud が動作する Docker コンテナ
  2. DB は基本外部の Mysql を使用するが単体で動作するように sqlite3 も含む
  3. データフォルダはボリュームとしてホストのディレクトリを利用できる
  4. ログ、コンフィグ、一時ファイルはボリュームにして永続化できる
  5. 新しいバージョンをコンテナで提供しても以前の環境が残る
  6. SSL https を提供する
  7. SSL キーはボリュームで提供する(=コンテナに含まず交換ができる)

こんなところ。

制作

Debian/wheezy をベースに backports を利用して、ownCloud 7.0.2 のパッケージをインストールする。

Dockerfile

最終的にこんな感じに

Dockerfile
FROM debian:wheezy
MAINTAINER rerofumi

RUN echo 'deb http://ftp.jp.debian.org/debian/ wheezy main' > /etc/apt/sources.list
RUN echo 'deb http://ftp.jp.debian.org/debian/ wheezy-updates main' >> /etc/apt/sources.list
RUN echo 'deb http://security.debian.org/ wheezy/updates main' >> /etc/apt/sources.list
RUN echo 'deb http://ftp.jp.debian.org/debian/ wheezy-backports main contrib non-free' >> /etc/apt/sources.list
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update; \
    apt-get -y upgrade; \
    apt-get -y dist-upgrade; \
    apt-get -y -t wheezy-backports upgrade; \
    apt-get -y -t wheezy-backports dist-upgrade; \
    apt-get -y -t wheezy-backports install owncloud sqlite3 php5-sqlite php5-mysql; \
    apt-get clean; \
    rm -rf /var/lib/apt/lists/*

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2

ADD owncloud.conf /etc/apache2/sites-available/
RUN rm -rf /etc/owncloud/*
RUN mkdir -p /etc/ssl/local
RUN a2enmod ssl
RUN a2enmod rewrite
RUN a2enmod headers
RUN a2ensite owncloud.conf

VOLUME ["/etc/owncloud","/etc/ssl/local","/var/lib/owncloud/data","/var/lib/php5","/var/log/apache2"]

EXPOSE 443
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

apache を含んだアプリは大体こんな感じでテンプレート化してきた感じ。

apache 設定

Dockerfile の途中で Add している apache 設定は以下のような感じで

owncloud.conf
<IfModule mod_ssl.c>
<VirtualHost _default_:443>

  SSLEngine on
  SSLCertificateFile    /etc/ssl/local/mykey.crt
  SSLCertificateKeyFile /etc/ssl/local/mykey.key

  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
  ErrorLog ${APACHE_LOG_DIR}/ssl_error.log

  <FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
  </FilesMatch>

  Alias /owncloud /usr/share/owncloud
  <Directory /usr/share/owncloud>
    Options FollowSymLinks
    <IfModule mod_php5.c>
      php_flag register_globals off
    </IfModule>
    <IfModule mod_dir.c>
      DirectoryIndex index.php
    </IfModule>

  </Directory>

  BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

SSL鍵とかログとかのパスを、Dockerfile のボリュームに合わせる。

ホスト側の環境

Dockerfile の VOLUME を見るとわかるように、5つのホスト側ディレクトリをボリュームとしてマウントしてあげる必要があります。
この中では SSL鍵の /etc/ssl/local 以外は設定しなくてもコンテナの UnionFS 内のものを利用しますので起動させることができます。逆に言うと SSL鍵を用意してボリュームとしてマウントしないとこのコンテナは起動しません。

Dockerコンテナ起動用を fig で行う場合、fig.yml は以下の様になります。

fig.yml
owncloud:
  image: rerofumi/owncloud
  volumes:
    - /var/opt/container/owncloud/data:/var/lib/owncloud/data
    - /var/opt/container/owncloud/log:/var/log/apache2
    - /var/opt/container/owncloud/key:/etc/ssl/local
    - /var/opt/container/owncloud/session:/var/lib/php5
    - /var/opt/container/owncloud/config:/etc/owncloud
  ports:
    - 8089:443

この例ではコンテナ用のボリュームを /var/opt/container/owncloud/ にまとめてあります。

注意事項

上記 fig では port 8089 にバインドしているので、起動したあとは https://llocalhost:8089/owncloud/ にアクセスすると、コンテナ内の ownCloud にアクセスできます。
/owncloud/ をつけるのを忘れないで下さい。

9
9
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
9
9