centOSでubuntu環境のテストをするDocker
Dockerを使って実現します。
DockerはVMwareやVirtualBoxの用に仮想環境を作れるツールです。
詳しくはdockerで検索してください。わかりやすい記事がたくさん出てきます。
第8回Jenkins勉強会で「Jenkins with Docker」というLTをしました #jenkinsstudy - Yahoo! JAPAN Tech Blog
これから始める「DockerでかんたんLAMP環境 for CentOS」 - さくらのナレッジ
やりたいことは
- dockerでubuntuの仮想環境を作る
- その仮想環境でテストの実行する
です。
Dockerをインストール
Ubuntuのイメージを取得
Dockerfileの作成
デフォルトのubuntuのイメージではrubyが使えないので、rubyをインストールしたubuntuイメージを作成します。
ubuntu用のDockerfile
# ubuntu
FROM ubuntu:13.10
# author
MAINTAINER kashifuji
# workspace
WORKDIR /home/jenkins/docker/
# env
ENV HOME /home/jenkins/docker/
ENV PATH $PATH:/home/jenkins/docker/.rbenv/bin
# install git
RUN sudo apt-get install git-core -y
RUN sudo apt-get install curl -y
RUN sudo apt-get install gcc -y
RUN sudo apt-get install build-essential -y
RUN sudo apt-get install libssl-dev -y
# install rbenv
RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
RUN eval "$(rbenv init -)"
RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
RUN cd ~/.rbenv/plugins/ruby-build/; pwd; ./install.sh
RUN rbenv install 2.1.1
# for rails
RUN sudo apt-get install libsqlite3-dev -y
# added test file
ADD test.sh /home/jenkins/docker/test.sh
centOS用のDockerfile
# centos
FROM centos:6.4
# author
MAINTAINER kashifuji
# workspace
WORKDIR /home/jenkins/docker/
# env
ENV HOME /home/jenkins/docker/
ENV PATH $PATH:/home/jenkins/docker/.rbenv/bin
# install git
RUN yum install git -y
RUN yum install openssl-devel openssl -y
# install rbenv
RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
RUN eval "$(rbenv init -)"
RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
RUN cd ~/.rbenv/plugins/ruby-build/; pwd; ./install.sh
RUN rbenv install 2.1.1
# for rails
RUN yum install sqlite-devel -y
# added test file
ADD test.sh /home/jenkins/docker/test.sh
イメージの作成
ubuntuテスト環境のイメージの作成
sudo docker build -t kashi/ubuntu-13.10 ./setup/ubuntu-13.10/
centosテスト環境のイメージの作成
イメージの確認
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
kashi/centos-6.4 latest 3741fb61bea0 26 minutes ago 905.5 MB
kashi/ubuntu-13.10 latest 64097b639bf1 39 minutes ago 490.6 MB
ちゃんとイメージができています。
ubuntu環境にログイン
ログイン
OSを確認する
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.10
Release: 13.10
Codename: saucy
Ubuntuです!
rubyも使えるか確認
rbenvの設定を何もしてないのでrubyがないと怒られる
# ruby -v
rbenvの設定をする
# eval "$(rbenv init -)"
# rbenv local 2.1.1
# ruby -v
rubyも使えました!
ちなみに一度ログアウトするとコンテナが破棄されるので、rbenvを設定する前の状態に戻ります。
ログアウトする
# exitexit
ログインしなおす
$ sudo docker run -i -t kashi/ubuntu-13.10 /bin/bash
rbenvを設定する前の状態になっている
# ruby -v
※ログインとかログアウトは馴染みやすいので勝手にそう言ってます。
設定を保持しておきたいなら、Dockerfileに書くか、commitをしてイメージにすると可能です。
# docker commit CONTAINER ID レポジトリ
$ sudo docker commit 3b45d4eef673 kashi/ubuntu-13.10
CONTAINER IDはログイン中にdocker psを実行するかdocker ps -aで調べられます。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b45d4eef673 kashi/ubuntu-13.10:latest /bin/bash 6 minutes ago Up 6 minutes hopeful_lumiere
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b45d4eef673 kashi/ubuntu-13.10:latest /bin/bash 7 minutes ago Up 7 minutes hopeful_lumiere
テストの実行
作成したイメージを使ってテストをします。
# ubuntu環境でテスト
sudo docker run -t -v `pwd`/:/var/volume:rw kashi/ubuntu-13.10 /bin/bash test.sh
# centOS環境でテスト
$ sudo docker run -t -v `pwd`/:/var/volume:rw kashi/centos-6.4 /bin/bash test.sh
↑のコマンドはこんな動きをしてます
1.kashi/ubuntu-13.10のイメージを使ってコンテナを作成
2.コンテナ内で/bin/bash test.shを実行
jenkinsも一緒に使うともっと便利で、自動で環境を作ってテストしてくれます。
疑問点
作ったimageファイルをpushできそうなんですが、どうやってpush先を設定するんだろう。。
あとCentOS6.5とかdocker searchででないOSは使えないのだろうか。。
参考
http://docs.docker.io/en/latest/installation/rhel/
第8回Jenkins勉強会で「Jenkins with Docker」というLTをしました #jenkinsstudy - Yahoo! JAPAN Tech Blog
Dockerを使ってJenkinsのジョブごとにテスト実行環境を分離する - orangain flavor
docker のボリュームオプションを使った(Amazon Linux で docker 使えた!) - ようへいの日々精進 XP
memorycraft: Dockerってなんじゃ?(Dockerfileでビルド)