見出し画像

はじめましてDockerfile―風邪で頭痛いけど公式サイトをdocker化した

監督兼インフラ担当の井二かけるです。

この一週間風邪でダウンしておりました。そのせいで本業の業務が山積み状態ですが、こうしす!の作業も山積み状態です。

ただ、公式サイトのMediaWikiをいつまでも古いバージョンで動かしておくのはセキュリティ上好ましくないため、本業が忙しくなる前の今のタイミングでアップデートしようと思いました。

ただ、MediaWikiって割と色々依存関係があって、git pullやっとけば簡単にアップデートできるやろという代物ではないというのが厄介なところです。だいたい何かでトラブるんですよね。いつも。

今回もご多分に漏れず依存関係とかでエラーが出て解決に3時間ぐらいかかったので、いっそdockerで再構築してしまえ、ということでdocker化してみることにしました。

dockerなら依存関係とかだいたいクリアされた状態の物を入手できるはずですからね。

というわけで、初めてのDockerfile。

FROM mediawiki:stable
MAINTAINER OPAP-JP <[censored]>

WORKDIR /var/www/html/extensions

RUN git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/APC.git && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/CSS.git && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Configure.git && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/DeleteBatch.git && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Drafts.git && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/DynamicPageList.git && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/LdapAuthentication.git && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/WebChat.git && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Widgets.git && \
    git clone --depth 1 --recursive https://github.com/tinymighty/wiki-seo.git WikiSEO && \
    git clone --depth 1 --recursive https://gerrit.wikimedia.org/r/p/mediawiki/extensions/YouTube.git && \
    git clone --depth 1 --recursive https://github.com/DaSchTour/piwik-mediawiki-extension.git Piwik && \
    chown -R www-data:www-data .

ADD 000-default.conf /etc/apache2/sites-available/
RUN a2enmod rewrite && a2enmod remoteip

WORKDIR /var/www/html

RUNでコマンドを&&で繋ぎまくるの、レイヤー数制限の関係で仕方ないとはいえ、個人的には何か変な印象を受けます。コマンド毎に一々レイヤーを作るのではなく、任意のタイミングでCOMMIT的なコマンドでレイヤーを作るような感じにしたほうが……などと考えてしまいますが、まぁ、それはdockerの美学に反することなんでしょうね……。

とにもかくにも、公式サイトのwikiは現在はdocker上で動いています。何か不具合を見つけたらお知らせください。

今後の課題

◇バージョン管理
そのうち、Dockerfileをバージョン管理するプライベートリポジトリや、イメージを置くプライベートレジストリとかもそのうち準備しないといけないかなぁと思っています。GitLab.comを使うのもありかな?

◇kubernetesへの移行
kubernetesが世の中の主流になりつつありますが、今はお手軽にdocker-composeでやっています。ベストプラクティスとか完全に無視して、設定ファイル・永続化データ類はローカルファイル・ディレクトリを参照させています。でも、最終的にはkubernetesに移行する予定です。……全然分かりませんが。色々勉強しなければ!

◇チューニング
どうせPV数もほとんどないのでノーチューニングでやってますが、本来はどうスケールさせるかみたいなチューニングも必要なんでしょうね。これはk8sへの移行後に考えたら良さそう?