centOSでubuntu環境のテストをするDocker

Dockerを使って実現します。

DockerはVMwareVirtualBoxの用に仮想環境を作れるツールです。

詳しくはdockerで検索してください。わかりやすい記事がたくさん出てきます。

第8回Jenkins勉強会で「Jenkins with Docker」というLTをしました #jenkinsstudy - Yahoo! JAPAN Tech Blog

これから始める「DockerでかんたんLAMP環境 for CentOS」 - さくらのナレッジ

やりたいことは

  1. dockerでubuntuの仮想環境を作る
  2. その仮想環境でテストの実行する

です。

Dockerをインストール

# epelのレポジトリを追加
wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo rpm -ivh epel-release-6-8.noarch.rpm


# yumからインストール
$ sudo yum -y install docker-io
$ sudo service docker start

Ubuntuのイメージを取得

# ubuntuのイメージを取得
$ sudo docker pull ubuntu

# ついでにcentosのイメージを取得
$ sudo docker pull centos

Dockerfileの作成

デフォルトのubuntuのイメージではrubyが使えないので、rubyをインストールしたubuntuイメージを作成します。

ubuntu用のDockerfile

$ vim ubuntu-13.10/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

vim centos-6.4/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 gcc -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

RUN yum install gcc-c++ -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 build -t kashi/centos-6.4 ./centos-6.4/ 

イメージの確認

$ 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環境にログイン

ログイン

$ sudo docker run -i -t kashi/ubuntu-13.10 /bin/bash

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

bash: ruby: command not found

rbenvの設定をする

# eval "$(rbenv init -)"

# rbenv local 2.1.1

# ruby -v

ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux

 rubyも使えました!

ちなみに一度ログアウトするとコンテナが破棄されるので、rbenvを設定する前の状態に戻ります。

ログアウトする
# exit

exit

ログインしなおす

$ sudo docker run -i -t kashi/ubuntu-13.10 /bin/bash

rbenvを設定する前の状態になっている

# ruby -v

bash: ruby: command not found

※ログインとかログアウトは馴染みやすいので勝手にそう言ってます。

 

設定を保持しておきたいなら、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も一緒に使うともっと便利で、自動で環境を作ってテストしてくれます。

f:id:katashiyo515:20140413223311j:plain

疑問点

作った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でビルド)

CentOS 6.5 で Docker を使ってみる | CUBE SUGAR STORAGE

CentOSにEPELリポジトリを追加する - Qiita

Docker基礎+docker0.9, 0.10概要