はじめに
ローカルで開発してる時にMacに直接環境を作って開発してる方が多いかと思います。
自分も前はそうしてたのですが、特定のバージョンじゃないとうまくビルドできないライブラリや特定の条件の動作環境を用意したりするのがやりずらかったので、VMのLinux上で開発するようになりました。
それに加えて最近はDocker使って複数のマシンで同じ開発環境をすぐ用意したり壊したりできる仕組みにしています。
今回はその辺のことを書きます。
CoreOSとは
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のコンテナのイメージを作成してくれます。
使ってみる
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を使うことで、同じ開発環境をすぐ用意したり壊したりできるのが便利なところだと思います。
宣伝
チームのための情報共有サービス DocBase がベータ公開中で無料で使えます。
DocBaseとは
DocBaseは、1人の知識がチーム全員の知識となり、チームが力を最大限発揮できるようにするための情報共有サービスです。
DocBaseはドキュメント共有のためだけのツールではありません。
メモという形で、様々な情報をチームに共有できます。気になるニュースやブログをブラウザから簡単に共有したり、ビジュアルイメージを展開したり、参考となるスライドや動画を共有したりできます。
詳しくはこちらから。
https://kray.jp/news/docbase_beta
このエントリーに対するコメント
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)
- トラックバック
「いいね!」で応援よろしくお願いします!