~Dockerfileの開発を劇的に楽にする~
Dockerfile開発環境 EDGE
斎藤辰徳
1
TIS株式会社
IT基盤エンジニアリング第1部
斎藤辰徳
(さいとう・たつのり)
HN: bbrfkr
(ビビリフクロウ)
2
趣味
3
サーバ構築
4
5
よろしく
お願いします!
6
ここから本題
7
8
Dockerおよびコンテナ
を使うメリット
9
• ホストの環境を汚さない
• 迅速にアプリが起動
• 高いポータビリティ
10
便利なものは
活用しない手はない!
11
コンテナイメージの作成には
Dockerfileを使う
12
Dockerfileから
コンテナイメージができるまで
13
1. Dockerfileを書く/修正する
2. docker buildコマンドを叩く
3. イメージからコンテナを起動
4. 期待したコンテナであるかテスト
5. 1.-4.を繰り返す
14
2. docker buildコマンドを叩く
毎回以下を叩きますか?(ブルゾン風)
# docker build -t bbrfkr0129/test 
> --build-arg key1=value1 
> --build-arg key2=value2 
> --build-arg key3=value3 
> --build-arg key4=value4 
> --build-arg key5=value5
新しいツール、欲しくない?
15
4. 期待したコンテナであるかテスト
# docker build -t bbrfkr0129/httpd
# docker run -d --name test bbrfkr0129/httpd
# docker exec -it test /bin/bash
# ps –ef
# cat /etc/httpd/conf/httpd.conf
# exit
# docker rm -f test
# (修正作業)
# docker build –t bbrfkr0129/httpd
# docker run -d --name test bbrfkr0129/httpd
# docker exec -it test /bin/bash
# ps –ef
# cat /etc/httpd/conf/httpd.conf
# exit
# docker rm -f test
…
テストのたびに
これを叩くのか…
16
# docker build -t bbrfkr0129/test --build-arg key1=value1 --build-arg
key2=value2 --build-arg key3=value3 --build-arg key4=value4 --build-arg
key5=value5
# docker run -d --name test bbrfkr0129/test
# docker exec -it test /bin/bash
# ps -ef
# cat /etc/httpd/conf/httpd.conf
# exit
# docker rm -f test
# (修正作業)
# docker build -t bbrfkr0129/test --build-arg key1=value1 --build-arg
key2=value2 --build-arg key3=value3 --build-arg key4=value4 --build-arg
key5=value5
# docker run -d --name test bbrfkr0129/test
# docker exec -it test /bin/bash
# ps -ef
# cat /etc/httpd/conf/httpd.conf
# exit
# docker rm -f test
17
や
っ
て
ら
れ
っ
か
い
!
18
そんな思いを解消するべく…
19
Dockerfile開発環境を
作っちゃいました♪
20
EDGE
(Elastic Dockerfie Generating Environment)
21
使い方
22
1. テストコードを書く
require './.spec_helper'
describe ("build_test") do
describe ("check pip packages are installed") do
pips = ["ansible"]
describe command("source /root/.bash_profile && pip list") do
pips.each do |pip|
describe ("#{ pip }") do
pip_ver = property['args'][pip.upcase.gsub("-","_") + '_VER']
if pip_ver != nil
its(:stdout) { should match /^#{ pip }s(.*#{ Regexp.escape(pip_ver) }.*)$/ }
else
its(:stdout) { should match /^#{ pip }s(.*)$/ }
end
end
end
<省略>
Serverspecを使うため
Serverspecの規則に則って
書く
23
2. Dockerfileを書く
FROM centos:7.3.1611
WORKDIR /root
# install ansible
RUN yum -y install gcc python-devel openssl-devel libffi-devel
RUN curl -o /tmp/get-pip.py https://bootstrap.pypa.io/get-pip.py
RUN python /tmp/get-pip.py
ARG ANSIBLE_VER
RUN if [ "$ANSIBLE_VER" = "" ] ; then 
pip install ansible ; 
else 
pip install ansible==$ANSIBLE_VER ; 
fi
<省略>
24
3. ビルド変数をiniファイルで定義
image=edge_test/build_test:latest
[args]
ROOT_PASS=password
ANSIBLE_VER=2.0.0.0
RUBY_VER=2.3.1
ITAMAE_VER=1.9.9
SERVERSPEC_VER=2.37.0
INFRATASTER_VER=0.3.1
DOCKER_API_VER=1.29.0
DOCKER_COMPOSE_VER=1.11.1
25
4. イメージビルドの実行
# Bin/edge build build_test
26
5. イメージテストの実行
# Bin/edge spec build_test
27
# docker build -t bbrfkr0129/test --build-arg key1=value1 --build-arg
key2=value2 --build-arg key3=value3 --build-arg key4=value4 --build-arg
key5=value5
# docker run -d --name test bbrfkr0129/test
# docker exec -it test /bin/bash
# ps -ef
# cat /etc/httpd/conf/httpd.conf
# exit
# docker rm -f test
# (修正作業)
# docker build -t bbrfkr0129/test --build-arg key1=value1 --build-arg
key2=value2 --build-arg key3=value3 --build-arg key4=value4 --build-arg
key5=value5
# docker run -d --name test bbrfkr0129/test
# docker exec -it test /bin/bash
# ps -ef
# cat /etc/httpd/conf/httpd.conf
# exit
# docker rm -f test
28
# Bin/edge build test
# Bin/edge spec test
# (修正作業)
# Bin/edge build test
# Bin/edge spec test
楽!
すっきり!
29
いかがでしたでしょうか?
30
試してみたい方
詳細な使い方を見たい方は
以下のURLをチェック!!
https://github.com/bbrfkr/edge
おわり

~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE