SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Downloaden Sie, um offline zu lesen
GMO プライベート DMP 開発で 
取り組んできた DevOps と今後の展望 
GMO インターネット株式会社 
次世代システム研究室 
山邉 哲生 
1
2 http://pr.gmopdmp.jp
4 
今回のお話は 
GMO プライベート DMP 開発の裏側
5 
① GMO プライベート DMP 開発初 
期に取り組んだこと 
② 実開発の中で明確になった問題点 
③ 今、取り組み始めたこと 
開発着手 
3月くらい 
       ∧_∧ 
   ∧_∧  (́<_`  )  
( ́_ゝ`) /   ⌒i 
/   \   | | 
/    /‾‾‾‾/ | 
__ (__ニつ / FMV / .| .|____ 
    \/____/ (u ⊃ 
イマココ! 
10月末 
リリース
GMO プライベート 
DMP 開発初期に 
取り組んだこと① 
6
7 
『ポータブルでモダンな開発環境の実現』
8 
էԺՙԳԷԯՊյՈԱ
9 
1. 開発者が自分だけの開発環境を持つこと 
ができる 
2. それぞれの開発環境は独立しており、 
個々の変更は互いに影響を及ぼさない
10
11 
誰かの環境が 
壊れても他の人は平気
12 
3. それぞれの開発環境は任意のタイミング 
で容易に最新化することができる 
4. 開発環境の構成・構築手順はステージン 
グ環境や本番環境のそれと何も変わらない
13 
ローカルから本番環境 
まで、リポジトリで管理さ 
れた同一手順で構築
14 
『個々人が、他者に影響されない 
本番環境と同じ構成の開発環境を持つ』
15
http://www.slideshare.net/beniyama/continuous-delivery-35944479 
16
ポータビリティ&一貫性 
17
https://www.docker.io/ 
18
19 
• Docker 社が Go 言語で開発した、コンテ 
ナ型の仮想環境を管理するためのツール 
• Yelp, Spotify, Baidu, Rackspace, 
ebay… 
• ハイパーバイザー型より軽量な仮想環境の 
実現(ホストからはプロセスとして見える) 
https://www.docker.com/resources/usecases/
VM 
アプリ 
ミドル 
ウェア 
アプリ 
ミドル 
ウェア 
ハイパーバイザー 
OS 
OS 
アプリ 
アプリ 
コンテナ管理ツール 
(Docker) 
VM 
OS 
コンテナ 
ミドル 
ウェア 
コンテナ 
ミドル 
ウェア 
20
21 
• Infrastructure as Code 
• Dockerfile というコードで記述できる 
• Immutable Infrastructure 
• 状態を保持しない”使い捨て”イメージ 
• 設計思想として1コンテナ1サービス 
• コンテナを維持するには常駐するプロ 
セスが必要
22 
Dockerfile 記述例 
! 
FROM centos 
MAINTAINER Tetsuo Yamabe 
! 
# Misc packages 
RUN yum groupinstall -y "Development Tools" 
RUN yum --enablerepo=epel,centosplus install -y rsyslog wget 
sudo passwd openssh openssh-server openssh-clients… 
! 
# User management 
RUN groupadd web 
RUN useradd -M -g web web 
…
23 
• Infrastructure as Code 
• Dockerfile というコードで記述できる 
• Immutable Infrastructure 
• 状態を保持しない”使い捨て”イメージ 
• 設計思想として1コンテナ1サービス 
• コンテナを維持するには何かしら常駐 
するプロセスが必要
Build 
Run Push 
Pull 
Stop 
24
25 
! 
Docker を支える要素技術 
! 
1. Namespaces 
2. Control groups 
3. Union file systems 
4. Container format 
https://docs.docker.com/introduction/understanding-docker/#what-is-dockers- 
architecture
26 
1. Namespaces (名前空間) 
• PID : プロセス ID (Linux 2.6.24 ~) 
• NET : ネットワーク (Linux 2.6.24 ~) 
• IPC : プロセス間通信 (Linux 2.6.19 ~) 
• MNT : マウント (Linux 2.4.19 ~) 
• UTS : ホスト名、ドメイン名など (Linux 
2.6.19 ~) 
http://lwn.net/Articles/531114/
27 
2. Control groups (コントロールグループ) 
• 通称 cgroup(s) 
• プロセスをグループ化して、それぞれに提 
供するリソースのコントロールを行う 
• CPU 時間、CPU コア 
• メモリ 
• デバイス etc
28 
3. Union file systems (UnionFS) 
異なる FS のファイ 
ル・ディレクトリを 
透過的に重ねて利用。 
! 
親は読み取り専用。 
https://docs.docker.com/terms/layer/
29 
4. Container format 
LXC (Linux 
Containers) から 
Docker 独自の 
libcontainer へ移行 
http://www.zdnet.com/docker-libcontainer-unifies-linux-container-powers- 
7000030397/
 GMO プライベート DMP 概観 
Hadoop エコシステム 
管理画面 
30
31 
Docker を使って初期開発を行ったもの 
1. 管理画面 
• Nginx + PHP + MariaDB 
2. Hadoop (CDH5) 
• Flume (+HDFS) 
3. RabbitMQ 
4. ファイルサーバー
32 
• Dockerfile による構成管理の記述が楽 
• 軽量なので必要なときに必要なイメージを 
手軽に起動して開発できる
33 
実開発の中で明確になっ 
た問題点②
34 
էԺԷժՊԽվՃՏ
35 
Dockerfile の 
ビルドがつらい
36 
• 外部から取得するファイルが多すぎて再ビ 
ルドに時間がかかる
37 
… 
RUN git pull 
RUN git checkout develop 
RUN git submodule init 
RUN git submodule update 
RUN php composer.phar self-update 
RUN php composer.phar update 
RUN npm install 
RUN grunt 
RUN php oil r install 
…
38 
• 気がつくとライブラリがバージョンアウト 
してリポジトリから消失 
• Dockerfile に記述しただけでは冪等性は保 
証できない
39 
Windows 
がつらい
40 
• Linux カーネルの機能を使う Docker は 
Win/Mac 直上では動かない 
• 一枚 VM をかまして動かす必要がある
コンテナコンテナコンテナコンテナ 
boot2docker boot2docker 
VM (Linux) VM (Linux) 
Windows Mac 
41
42 
• Docker というより Vagrant / VirtualBox 
を使う上での障壁が大きい 
• 64 bit イメージを動かすために BIOS 設定が 
必要、Vagrant / VirtualBox のバージョン差 
異に起因するエラーなどなど 
• 今は win 用の boot2docker インストーラが 
あるので楽になっている様子
43 
作業内容が 
消えそうでつらい
44 
• Immutable Infrastructure を体現する 
Docker は内部状態を永続的に保持しない 
• 作業スペースを外出し(マウント)してお 
かないと commit しない限り Docker の 
停止とともに消失する
45 
サブシステムも 
多いし 
分散環境が 
つらい
46 
• Git のリポジトリ(プロジェクト)数6つ 
• 常に最新の状態に保つための仕組みを作る 
余力がなかった 
• 共用の開発環境が出来てからは Hadoop 
がらみの開発は直接 on-server で行われ 
るようになっていった
47 
Docker の 
アンチパターンを 
理解していませんでした
48 
• ビルド済みのイメージではなく Dockerfile 
を配布してしまった 
• 複数のサービスを一つのコンテナに詰め込 
んでしまった (supervisord パターン) 
• 作業ディレクトリをホスト OS に外出しし 
ていなかった
Vagrant 
49 
環境構築を Ansible 化するに伴って 
Vagrant 環境へ移行 
Docker 
Nginx 
PHP 
FuelPHP 
MariaDB ! 
上記イメージ 
の環境構築 
(Dockerfile) 
Ansible 
Web と DB の構成管理 
DB マイグレーション 
VirtualBox 
Nginx 
PHP 
FuelPHP 
VirtualBox 
MariaDB 
移行
http://www.ansible.com/home 
50
51 
• Chef や Puppet に並ぶ構成管理ツール 
• YAML でデータをいじるので Python を意 
識しなくて良い 
• ほぼ全部入りでクライアントレス 
• 柔軟なディレクトリ構成
52 
• Web / DB を独立させて変更に強くなった 
• データが揮発しなくなった 
• Dockerfile に記述していた構築手順を 
Ansible に担わせることで、各種サーバへ 
のプロビジョニングを可能にできた
53 
• 重いので同時起動できる VM は限られる。 
ノート PC での開発がたまに辛い。 
• Win の敷居はまだまだ高い 
• box ファイルの作成・取得・差し替えの手 
間が割と大きいので、一度配布されたイメー 
ジとマスターの乖離が大きくなりがち 
(DB スキーマ含む)
54 
③ 今、取り組み始めたこと
55 
これを 
Vagrant 
Ansible 
Web と DB の構成管理 
DB マイグレーション 
VirtualBox 
Nginx 
PHP 
FuelPHP 
VirtualBox 
MariaDB
56 
こうしたい 
Vagrant 
Ansible 
Web と DB の構成管理 
DB マイグレーション 
オーケストレーション 
Docker 
Nginx 
PHP 
FuelPHP 
Docker 
MariaDB
57 
• Vagrant だろうが Docker だろうが開発 
者には極力意識させたくない (PaaS 化) 
• せめてビルドせずに出来上がりの最新イメー 
ジをすぐ使えるようにしたい
58 
Docker イメージの継続的デリバリー
59 
日次での Docker イメージの作成 & 単体・結合テスト 
テスト結果修正 
開発者 
Docker プライベートレジストリ 
登録 
オーケストレーション 
Docker コンテナ群
60 
Docker オーケストレーションツール 
! 
• Kubernetes (Google + Docker, MS, Redhat…) 
• Panamax (Centurylink) 
• Fleet x CoreOS (CoreOS) 
• Fig (Orchard => Docker) 
• Serf (HashiCorp) 
• Maestro (signalfuse)
61 
まとめ㝹尳
62 
• Docker を使って局所的に仮想化を行うこ 
だけでも、必要な部分だけローカル環境で 
立ち上げて開発を行ったり、共用環境調達 
までのリードタイムを稼ぐことができる 
• Ansible による構成管理でプロジェクトを 
横断したサーバ構築手順の再利用が進む
63 
• 分散システムはフルセットの開発環境を仮 
想化で提供・保守するのは片手間だと困難 
• 適切なバージョニングやマスターとの差 
異の検知、統一的なデプロイの実装 
• Ansible などで構成管理を切り出すため 
には専任の人員が必要
64 
• Mac で作ると大抵上手くいってしまうので 
現場に一人でも Windows で開発する人が 
いるのであれば必ず Win 環境で構築・テ 
ストする 
• イメージの構築プロセスは隠蔽して極力出 
来上がったものを共有する
65 
ご清聴ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)Masataka Kondo
 
vscode pipenv docker
vscode pipenv dockervscode pipenv docker
vscode pipenv dockerikdysfm
 
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsThe Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsNaruhiko Ogasawara
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2Tomofumi Yagi
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方wata2ki
 
openSUSEの紹介とサーバ構築
openSUSEの紹介とサーバ構築openSUSEの紹介とサーバ構築
openSUSEの紹介とサーバ構築Kento Kawakami
 
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするLibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするTomofumi Yagi
 
AzureでopenSUSE Leap42.1が使えるよ!
AzureでopenSUSE Leap42.1が使えるよ!AzureでopenSUSE Leap42.1が使えるよ!
AzureでopenSUSE Leap42.1が使えるよ!Kento Kawakami
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATETomofumi Yagi
 
Docker for windows を動かす
Docker for windows を動かすDocker for windows を動かす
Docker for windows を動かすShinnji Hoshino
 
解説 Windows 10 May 2020 Update
解説 Windows 10 May 2020 Update解説 Windows 10 May 2020 Update
解説 Windows 10 May 2020 UpdateTomokazu Kizawa
 
Yocto bspを作ってみた
Yocto bspを作ってみたYocto bspを作ってみた
Yocto bspを作ってみたwata2ki
 
Dockerの基本的な話
Dockerの基本的な話Dockerの基本的な話
Dockerの基本的な話gree_tech
 
Windows Subsystem for Linux 2
Windows Subsystem for Linux 2Windows Subsystem for Linux 2
Windows Subsystem for Linux 2Tomokazu Kizawa
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Masahito Zembutsu
 
LibreOfficeコミュニティに不具合修正パッチを送ってみた
LibreOfficeコミュニティに不具合修正パッチを送ってみたLibreOfficeコミュニティに不具合修正パッチを送ってみた
LibreOfficeコミュニティに不具合修正パッチを送ってみたTomofumi Yagi
 
Introduction to Yocto Project - Let's make customized embedded linux
Introduction to Yocto Project - Let's make customized embedded linuxIntroduction to Yocto Project - Let's make customized embedded linux
Introduction to Yocto Project - Let's make customized embedded linuxHiroshi Sakate
 
DockerでDjangoの実行環境を爆速でつくる
DockerでDjangoの実行環境を爆速でつくるDockerでDjangoの実行環境を爆速でつくる
DockerでDjangoの実行環境を爆速でつくるRyoKasai1
 
コンテナ導入概要資料2018
コンテナ導入概要資料2018コンテナ導入概要資料2018
コンテナ導入概要資料2018Masahito Zembutsu
 
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話Takayuki Shimizukawa
 

Was ist angesagt? (20)

LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)
 
vscode pipenv docker
vscode pipenv dockervscode pipenv docker
vscode pipenv docker
 
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for WindowsThe Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
The Basic of How to build LibreOffice / LibreOffice開発版ビルドの基礎 for Windows
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
 
openSUSEの紹介とサーバ構築
openSUSEの紹介とサーバ構築openSUSEの紹介とサーバ構築
openSUSEの紹介とサーバ構築
 
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするLibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドする
 
AzureでopenSUSE Leap42.1が使えるよ!
AzureでopenSUSE Leap42.1が使えるよ!AzureでopenSUSE Leap42.1が使えるよ!
AzureでopenSUSE Leap42.1が使えるよ!
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
 
Docker for windows を動かす
Docker for windows を動かすDocker for windows を動かす
Docker for windows を動かす
 
解説 Windows 10 May 2020 Update
解説 Windows 10 May 2020 Update解説 Windows 10 May 2020 Update
解説 Windows 10 May 2020 Update
 
Yocto bspを作ってみた
Yocto bspを作ってみたYocto bspを作ってみた
Yocto bspを作ってみた
 
Dockerの基本的な話
Dockerの基本的な話Dockerの基本的な話
Dockerの基本的な話
 
Windows Subsystem for Linux 2
Windows Subsystem for Linux 2Windows Subsystem for Linux 2
Windows Subsystem for Linux 2
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
 
LibreOfficeコミュニティに不具合修正パッチを送ってみた
LibreOfficeコミュニティに不具合修正パッチを送ってみたLibreOfficeコミュニティに不具合修正パッチを送ってみた
LibreOfficeコミュニティに不具合修正パッチを送ってみた
 
Introduction to Yocto Project - Let's make customized embedded linux
Introduction to Yocto Project - Let's make customized embedded linuxIntroduction to Yocto Project - Let's make customized embedded linux
Introduction to Yocto Project - Let's make customized embedded linux
 
DockerでDjangoの実行環境を爆速でつくる
DockerでDjangoの実行環境を爆速でつくるDockerでDjangoの実行環境を爆速でつくる
DockerでDjangoの実行環境を爆速でつくる
 
コンテナ導入概要資料2018
コンテナ導入概要資料2018コンテナ導入概要資料2018
コンテナ導入概要資料2018
 
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
 

Andere mochten auch

Prototyping Augmented Traditional Games: Concept, Design and Case Studies
Prototyping Augmented Traditional Games: Concept, Design and Case StudiesPrototyping Augmented Traditional Games: Concept, Design and Case Studies
Prototyping Augmented Traditional Games: Concept, Design and Case StudiesTetsuo Yamabe
 
Activity-Based Micro-pricing: Realizing Sustainable Behavior Changes through ...
Activity-Based Micro-pricing: Realizing Sustainable Behavior Changes through ...Activity-Based Micro-pricing: Realizing Sustainable Behavior Changes through ...
Activity-Based Micro-pricing: Realizing Sustainable Behavior Changes through ...Tetsuo Yamabe
 
Design Issues and Empirical Study in Mobility Oriented Service Developmentﰀ
Design Issues and Empirical Study in Mobility Oriented Service DevelopmentﰀDesign Issues and Empirical Study in Mobility Oriented Service Developmentﰀ
Design Issues and Empirical Study in Mobility Oriented Service DevelopmentﰀTetsuo Yamabe
 
継続的デリバリーと読み解く Web 開発あるあるとその対策
継続的デリバリーと読み解く Web 開発あるあるとその対策継続的デリバリーと読み解く Web 開発あるあるとその対策
継続的デリバリーと読み解く Web 開発あるあるとその対策Tetsuo Yamabe
 
Empowering End-users to Find Point-of-interests with a Public Display
Empowering End-users to Find Point-of-interests with a Public DisplayEmpowering End-users to Find Point-of-interests with a Public Display
Empowering End-users to Find Point-of-interests with a Public DisplayTetsuo Yamabe
 
QS Tools for Emotions and Communication
QS Tools for Emotions and CommunicationQS Tools for Emotions and Communication
QS Tools for Emotions and CommunicationHirotaka Niisato
 
Apple Watch vs Android Wear
Apple Watch vs Android WearApple Watch vs Android Wear
Apple Watch vs Android WearTak Inamori
 
GTB2015Spring_Webサービスとインターネットの歴史
GTB2015Spring_Webサービスとインターネットの歴史GTB2015Spring_Webサービスとインターネットの歴史
GTB2015Spring_Webサービスとインターネットの歴史Tak Inamori
 
今年は高田純次UXDが流行る -適当の美学-
今年は高田純次UXDが流行る -適当の美学-今年は高田純次UXDが流行る -適当の美学-
今年は高田純次UXDが流行る -適当の美学-Tak Inamori
 
A System Framework for Decision Support in Ambient Intelligence
A System Framework for Decision Support in Ambient IntelligenceA System Framework for Decision Support in Ambient Intelligence
A System Framework for Decision Support in Ambient IntelligenceTetsuo Yamabe
 
Augmented Reality Go: Extending Traditional Game Play with Interactive Self-L...
Augmented Reality Go: Extending Traditional Game Play with Interactive Self-L...Augmented Reality Go: Extending Traditional Game Play with Interactive Self-L...
Augmented Reality Go: Extending Traditional Game Play with Interactive Self-L...Tetsuo Yamabe
 
SXSWedu 2016 報告会 〜EdTech JAPAN 世界への挑戦 セッション紹介(山邉分)
SXSWedu 2016 報告会 〜EdTech JAPAN 世界への挑戦 セッション紹介(山邉分)SXSWedu 2016 報告会 〜EdTech JAPAN 世界への挑戦 セッション紹介(山邉分)
SXSWedu 2016 報告会 〜EdTech JAPAN 世界への挑戦 セッション紹介(山邉分)Tetsuo Yamabe
 
ポスト君とIoTとline bot
ポスト君とIoTとline botポスト君とIoTとline bot
ポスト君とIoTとline botHirotaka Niisato
 
StudySapuri Data Analytics Platform with Treasure Data
StudySapuri Data Analytics Platform with Treasure DataStudySapuri Data Analytics Platform with Treasure Data
StudySapuri Data Analytics Platform with Treasure DataTetsuo Yamabe
 
Dockerの事例紹介
Dockerの事例紹介Dockerの事例紹介
Dockerの事例紹介Hiroki Endo
 
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリーjenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリーJunya Suzuki
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?Masahito Zembutsu
 
継続的インテグレーションとテストの話
継続的インテグレーションとテストの話継続的インテグレーションとテストの話
継続的インテグレーションとテストの話Preferred Networks
 

Andere mochten auch (20)

EmoPoker
EmoPokerEmoPoker
EmoPoker
 
Prototyping Augmented Traditional Games: Concept, Design and Case Studies
Prototyping Augmented Traditional Games: Concept, Design and Case StudiesPrototyping Augmented Traditional Games: Concept, Design and Case Studies
Prototyping Augmented Traditional Games: Concept, Design and Case Studies
 
Activity-Based Micro-pricing: Realizing Sustainable Behavior Changes through ...
Activity-Based Micro-pricing: Realizing Sustainable Behavior Changes through ...Activity-Based Micro-pricing: Realizing Sustainable Behavior Changes through ...
Activity-Based Micro-pricing: Realizing Sustainable Behavior Changes through ...
 
Design Issues and Empirical Study in Mobility Oriented Service Developmentﰀ
Design Issues and Empirical Study in Mobility Oriented Service DevelopmentﰀDesign Issues and Empirical Study in Mobility Oriented Service Developmentﰀ
Design Issues and Empirical Study in Mobility Oriented Service Developmentﰀ
 
継続的デリバリーと読み解く Web 開発あるあるとその対策
継続的デリバリーと読み解く Web 開発あるあるとその対策継続的デリバリーと読み解く Web 開発あるあるとその対策
継続的デリバリーと読み解く Web 開発あるあるとその対策
 
Empowering End-users to Find Point-of-interests with a Public Display
Empowering End-users to Find Point-of-interests with a Public DisplayEmpowering End-users to Find Point-of-interests with a Public Display
Empowering End-users to Find Point-of-interests with a Public Display
 
QS Tools for Emotions and Communication
QS Tools for Emotions and CommunicationQS Tools for Emotions and Communication
QS Tools for Emotions and Communication
 
Apple Watch vs Android Wear
Apple Watch vs Android WearApple Watch vs Android Wear
Apple Watch vs Android Wear
 
GTB2015Spring_Webサービスとインターネットの歴史
GTB2015Spring_Webサービスとインターネットの歴史GTB2015Spring_Webサービスとインターネットの歴史
GTB2015Spring_Webサービスとインターネットの歴史
 
今年は高田純次UXDが流行る -適当の美学-
今年は高田純次UXDが流行る -適当の美学-今年は高田純次UXDが流行る -適当の美学-
今年は高田純次UXDが流行る -適当の美学-
 
A System Framework for Decision Support in Ambient Intelligence
A System Framework for Decision Support in Ambient IntelligenceA System Framework for Decision Support in Ambient Intelligence
A System Framework for Decision Support in Ambient Intelligence
 
Augmented Reality Go: Extending Traditional Game Play with Interactive Self-L...
Augmented Reality Go: Extending Traditional Game Play with Interactive Self-L...Augmented Reality Go: Extending Traditional Game Play with Interactive Self-L...
Augmented Reality Go: Extending Traditional Game Play with Interactive Self-L...
 
SXSWedu 2016 報告会 〜EdTech JAPAN 世界への挑戦 セッション紹介(山邉分)
SXSWedu 2016 報告会 〜EdTech JAPAN 世界への挑戦 セッション紹介(山邉分)SXSWedu 2016 報告会 〜EdTech JAPAN 世界への挑戦 セッション紹介(山邉分)
SXSWedu 2016 報告会 〜EdTech JAPAN 世界への挑戦 セッション紹介(山邉分)
 
HBase at LINE
HBase at LINEHBase at LINE
HBase at LINE
 
ポスト君とIoTとline bot
ポスト君とIoTとline botポスト君とIoTとline bot
ポスト君とIoTとline bot
 
StudySapuri Data Analytics Platform with Treasure Data
StudySapuri Data Analytics Platform with Treasure DataStudySapuri Data Analytics Platform with Treasure Data
StudySapuri Data Analytics Platform with Treasure Data
 
Dockerの事例紹介
Dockerの事例紹介Dockerの事例紹介
Dockerの事例紹介
 
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリーjenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?
 
継続的インテグレーションとテストの話
継続的インテグレーションとテストの話継続的インテグレーションとテストの話
継続的インテグレーションとテストの話
 

Ähnlich wie GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望

Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門KokiMakita1
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話Yahoo!デベロッパーネットワーク
 
2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)Naoki Okino
 
KinectとC#を用いた 実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた 実践的VRアプリ開発 第2回 2015/10/13 Github CLI編Akihiko Shirai
 
Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Takashi Kanai
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜Takashi Uemura
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討Masahito Zembutsu
 
Windows Server 2016でコンテナを動かしてみた
Windows Server 2016でコンテナを動かしてみたWindows Server 2016でコンテナを動かしてみた
Windows Server 2016でコンテナを動かしてみたTakashi Kanai
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)l_b__
 
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねGitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねNaoto TAKAHASHI
 
XPages開発におけるGit/GitHubの利用
XPages開発におけるGit/GitHubの利用XPages開発におけるGit/GitHubの利用
XPages開発におけるGit/GitHubの利用賢次 海老原
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用Shinya Okano
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!KLab株式会社
 

Ähnlich wie GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望 (20)

Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)
 
KinectとC#を用いた 実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編KinectとC#を用いた実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
KinectとC#を用いた 実践的VRアプリ開発 第2回 2015/10/13 Github CLI編
 
Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
Windows Server 2016でコンテナを動かしてみた
Windows Server 2016でコンテナを動かしてみたWindows Server 2016でコンテナを動かしてみた
Windows Server 2016でコンテナを動かしてみた
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねGitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
 
XPages開発におけるGit/GitHubの利用
XPages開発におけるGit/GitHubの利用XPages開発におけるGit/GitHubの利用
XPages開発におけるGit/GitHubの利用
 
Github入門2014
Github入門2014Github入門2014
Github入門2014
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!
 

GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望

  • 1. GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望 GMO インターネット株式会社 次世代システム研究室 山邉 哲生 1
  • 3.
  • 4. 4 今回のお話は GMO プライベート DMP 開発の裏側
  • 5. 5 ① GMO プライベート DMP 開発初 期に取り組んだこと ② 実開発の中で明確になった問題点 ③ 今、取り組み始めたこと 開発着手 3月くらい        ∧_∧    ∧_∧  (́<_`  )  ( ́_ゝ`) /   ⌒i /   \   | | /    /‾‾‾‾/ | __ (__ニつ / FMV / .| .|____     \/____/ (u ⊃ イマココ! 10月末 リリース
  • 6. GMO プライベート DMP 開発初期に 取り組んだこと① 6
  • 9. 9 1. 開発者が自分だけの開発環境を持つこと ができる 2. それぞれの開発環境は独立しており、 個々の変更は互いに影響を及ぼさない
  • 10. 10
  • 12. 12 3. それぞれの開発環境は任意のタイミング で容易に最新化することができる 4. 開発環境の構成・構築手順はステージン グ環境や本番環境のそれと何も変わらない
  • 15. 15
  • 19. 19 • Docker 社が Go 言語で開発した、コンテ ナ型の仮想環境を管理するためのツール • Yelp, Spotify, Baidu, Rackspace, ebay… • ハイパーバイザー型より軽量な仮想環境の 実現(ホストからはプロセスとして見える) https://www.docker.com/resources/usecases/
  • 20. VM アプリ ミドル ウェア アプリ ミドル ウェア ハイパーバイザー OS OS アプリ アプリ コンテナ管理ツール (Docker) VM OS コンテナ ミドル ウェア コンテナ ミドル ウェア 20
  • 21. 21 • Infrastructure as Code • Dockerfile というコードで記述できる • Immutable Infrastructure • 状態を保持しない”使い捨て”イメージ • 設計思想として1コンテナ1サービス • コンテナを維持するには常駐するプロ セスが必要
  • 22. 22 Dockerfile 記述例 ! FROM centos MAINTAINER Tetsuo Yamabe ! # Misc packages RUN yum groupinstall -y "Development Tools" RUN yum --enablerepo=epel,centosplus install -y rsyslog wget sudo passwd openssh openssh-server openssh-clients… ! # User management RUN groupadd web RUN useradd -M -g web web …
  • 23. 23 • Infrastructure as Code • Dockerfile というコードで記述できる • Immutable Infrastructure • 状態を保持しない”使い捨て”イメージ • 設計思想として1コンテナ1サービス • コンテナを維持するには何かしら常駐 するプロセスが必要
  • 24. Build Run Push Pull Stop 24
  • 25. 25 ! Docker を支える要素技術 ! 1. Namespaces 2. Control groups 3. Union file systems 4. Container format https://docs.docker.com/introduction/understanding-docker/#what-is-dockers- architecture
  • 26. 26 1. Namespaces (名前空間) • PID : プロセス ID (Linux 2.6.24 ~) • NET : ネットワーク (Linux 2.6.24 ~) • IPC : プロセス間通信 (Linux 2.6.19 ~) • MNT : マウント (Linux 2.4.19 ~) • UTS : ホスト名、ドメイン名など (Linux 2.6.19 ~) http://lwn.net/Articles/531114/
  • 27. 27 2. Control groups (コントロールグループ) • 通称 cgroup(s) • プロセスをグループ化して、それぞれに提 供するリソースのコントロールを行う • CPU 時間、CPU コア • メモリ • デバイス etc
  • 28. 28 3. Union file systems (UnionFS) 異なる FS のファイ ル・ディレクトリを 透過的に重ねて利用。 ! 親は読み取り専用。 https://docs.docker.com/terms/layer/
  • 29. 29 4. Container format LXC (Linux Containers) から Docker 独自の libcontainer へ移行 http://www.zdnet.com/docker-libcontainer-unifies-linux-container-powers- 7000030397/
  • 30.  GMO プライベート DMP 概観 Hadoop エコシステム 管理画面 30
  • 31. 31 Docker を使って初期開発を行ったもの 1. 管理画面 • Nginx + PHP + MariaDB 2. Hadoop (CDH5) • Flume (+HDFS) 3. RabbitMQ 4. ファイルサーバー
  • 32. 32 • Dockerfile による構成管理の記述が楽 • 軽量なので必要なときに必要なイメージを 手軽に起動して開発できる
  • 35. 35 Dockerfile の ビルドがつらい
  • 37. 37 … RUN git pull RUN git checkout develop RUN git submodule init RUN git submodule update RUN php composer.phar self-update RUN php composer.phar update RUN npm install RUN grunt RUN php oil r install …
  • 38. 38 • 気がつくとライブラリがバージョンアウト してリポジトリから消失 • Dockerfile に記述しただけでは冪等性は保 証できない
  • 40. 40 • Linux カーネルの機能を使う Docker は Win/Mac 直上では動かない • 一枚 VM をかまして動かす必要がある
  • 42. 42 • Docker というより Vagrant / VirtualBox を使う上での障壁が大きい • 64 bit イメージを動かすために BIOS 設定が 必要、Vagrant / VirtualBox のバージョン差 異に起因するエラーなどなど • 今は win 用の boot2docker インストーラが あるので楽になっている様子
  • 44. 44 • Immutable Infrastructure を体現する Docker は内部状態を永続的に保持しない • 作業スペースを外出し(マウント)してお かないと commit しない限り Docker の 停止とともに消失する
  • 45. 45 サブシステムも 多いし 分散環境が つらい
  • 46. 46 • Git のリポジトリ(プロジェクト)数6つ • 常に最新の状態に保つための仕組みを作る 余力がなかった • 共用の開発環境が出来てからは Hadoop がらみの開発は直接 on-server で行われ るようになっていった
  • 47. 47 Docker の アンチパターンを 理解していませんでした
  • 48. 48 • ビルド済みのイメージではなく Dockerfile を配布してしまった • 複数のサービスを一つのコンテナに詰め込 んでしまった (supervisord パターン) • 作業ディレクトリをホスト OS に外出しし ていなかった
  • 49. Vagrant 49 環境構築を Ansible 化するに伴って Vagrant 環境へ移行 Docker Nginx PHP FuelPHP MariaDB ! 上記イメージ の環境構築 (Dockerfile) Ansible Web と DB の構成管理 DB マイグレーション VirtualBox Nginx PHP FuelPHP VirtualBox MariaDB 移行
  • 51. 51 • Chef や Puppet に並ぶ構成管理ツール • YAML でデータをいじるので Python を意 識しなくて良い • ほぼ全部入りでクライアントレス • 柔軟なディレクトリ構成
  • 52. 52 • Web / DB を独立させて変更に強くなった • データが揮発しなくなった • Dockerfile に記述していた構築手順を Ansible に担わせることで、各種サーバへ のプロビジョニングを可能にできた
  • 53. 53 • 重いので同時起動できる VM は限られる。 ノート PC での開発がたまに辛い。 • Win の敷居はまだまだ高い • box ファイルの作成・取得・差し替えの手 間が割と大きいので、一度配布されたイメー ジとマスターの乖離が大きくなりがち (DB スキーマ含む)
  • 55. 55 これを Vagrant Ansible Web と DB の構成管理 DB マイグレーション VirtualBox Nginx PHP FuelPHP VirtualBox MariaDB
  • 56. 56 こうしたい Vagrant Ansible Web と DB の構成管理 DB マイグレーション オーケストレーション Docker Nginx PHP FuelPHP Docker MariaDB
  • 57. 57 • Vagrant だろうが Docker だろうが開発 者には極力意識させたくない (PaaS 化) • せめてビルドせずに出来上がりの最新イメー ジをすぐ使えるようにしたい
  • 59. 59 日次での Docker イメージの作成 & 単体・結合テスト テスト結果修正 開発者 Docker プライベートレジストリ 登録 オーケストレーション Docker コンテナ群
  • 60. 60 Docker オーケストレーションツール ! • Kubernetes (Google + Docker, MS, Redhat…) • Panamax (Centurylink) • Fleet x CoreOS (CoreOS) • Fig (Orchard => Docker) • Serf (HashiCorp) • Maestro (signalfuse)
  • 62. 62 • Docker を使って局所的に仮想化を行うこ だけでも、必要な部分だけローカル環境で 立ち上げて開発を行ったり、共用環境調達 までのリードタイムを稼ぐことができる • Ansible による構成管理でプロジェクトを 横断したサーバ構築手順の再利用が進む
  • 63. 63 • 分散システムはフルセットの開発環境を仮 想化で提供・保守するのは片手間だと困難 • 適切なバージョニングやマスターとの差 異の検知、統一的なデプロイの実装 • Ansible などで構成管理を切り出すため には専任の人員が必要
  • 64. 64 • Mac で作ると大抵上手くいってしまうので 現場に一人でも Windows で開発する人が いるのであれば必ず Win 環境で構築・テ ストする • イメージの構築プロセスは隠蔽して極力出 来上がったものを共有する