CoreOSで作るローカルの開発環境 このエントリをはてなブックマークに登録

2015年02月04日

ダニーダニー

はじめに

ローカルで開発してる時にMacに直接環境を作って開発してる方が多いかと思います。
自分も前はそうしてたのですが、特定のバージョンじゃないとうまくビルドできないライブラリや特定の条件の動作環境を用意したりするのがやりずらかったので、VMのLinux上で開発するようになりました。
それに加えて最近はDocker使って複数のマシンで同じ開発環境をすぐ用意したり壊したりできる仕組みにしています。
今回はその辺のことを書きます。

CoreOSとは

https://coreos.com

Dockerのコンテナを動かす用途に特化したOSです。
なので、余計な機能があまり入ってなくて良いです。

VirtualBoxのインストール

まず、CoreOSを動かすのにVirtualBoxをインストールします。

ここからダウンロードしてインストールします。

https://www.virtualbox.org/wiki/Downloads

Vagrantのインストール

CoreOSをVMにインストールする手間を省くために、Vagrantをここからダウンロードしてインストールします。

https://www.vagrantup.com/downloads.html

Vagrant Cloudで他の人が作成した、共有されてるOSのインストール済みのイメージを使うことができます。

vagrant init yungsang/coreos

これでVagrantfileが生成されます。
VirtualBoxで動かすCoreOSのipを固定するのにVagrantfileのコメントアウトを外しておきます。

# config.vm.network "private_network", ip: "192.168.33.10"

config.vm.network "private_network", ip: "192.168.33.10"

作成するDockerのコンテナ

CoreOS上で動かすコンテナをセットアップするDockerfileを作成します。
今回は以下の内容のコンテナを作成します。

  • CentOS 7
  • Rubyがインストールされる
  • MariaDBがインストールされる
  • appという名前でユーザーが作成される
  • 開発によく使うパッケージがインストールされる

Dockerfile


FROM centos:centos7
MAINTAINER danny

# timezone
RUN rm /etc/localtime
RUN ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# locale
RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

# epel
RUN rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

# remi
RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# user
RUN useradd app
RUN yum -y install sudo
RUN echo "app ALL=(ALL) ALL" > /etc/sudoers.d/app
RUN echo 'app:app' | chpasswd
RUN echo "export LANG=ja_JP.UTF-8" >> /home/app/.bashrc
RUN mkdir /home/app/.ssh
RUN chmod 700 /home/app/.ssh
RUN touch /home/app/.ssh/config
RUN chmod 600 /home/app/.ssh/config
RUN chown -R app:app /home/app/.ssh

# sendmail
RUN yum -y install sendmail

# dev package
RUN yum install -y bind-utils tar make libxml2-devel libxslt-devel libcurl-devel ImageMagick-devel

# ssh
RUN yum -y install openssh-server
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

# mariadb
RUN yum install -y mariadb mariadb-server mariadb-devel
RUN mysql_install_db --user=mysql --ldata=/var/lib/mysql/

# devtools
RUN yum install -y gcc gcc-c++ zsh screen emacs-nox git
RUN chsh app -s /bin/zsh

# dotfiles
RUN cd /home/app && git clone https://github.com/f96q/dotfiles.git
RUN chown -R app:app /home/app/dotfiles
RUN su - app -c 'cd /home/app/dotfiles && sh setup.sh'

# ruby
RUN yum remove ruby
RUN yum -y install libyaml openssl

ENV RUBY_RPM ruby-2.2.0-1.el7.centos.x86_64.rpm
ADD ${RUBY_RPM} /tmp/
RUN rpm -ihv /tmp/${RUBY_RPM}
RUN rm /tmp/${RUBY_RPM}
RUN gem install bundler

ADD start.sh /start.sh
RUN chmod 755 /start.sh

ソースはここにおいてあります。

https://github.com/f96q/centos-ruby-mariadb

DockerHub

DockerHubは自分で作ったDockerのコンテナのイメージをホスティングしてくれるサービスです。
先ほどのDockerfileをGitHubのリポジトリにおいておき、DockerHubでそのリポジトリを指定するとDockerfileをビルドしてDockerのコンテナのイメージを作成してくれます。

dockerhub

使ってみる

CoreOSのVMに入る

$ vagrant up
$ vagrant ssh

CentOSのコンテナを起動する

$ docker pull f96q/centos-ruby-mariadb
$ docker run -t -i -d -p 2222:22 -p 3000:3000 f96q/centos-ruby-mariadb /start.sh

docker pullでDockerHubでビルドしたコンテナのイメージを取得できます。
SSHして開発する関係でホストOSの2222番をコンテナの22番とポートフォワードしてます。
Railsで開発する関係でホストOSの3000番をポートフォワードしてます。

コンテナのCentOSにsshする

ホストOSのターミナルからsshでパスワードがappで入れます。

$ ssh -p 2222 app@192.168.33.10

最後に

ローカルの開発環境でもDockerを使うことで、同じ開発環境をすぐ用意したり壊したりできるのが便利なところだと思います。

宣伝

top

チームのための情報共有サービス DocBase がベータ公開中で無料で使えます。

DocBaseとは

DocBaseは、1人の知識がチーム全員の知識となり、チームが力を最大限発揮できるようにするための情報共有サービスです。

DocBaseはドキュメント共有のためだけのツールではありません。
メモという形で、様々な情報をチームに共有できます。気になるニュースやブログをブラウザから簡単に共有したり、ビジュアルイメージを展開したり、参考となるスライドや動画を共有したりできます。

詳しくはこちらから。
http://kray.jp/news/docbase_beta

クレイについてもっと知りたい方は…

  1. クレイの3つの強みを見てみる。
  2. WEBシステムのことなら何でもご相談ください。

「いいね!」で応援よろしくお願いします!

このエントリーに対するコメント

コメントはまだありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


トラックバック

we use!!Ruby on RailsAmazon Web Services

このページの先頭へ