インフラブログ

とあるWEBサイトのインフラを構築運用するメモ

Docker環境でRailsを起動するところまで確認する

作業確認流れ

  • プライベートなDocker registry(S3 backed)を用意する。
  • registryのWEBUIを用意する。
  • 手元のmacでdockerが動くようにする。
  • 既存のrailsアプリをDockerイメージ化してregistryにpushする。
  • Dockerまで動く状態の別の端末からRailsアプリのイメージをpullしてRailsを起動する。

プライベート registryを作る。

プライベートregistryを用意して、開発用のmacでdocker-registryをpullできるようにする。

下記、repos.example.comサーバで行う。

docker-registry

/etc/hosts

127.0.0.1 repos.example.com
  • docker起動
#/etc/init.d/docker start
  • registryコンテナ起動
$ sudo docker run \
         -e SETTINGS_FLAVOR=s3 \
         -e AWS_REGION=ap-northeast-1 \
         -e AWS_BUCKET=example-docker-repos \
         -e AWS_KEY=**** \
         -e AWS_SECRET=**** \
         -p 5000:5000 \
         registry \
  • registryコンテナをイメージ化
$ docker commit desperate_pare docker-regisrty-s3

desperate_pareはコンテナ起動時に付けられたコンテナ名

  • タグをつけてpushする
$ docker tag 80078c2afa84 repos.example.com:5000/docker-regisrty-s3
$ docker push repos.example.com:5000/docker-regisrty-s3

docker-registry-frontend

ブラウザでregistryを閲覧検索できるようにする。

docker-front.sh

#!/bin/sh
docker run \
  -d \
  -e ENV_DOCKER_REGISTRY_HOST=172.17.42.1 \
  -e ENV_DOCKER_REGISTRY_PORT=5000 \
  -p 8000:80  \
  konradkleine/docker-registry-frontend \

HOSTは127.0.0.1ではだめでdocker registryのIPである172.17.42.1を指定する。

  • リバースプロキシ設定追加
<VirtualHost _default_:443>

  ProxyPass / http://localhost:8000/
  ProxyPassReverse / http://localhost:8000/

</VirtualHost>
  • 確認

https://repos.example.com/#/repositories

開発用端末のセットアップ

TODO vagrant upでできるようにしたい

VirtualBoxインストール

boot2dockerインストール

$ boot2docker init

$ boot2docker up

$ boot2docker ssh

$ cat /var/lib/boot2docker/profile

DOCKER_TLS=no
EXTRA_ARGS="--insecure-registry repos.example.com:5000 --insecure-registry 192.168.59.103:5000 --insecure-registry dockerhost:5000"

$ exit

$ boot2docker shellinit >> ~/.zshrc

    export DOCKER_HOST=tcp://192.168.59.103:2375
    unset DOCKER_CERT_PATH
    unset DOCKER_TLS_VERIFY

$ source ~/.zshrc

$ boot2docker restart

  • VirtualBoxの設定からポートフォワードの追加

docker-registryをローカルのtcp:5000で立ち上げるため、ポートフォワードを追加する。

127.0.0.1:5000 -> 5000

docker-registryの取り込みと起動

$ docker run -d -p 5000:5000 repos.example.com:5000/docker-regisrty-s3:latest

registryを通してS3にテストイメージをpush

$ rails new sample_rails

$ echo "FROM rails:onbuild" > Dockerfile

$ docker build -t localhost:5000/sample_rails .

$ docker images

  REPOSITORY                                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
  localhost:5000/sample_rails                latest              fa7eb42f096e        17 hours ago        933.4 MB

$ docker push localhost:5000/sample_rails

S3で確認する

mac端末上でアプリをpullしてそのまま起動する。

前提

  • boot2dockerが動いている。
  • VirtualBoxの設定でtcp5000-tcp5000のポートフォワード設定がされている。

docker-registry起動

$ docker -run -p 5000:5000 repos.example.com:5000/docker-regisrty-s3 $ docker ps

CONTAINER ID        IMAGE                                             COMMAND             CREATED             STATUS              PORTS                    NAMES
b7f754807953        repos.example.com:5000/docker-regisrty-s3:latest   "docker-registry"   16 seconds ago      Up 11 seconds       0.0.0.0:5000->5000/tcp   clever_bardeen

pull

$ docker pull localhost:5000/sample_rails

rails起動

$ docker run localhost:5000/sample_rails

[2014-12-19 07:06:37] INFO  WEBrick 1.3.1
[2014-12-19 07:06:37] INFO  ruby 2.1.5 (2014-11-13) [x86_64-linux]
[2014-12-19 07:06:37] INFO  WEBrick::HTTPServer#start: pid=1 port=3000