ヽ(´・肉・`)ノログとDocker

author niku date 2015/07/10 allotted-time 15m

タイトルずれました

∧_∧         ミ ギャハッハッ ズレてる!ズレてる!
     o/⌒(. ;´∀`)つ
     と_)__つノ  ☆ バンバン

∧_∧
     o/⌒(゜Д゜ )つ
     と_)__つノ

∧_∧
     o/⌒( ゚д゚ )つ
     と_)__つノ

自己紹介

自己紹介

今日話すこと

どうやって表示しているか

  構成 :      Debian - Apache - Rack - 独自アプリケーション nwiki - コンテンツ nikulog

つらみ

つらみ

つらみ対策

プロビジョニングツール

つらみ対策

わかれていると管理しやすいのでは

つらみ対策

Dockerイメージを載せるサーバー

さくらVPSにDebian8をインストールして,コマンドを手で打ちました

$ sudo update-locale LANG=C.UTF-8
$ sudo sh -c "echo 'deb http://ftp.jp.debian.org/debian jessie-backports main' \
> /etc/apt/sources.list.d/jessie-backports.list"
$ sudo apt-get update
$ sudo apt-get install -y docker.io

Docker

  構成 :      Debian - Apache - Rack - 独自アプリケーション nwiki - コンテンツ nikulog

Docker

  構成 :      Debian - Apache - Rack - 独自アプリケーション nwiki - コンテンツ nikulog
       :             |                                            |
Docker : niku/debian | niku/nwiki                                 | niku/nikulog

niku/debian

niku/debian

OS イメージ作成,サーバー起動,サーバーログイン

% git clone https://github.com/niku/uti.git
% cd uti/share/lib/server/host/
uti/share/lib/server/host% packer build jessie64.json
uti/share/lib/server/host% vagrant up
uti/share/lib/server/host% vagrant ssh

niku/debian

Debianサーバー内でDockerイメージ生成,DockerHubへpush

$ uname -a
Linux packer-virtualbox-iso-1430355314 3.16.0-4-amd64 #1 SMP \
Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) x86_64 GNU/Linux
$ cat /etc/debian_version
8.0
$ sudo sh -c 'echo "deb http://ftp.jp.debian.org/debian sid main" > /etc/apt/sources.list.d/sid.list'
$ sudo apt-get update
$ sudo apt-get install -y docker.io git debootstrap
$ git clone https://github.com/docker/docker.git
$ sudo docker/contrib/mkimage.sh \
--dir debian-image \
--tag niku/debian \
debootstrap --variant=minbase \
jessie http://ftp.jp.debian.org/debian
$ cd debian-image
$ sudo docker login --username="niku" --email="my_email_address@example.com" --password="my_password"
$ sudo docker push niku/debian

niku/nwiki

AutomatedBuild

niku/nwiki

やりかた

niku/nwiki

やりかた

niku/nwiki

nwiki/Dockerfile

FROM niku/debian
MAINTAINER niku

RUN apt-get update && \
    apt-get -y install build-essential \
    ruby2.1-dev \
    cmake \
    pkg-config \
    git \
    apache2 \
    libapache2-mod-passenger && \
    echo "(設定ファイルの内容)" > /etc/apache2/sites-available/nwiki.conf && \
    a2dissite 000-default && \
    a2ensite nwiki && \
    git clone https://github.com/niku/nwiki.git /var/www/nwiki && \
    cd /var/www/nwiki && gem install bundler && bundle install

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

niku/nikulog

同様にAutomatedBuildを利用

niku/nikulog

nikulog/Dockerfile

FROM niku/nwiki
MAINTAINER niku

RUN git clone https://github.com/niku/nikulog /var/www/nikulog && \
    cd /var/www/nikulog && \
    git checkout config && \
    git checkout master && \
    git fetch && \
    git reset --hard origin/master && \
    echo "(設定ファイルの内容)" > /var/www/nwiki/config.ru && \
    mkdir -p /var/www/nikulog/tmp && \
    touch /var/www/nikulog/tmp/restart.txt

サーバーとイメージ準備完了

$ sudo docker pull niku/nikulog:latest
$ sudo docker run --publish 80:80 --name nikulog -d niku/nikulog

で表示できるようになった (^o^)/

niku.name 更新のしくみ

更新は? ∑(゚□゚;)

niku.name 更新のしくみ

Docker導入以前

git
 |
 | Push
 |
niku.nameのgit
 |
 | gitのhookスクリプト
 |
github (niku/nikulog)

niku.name 更新のしくみ

参考にした

niku.name 更新のしくみ

Docker導入後

git
 |
 | Push
 |
github (niku/nikulog)
 |
 | githubのWebhook
 |
Dockerhub (niku/nikulog)
 |
 | DockerimageのAutomatedBuild
 | DockerhubのWebhook
 |
niku.nameのとあるポート
 |
 | (docker pull して再起動)
 |
niku/nikulog 最新のdocker

niku.name 更新待受

niku.name 更新待受

Webhook待受サーバー

niku.name 更新待受

サーバーに追加でアプリケーションを入れたくない

niku.name 更新待受

ErlangVM同梱HTTPサーバーの作りかた

niku.name 更新待受

更新用設定ファイル

% cat configdir/refresh-nikulog.json
{
    "scripts": [
        {
            "command": "sudo",
            "args": ["docker", "pull", "niku/nikulog:latest"]
        },
        {
            "command": "sudo",
            "args": ["docker", "kill", "nikulog"]
        },
        {
            "command": "sudo",
            "args": ["docker", "rm", "nikulog"]
        },
        {
            "command": "sudo",
            "args": ["docker", "run", "--publish", "80:80", "--name", "nikulog", "-d", "niku/nikulog"]
        }
    ]
}

niku.name 更新待受

git
 |
 | Push
 |
github (niku/nikulog)
 |
 | githubのWebhook
 |
Dockerhub
 |
 | DockerimageのAutomatedBuild
 | DockerhubのWebhook
 |
niku.nameのとあるポート
 |
 | (docker pull して再起動)
 |
niku/nikulog 最新のdocker

その他/話せなかったこと1

その他/話せなかったこと2

まとめ