SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Red Hat Enterprise Linux
OpenStack Platform環境での
Docker活用テクニック
レッドハット株式会社
v1.3 2015-11-04
2
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
自己紹介
 中井悦司(なかいえつじ)
– Twitter @enakai00
 日々の仕事
– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.
企業システムでオープンソースの活用を希望される
お客様を全力でご支援させていただきます。
 昔とった杵柄
– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
好評発売中!
本日のデモで使用する
コンテナイメージの作り方は、
この本に記載されています。
3
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
デモの詳細はブログを参照してください
 デモの手順(スクリプトやコマンド)の詳細は下記のブログに掲載しています。
– OpenStack上でRHEL7のDockerを使う手順
– http://enakai00.hatenablog.com/entry/2015/10/06/194542
 本スライドに記載のスクリプトやコマンドは、一部を抜粋したものです。スクリプ
トの全体像は上記のブログを参考にしてください。
4
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Contents
 OpenStackの機能概要(復習)
 Dockerの機能概要(復習)
 OpenStackとDockerを組み合わせるメリット
 Docker用仮想マシンの構成
(ブロックボリュームを使わない例)
 Docker用仮想マシンの構成
(ブロックボリュームを使う例と複数コンテナの連携例)
 Kubernetes/OpenShiftによるオーケストレーション
OpenStackの機能概要(復習)
6
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
OpenStackが提供するコンピューティングリソース
 OpenStackのユーザは、Webコンソール/APIを利用して、
次のようなコンピューティングリソースを利用します。
– 仮想ネットワーク
– 仮想マシンインスタンス
– ブロックボリューム
データ領域 ブロックボリューム
仮想ルータ
仮想スイッチ
外部ネットワーク
プロジェクト環境
OpenStackユーザ
OS領域
 各ユーザは特定の「プロジェクト」に
所属します。
– プロジェクト内でリソースを共有
– プロジェクト全体でのリソース使用
量の上限設定、リソース使用状況の
レポーティングなどが可能
仮想マシンインスタンス
7
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
カスタマイズ・スクリプト(UserData)による自動化
 仮想マシンインスタンス起動時に「カスタマイズ・スクリプト(UserData)」を与えると任
意のテキストをメタデータとしてゲストOSに受け渡すことができます。
 Cloud-Initは、カスタマイズ・スクリプトを解釈して、さまざまな自動化を実現します。
– 下図はシェルスクリプトを渡して、「/etc/motd」を設定しています。
– この他にもCloud-Init独自の構文で、処理内容を指示することができます。
$ curl http://169.254.169.254/2009-04-04/user-data
#!/bin/sh
echo 'Hello, World' > /etc/motd
exit 0
Dockerの概要(復習)
9
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Dockerが提供する基本機能
Dockerfile
① Dockerイメージを自動作成
OSイメージ
アプリケーション
ライブラリー
アプリケーション
フレームワーク
イメージの
作成手順を記載
Docker
イメージ
OS上にインストール可能な
ものはすべてイメージ化可能
② Dockerイメージを保存・公開
③ Dockerサーバーに
 イメージを配布・実行
10
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
フレームワーク
データベース
アプリケーション
フレームワーク
ライブラリー
Dockerイメージを
本番環境に展開!
 テストが実施された「確実動くアプリケーション」をそのままDockerイメージに
固めて、本番環境に自動デプロイするという運用を想像してみましょう・・・。
サービス環境へのDocker適用のメリット
OpenStackとDockerを
組み合わせるメリット
12
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
OpenStackによる自動化(オーケストレーション)手法
 Dockerが無かった時代は・・・
– 仮想マシン、ストレージ、ネットワークなどのインフラは、OpenStackで自動構成
– ゲストOS上のアプリはChef/Ansible/Puppetなどの構成管理ツールで自動構成
 ゲストOSとアプリの管理が別れているため「Immutable」な運用が困難!
– ゲストOSのテンプレートはOpenStack側で管理
– 仮想マシン起動時に動的にアプリの導入・設定を実施
「第14章 Dockerを利用したアプリケーション展開」より引用
ゲストOSの変更に起因する
アプリ導入の失敗が発生
13
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
OpenStackとDockerの組み合わせ手法
 Dockerを用いた運用だと・・・
– OpenStackは、「インフラ+DockerホストOS」の提供に専念
– アプリの実行環境は、Dockerイメージで作成・管理・デプロイ
 インフラとアプリの管理を分離することで「Immutable」な運用が容易に!
– ゲストOSのテンプレートはDockerの稼働環境を提供
– 事前作成済みのDockerイメージを配布してアプリを起動
「第14章 Dockerを利用したアプリケーション展開」より引用
アプリの導入・管理を
OpenStackから分離可能
14
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Docker用仮想マシンの構成(全体像)
永続データ
領域
イメージ
保存領域
OS領域Docker導入済み
VMテンプレート
ホストLinuxの
/dataにマウント
仮想マシン
ブロックボリューム
追加の
エフェメラルディスク
コンテナ
(アプリケーション)
/data
コンテナ
イメージ
Dockerデーモン
ゲストOS
(ホストLinux)
/var/lib/mysql
永続データは特定の
ディレクトリに保存
Dockerで管理
OpenStackで管理
Docker用仮想マシンの構成手順
(ブロックボリュームを使わない例)
16
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Railsアプリをコンテナで起動する構成例
イメージ
保存領域
OS領域Docker導入済み
VMテンプレート
仮想マシン
追加の
エフェメラルディスク
コンテナ
(Railsアプリ)
コンテナ
イメージ
DockerデーモンDockerで管理
OpenStackで管理 フローティングIP
コンテナ内で
Railsアプリを起動
Railsアプリ(伝言板)
のイメージを事前登録
フローティングIPにアクセス
17
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
ゲストOSとイメージ保存領域の用意
イメージ
保存領域
OS領域Docker導入済み
VMテンプレート
仮想マシン
 OS領域とイメージ保存領域のディスクを用意します。
– RHEL7の公式ゲストイメージにdockerパッケージを導入
したスナップショットを用意します。
– また、イメージ保存領域用に「一時ディスク」の容量を
設定したフレーバーを定義しておきます。
# subscription-manager register
# subscription-manager attach --pool=<pool id>
# subscription-manager repos --disable=*
# subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms
# yum -y update
# yum -y install docker lvm2
18
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
仮想マシンの作成とコンテナの起動(Railsアプリ)
イメージ
保存領域
OS領域Docker導入済み
テンプレート
仮想マシン
 Nova APIから仮想マシンを作成します。
– 先ほど準備したスナップショットとフレーバーで仮想マシンを起動します。
– 起動後に外部からアクセス可能なフローティングIPを割り当てます。
 UserData(カスタマイズスクリプト)を用いて、下記の処理を実施します。
– イメージ保存領域をセットアップ
– コンテナイメージを取得して、コンテナを起動
cat <<'EOF' >/etc/sysconfig/docker-storage-setup
VG=vg_pool
DATA_SIZE=18G
EOF
rm -rf /var/lib/docker/*
pvcreate -f /dev/vdb
vgcreate vg_pool /dev/vdb
docker-storage-setup
docker run -itd -p 8000:80 --name dengonban01 
registry01:5000/enakai00/rails:ver1.0
「/dev/vdb」にVGを作成して、
イメージ保存領域として構成
ゲストOSからは
「/dev/vdb」として認識
8000番ポートへのアクセスを
コンテナの80番ポートに転送
19
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
コンテナー
(参考)Dockerの内部ネットワーク構成
 それぞれのコンテナーには独立した仮想NICとプライベートIPアドレスが割り当てられて、ホ
ストLinuxの仮想ブリッジ(docker0)に接続します。
– IPアドレスは自動で割り当てられますが、他のコンテナーからは環境変数で参照できるように設定が
可能です。
 外部ネットワークからアクセスする際は、ホストLinuxで受信したパケットをコンテナー内に
転送するように設定します。
ホストLinux
vethXX
eth0
docker0
eth0
外部ネットワーク
– 外部のクライアントはホストLinuxにアクセスするので、コン
テナーの存在を意識することはありません。
– OpenStack環境の場合、外部からは、仮想マシンに割り当てた
「フローティングIP」にアクセスします。
172.17.42.1
# docker run -it -p 8000:80 ...
ホストLinuxの
IPアドレスに接続
TCP 8000
TCP 80
ポート
フォワー
ディング
Docker用仮想マシンの構成手順
(ブロックボリュームを使う例と
複数コンテナの連携例)
21
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
MySQLをコンテナで起動する構成例
永続データ
領域
イメージ
保存領域
OS領域Docker導入済み
テンプレート
ホストLinuxの
/dataにマウント
仮想マシン
ブロックボリューム
追加の
エフェメラルディスク
コンテナ
(MySQL)
/data
コンテナ
イメージ
Dockerデーモン
/var/lib/mysql
MySQLのデータ領域
「/var/lib/mysql」に
ブロックボリュームの
ディクレクトリを割り当て
Dockerで管理
OpenStackで管理
コンテナ内で
MySQLを起動
MySQLのイメージを
事前登録
22
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
仮想マシンの作成とコンテナの起動(MySQL)
 Nova APIから仮想マシンを作成します。
– 先ほど準備したスナップショットとフレーバーで仮想マシンを起動します。
– 起動後にフローティングIPとブロックボリュームを割り当てます。
 UserData(カスタマイズスクリプト)を用いて、下記の処理を実施します。
– イメージ保存領域をセットアップ
– ブロックボリュームが割り当てられるのを待って、ホストLinuxの/dataにマウント
– コンテナイメージを取得して、コンテナを起動
mkfs.xfs -f /dev/vdd
mkdir /data
mount /dev/vdd /data
chcon -Rt svirt_sandbox_file_t /data
docker run -itd --name mysql01 -v /data:/var/lib/mysql -p 10000:3306 registry01:5000/enakai00/mysql:ver1.0
sleep 5
docker exec mysql01 mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'nodeuser'@'localhost';"
docker exec mysql01 mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'nodeuser'@'%' IDENTIFIED BY 'pas4mysql';"
docker exec mysql01 mysql -u nodeuser -e "CREATE DATABASE shorturl_service;"
docker exec mysql01 mysql shorturl_service -u nodeuser -e " 
CREATE TABLE url_list ( 
hash CHAR(12) PRIMARY KEY, 
url VARCHAR(256) UNIQUE NOT NULL COLLATE utf8_bin 
);"
EOF
この後で起動するnode.jsアプリで
使用するデータベースを作成
23
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
MySQLにアクセスするコンテナの構成例
永続データ
領域
イメージ
保存領域
OS領域
コンテナ
(MySQL)
/data
コンテナ
イメージ
Dockerデーモン
/var/lib/mysql
フローティングIP
イメージ
保存領域
OS領域
コンテナ
(node.jsアプリ)
コンテナ
イメージ
Dockerデーモン
フローティングIP フローティングIPにアクセス
フローティングIPにアクセス
var DBHOST = process.env.DB_PORT_3306_TCP_ADDR;
var DBPORT = process.env.DB_PORT_3306_TCP_PORT;
接続先DBのIP/ポートは
環境変数で参照
24
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
仮想マシンの作成とコンテナの起動(node.jsアプリ)
仮想マシン
 Nova APIから仮想マシンを作成します。
– 先ほど準備したスナップショットとフレーバーで仮想マシンを起動します。
– 起動後に外部からアクセス可能なフローティングIPを割り当てます。
 UserData(カスタマイズスクリプト)を用いて、下記の処理を実施します。
– イメージ保存領域をセットアップ
– コンテナイメージを取得して、コンテナを起動
docker run -itd --name shorturl01 -p 8000:80 
-e DB_PORT_3306_TCP_ADDR=192.168.1.104 
-e DB_PORT_3306_TCP_PORT=10000 
registry01:5000/enakai00/shorturl:ver1.0
接続先DBのIP/ポートを
環境変数に設定して
コンテナを起動
接続先DBのIP/ポートは
環境変数で参照
コンテナ
(node.jsアプリ)
コンテナ
イメージ
Dockerデーモン
var DBHOST = process.env.DB_PORT_3306_TCP_ADDR;
var DBPORT = process.env.DB_PORT_3306_TCP_PORT;
Kubernetes/OpenShiftによる
オーケストレーション
26
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Docker活用パターン1:アプリのデプロイを安全/簡単に
 仮想マシン上のアプリケーションをコンテナイメージ化することで、アプリケー
ションのデプロイを安全/簡単にします。
– 「1仮想マシンに1アプリケーション」という配置はあえて変更しないことで、運用方
法やアプリケーションのデザインへの影響を最小限に留めます。
– 外部からアプリケーションに接続するユーザー/外部システムは、アプリケーションが
コンテナ化されていることを意識する必要がありません。
– コンテナイメージを開発する環境(OpenShiftなど)は、別途、必要となります。
OpenStack/仮想化基盤
仮想マシン
(ゲストOS)
アプリA
・・・
・・・
これまでの環境
アプリケーションの
コンテナイメージ化
OpenStack/仮想化基盤
仮想マシン
(Dockerホスト)
アプリA
(コンテナ
 イメージ)
仮想マシン
(Dockerホスト)
アプリB
(コンテナ
 イメージ)
・・・
・・・
仮想マシン
(ゲストOS)
アプリB
27
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Docker活用パターン2:コンテナ化によるリソース有効活用
 コンテナの配置先を自動的に振り分ける仕組みを用いて、複数ホストを「1つの
コンピューティングリソース」として活用します。
– Kubernetesなどのオーケストレーションツールを使用します。
 アプリケーションを機能単位に分割してコンテナ化することで、さらなるメリッ
トが得られます。
– 必要な機能を負荷に応じてオートスケールします。
– 機能単位でコンテナを入れ替えることにより、稼働中のアプリケーションの動的な機能
変更が可能になります。
OpenStack/仮想化基盤
仮想マシン
(Dockerホスト)
仮想マシン
(Dockerホスト)
仮想マシン
(Dockerホスト)
・・・
複数ホストを束ねて「1つのコンピュータ」として活用
マイクロサービス化
アプリケーション
28
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Kubernetes:Dockerをより高度に管理する仕組みを提供
http://jp.techcrunch.com/2014/07/11/20140710google-microsoft-ibm-and-others-collaborate-to-make-managing-docker-containers-easier/
今後は、Kubernetesを利用した
DevOps基盤が開発されていきます
OpenShift
仮想マシン/
ベアメタルサーバー
Docker
Kubernetes
実行リソース提供
複数サーバーに跨る
オーケストレーション
UI、モニタリング、
イメージ作成ワークフロー
etc.
・・・
OpenStack
・・・
コンテナ化
アプリケーション
仮想マシン/
ベアメタルサーバー
Docker
OpenShift v3:DockerによるDevOps環境を実現
 OpenShift v3は、Docker/Kubernetesをコアコンポーネントとして、インテグレートされた
DevOps環境を提供します。
30
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
まとめ
 サービス環境でDockerを使用するメリットは、大きく2種類あります。
 アプリケーションのデプロイを簡単/安全に実施する。
– 開発側で、テスト済みのアプリケーション環境をイメージ化する仕組みを用意する必要
があります。OpenShiftの開発支援機能を活用してください。
– 1VM(1ホスト)に1コンテナを配置することで、アプリケーションの設計/運用は従
来と同じ方法を踏襲します。
– OpenStack + Dockerにより、VMの作成とコンテナの配置を自動化する事も可能です。
 複数のホストをプール化して、リソースの有効活用を行う。
– Kubernetes, OpenShiftなど、コンテナの自動配置(オーケストレーション)を行うツー
ルと組み合わせる必要があります。OpenStackを用いて、Kubernetes/OpenShift環境を
自動構築する事も可能です。
– ハイパーバイザーのオーバーヘッドを回避したい場合は、OpenStackのベアメタルプロ
ビジョニング機能が利用できます。
– アプリケーションのマイクロサービス化により、機能単位のオートスケール、アプリ
ケーションの動的な機能変更が実現可能になります。
本日ご紹介した
利用パターン
先進企業が
取り組む世界
31
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
参考資料
 OpenStack上でRHEL7のDockerを使う手順
– http://enakai00.hatenablog.com/entry/2015/10/06/194542
 "Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
– http://www.slideshare.net/enakai/docker-is-not-container-dockerpaas
 Dockerイメージ管理の内部構造
– http://www.slideshare.net/enakai/docker-43975886
 Red Hat Enterprise Linux 7.1 Kubernetes入門
– http://www.slideshare.net/enakai/red-hat-enterprise-linux-71-kubernetes
 Open shift 3 technical architecture
– http://www.slideshare.net/hyoungseunglee/open-shift-3-technical-architecture
EMPOWER PEOPLE,
EMPOWER ENTERPRISE,
OPEN INNOVATION.

Weitere ähnliche Inhalte

Was ist angesagt?

OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
Etsuji Nakai
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
Etsuji Nakai
 
RDOとPackstackのご紹介
RDOとPackstackのご紹介RDOとPackstackのご紹介
RDOとPackstackのご紹介
Etsuji Nakai
 
クラウドオーケストレーション「OpenStack Heat」に迫る!
クラウドオーケストレーション「OpenStack Heat」に迫る!クラウドオーケストレーション「OpenStack Heat」に迫る!
クラウドオーケストレーション「OpenStack Heat」に迫る!
Etsuji Nakai
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
Etsuji Nakai
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
Etsuji Nakai
 
Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化
Etsuji Nakai
 
DCK Server プロトタイプ
DCK Server プロトタイプDCK Server プロトタイプ
DCK Server プロトタイプ
Etsuji Nakai
 

Was ist angesagt? (20)

OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
 
RDOとPackstackのご紹介
RDOとPackstackのご紹介RDOとPackstackのご紹介
RDOとPackstackのご紹介
 
クラウドオーケストレーション「OpenStack Heat」に迫る!
クラウドオーケストレーション「OpenStack Heat」に迫る!クラウドオーケストレーション「OpenStack Heat」に迫る!
クラウドオーケストレーション「OpenStack Heat」に迫る!
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
 
OpenShift v3 Technical Introduction
OpenShift v3 Technical IntroductionOpenShift v3 Technical Introduction
OpenShift v3 Technical Introduction
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
Red Hat Enterprise Linux 7.1 Kubernetes入門
Red Hat Enterprise Linux 7.1 Kubernetes入門Red Hat Enterprise Linux 7.1 Kubernetes入門
Red Hat Enterprise Linux 7.1 Kubernetes入門
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門
 
Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化
 
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
 
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~
 
Linux女子部 iptables復習編
Linux女子部 iptables復習編Linux女子部 iptables復習編
Linux女子部 iptables復習編
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
 
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
 
RHEL Atomic Hostのご紹介
RHEL Atomic Hostのご紹介RHEL Atomic Hostのご紹介
RHEL Atomic Hostのご紹介
 
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックOpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
 
DCK Server プロトタイプ
DCK Server プロトタイプDCK Server プロトタイプ
DCK Server プロトタイプ
 

Andere mochten auch

試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
Etsuji Nakai
 
Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料
Etsuji Nakai
 

Andere mochten auch (17)

Red Hat Enterprise Linux OpenStack Platform 7 - VM Instance HA Architecture
Red Hat Enterprise Linux OpenStack Platform 7 - VM Instance HA ArchitectureRed Hat Enterprise Linux OpenStack Platform 7 - VM Instance HA Architecture
Red Hat Enterprise Linux OpenStack Platform 7 - VM Instance HA Architecture
 
openstackの仮想マシンHA機能の現状と今後の方向性
openstackの仮想マシンHA機能の現状と今後の方向性openstackの仮想マシンHA機能の現状と今後の方向性
openstackの仮想マシンHA機能の現状と今後の方向性
 
OpenStackユーザ会資料 - Masakari
OpenStackユーザ会資料 - MasakariOpenStackユーザ会資料 - Masakari
OpenStackユーザ会資料 - Masakari
 
OpenStack入門 2016/06/10
OpenStack入門 2016/06/10OpenStack入門 2016/06/10
OpenStack入門 2016/06/10
 
Dockerの現在と未来
Dockerの現在と未来Dockerの現在と未来
Dockerの現在と未来
 
Docker入門
Docker入門Docker入門
Docker入門
 
Docker on aws
Docker on awsDocker on aws
Docker on aws
 
Beyond x86: Managing Multi-platform Environments with OpenStack
Beyond x86: Managing Multi-platform Environments with OpenStackBeyond x86: Managing Multi-platform Environments with OpenStack
Beyond x86: Managing Multi-platform Environments with OpenStack
 
Drive responsibly: Innovate on cloud that is Open by design
Drive responsibly: Innovate on cloud that is Open by designDrive responsibly: Innovate on cloud that is Open by design
Drive responsibly: Innovate on cloud that is Open by design
 
IBM Cloud - Open by Design
IBM Cloud - Open by DesignIBM Cloud - Open by Design
IBM Cloud - Open by Design
 
CloudFoundryをつかってみよう
CloudFoundryをつかってみようCloudFoundryをつかってみよう
CloudFoundryをつかってみよう
 
Extending TripleO for OpenStack Management
Extending TripleO for OpenStack ManagementExtending TripleO for OpenStack Management
Extending TripleO for OpenStack Management
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
 
OpenStack HA
OpenStack HAOpenStack HA
OpenStack HA
 
Issues of OpenStack multi-region mode
Issues of OpenStack multi-region modeIssues of OpenStack multi-region mode
Issues of OpenStack multi-region mode
 
Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料
 
ヤフオク!における機械学習 ~深層学習、分散表現~ #devsumi
ヤフオク!における機械学習 ~深層学習、分散表現~ #devsumiヤフオク!における機械学習 ~深層学習、分散表現~ #devsumi
ヤフオク!における機械学習 ~深層学習、分散表現~ #devsumi
 

Ähnlich wie Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック

"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
Etsuji Nakai
 

Ähnlich wie Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック (20)

Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
 
Introduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 SpringIntroduction of Rancher at OSC Tokyo 17 Spring
Introduction of Rancher at OSC Tokyo 17 Spring
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
OpenStack概要
OpenStack概要OpenStack概要
OpenStack概要
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
Cld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなたCld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなた
 
Cld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなたCld018 コンテナ go_~あなた
Cld018 コンテナ go_~あなた
 

Mehr von Etsuji Nakai

TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
Etsuji Nakai
 

Mehr von Etsuji Nakai (20)

PRML11.2-11.3
PRML11.2-11.3PRML11.2-11.3
PRML11.2-11.3
 
「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える
 
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
 
Introducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowIntroducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlow
 
Googleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスGoogleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービス
 
Spannerに関する技術メモ
Spannerに関する技術メモSpannerに関する技術メモ
Spannerに関する技術メモ
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 
A Brief History of My English Learning
A Brief History of My English LearningA Brief History of My English Learning
A Brief History of My English Learning
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門
 
Lecture note on PRML 8.2
Lecture note on PRML 8.2Lecture note on PRML 8.2
Lecture note on PRML 8.2
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersMachine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application Developers
 
Your first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterYour first TensorFlow programming with Jupyter
Your first TensorFlow programming with Jupyter
 
Deep Q-Network for beginners
Deep Q-Network for beginnersDeep Q-Network for beginners
Deep Q-Network for beginners
 
Life with jupyter
Life with jupyterLife with jupyter
Life with jupyter
 
TensorFlowで学ぶDQN
TensorFlowで学ぶDQNTensorFlowで学ぶDQN
TensorFlowで学ぶDQN
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきか
 
PRML7.2
PRML7.2PRML7.2
PRML7.2
 
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
 
Exploring the Philosophy behind Docker/Kubernetes/OpenShift
Exploring the Philosophy behind Docker/Kubernetes/OpenShiftExploring the Philosophy behind Docker/Kubernetes/OpenShift
Exploring the Philosophy behind Docker/Kubernetes/OpenShift
 

Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック

  • 1. Red Hat Enterprise Linux OpenStack Platform環境での Docker活用テクニック レッドハット株式会社 v1.3 2015-11-04
  • 2. 2 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 好評発売中! 本日のデモで使用する コンテナイメージの作り方は、 この本に記載されています。
  • 3. 3 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック デモの詳細はブログを参照してください  デモの手順(スクリプトやコマンド)の詳細は下記のブログに掲載しています。 – OpenStack上でRHEL7のDockerを使う手順 – http://enakai00.hatenablog.com/entry/2015/10/06/194542  本スライドに記載のスクリプトやコマンドは、一部を抜粋したものです。スクリプ トの全体像は上記のブログを参考にしてください。
  • 4. 4 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック Contents  OpenStackの機能概要(復習)  Dockerの機能概要(復習)  OpenStackとDockerを組み合わせるメリット  Docker用仮想マシンの構成 (ブロックボリュームを使わない例)  Docker用仮想マシンの構成 (ブロックボリュームを使う例と複数コンテナの連携例)  Kubernetes/OpenShiftによるオーケストレーション
  • 6. 6 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック OpenStackが提供するコンピューティングリソース  OpenStackのユーザは、Webコンソール/APIを利用して、 次のようなコンピューティングリソースを利用します。 – 仮想ネットワーク – 仮想マシンインスタンス – ブロックボリューム データ領域 ブロックボリューム 仮想ルータ 仮想スイッチ 外部ネットワーク プロジェクト環境 OpenStackユーザ OS領域  各ユーザは特定の「プロジェクト」に 所属します。 – プロジェクト内でリソースを共有 – プロジェクト全体でのリソース使用 量の上限設定、リソース使用状況の レポーティングなどが可能 仮想マシンインスタンス
  • 7. 7 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック カスタマイズ・スクリプト(UserData)による自動化  仮想マシンインスタンス起動時に「カスタマイズ・スクリプト(UserData)」を与えると任 意のテキストをメタデータとしてゲストOSに受け渡すことができます。  Cloud-Initは、カスタマイズ・スクリプトを解釈して、さまざまな自動化を実現します。 – 下図はシェルスクリプトを渡して、「/etc/motd」を設定しています。 – この他にもCloud-Init独自の構文で、処理内容を指示することができます。 $ curl http://169.254.169.254/2009-04-04/user-data #!/bin/sh echo 'Hello, World' > /etc/motd exit 0
  • 9. 9 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック Dockerが提供する基本機能 Dockerfile ① Dockerイメージを自動作成 OSイメージ アプリケーション ライブラリー アプリケーション フレームワーク イメージの 作成手順を記載 Docker イメージ OS上にインストール可能な ものはすべてイメージ化可能 ② Dockerイメージを保存・公開 ③ Dockerサーバーに  イメージを配布・実行
  • 10. 10 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック フレームワーク データベース アプリケーション フレームワーク ライブラリー Dockerイメージを 本番環境に展開!  テストが実施された「確実動くアプリケーション」をそのままDockerイメージに 固めて、本番環境に自動デプロイするという運用を想像してみましょう・・・。 サービス環境へのDocker適用のメリット
  • 12. 12 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック OpenStackによる自動化(オーケストレーション)手法  Dockerが無かった時代は・・・ – 仮想マシン、ストレージ、ネットワークなどのインフラは、OpenStackで自動構成 – ゲストOS上のアプリはChef/Ansible/Puppetなどの構成管理ツールで自動構成  ゲストOSとアプリの管理が別れているため「Immutable」な運用が困難! – ゲストOSのテンプレートはOpenStack側で管理 – 仮想マシン起動時に動的にアプリの導入・設定を実施 「第14章 Dockerを利用したアプリケーション展開」より引用 ゲストOSの変更に起因する アプリ導入の失敗が発生
  • 13. 13 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック OpenStackとDockerの組み合わせ手法  Dockerを用いた運用だと・・・ – OpenStackは、「インフラ+DockerホストOS」の提供に専念 – アプリの実行環境は、Dockerイメージで作成・管理・デプロイ  インフラとアプリの管理を分離することで「Immutable」な運用が容易に! – ゲストOSのテンプレートはDockerの稼働環境を提供 – 事前作成済みのDockerイメージを配布してアプリを起動 「第14章 Dockerを利用したアプリケーション展開」より引用 アプリの導入・管理を OpenStackから分離可能
  • 14. 14 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック Docker用仮想マシンの構成(全体像) 永続データ 領域 イメージ 保存領域 OS領域Docker導入済み VMテンプレート ホストLinuxの /dataにマウント 仮想マシン ブロックボリューム 追加の エフェメラルディスク コンテナ (アプリケーション) /data コンテナ イメージ Dockerデーモン ゲストOS (ホストLinux) /var/lib/mysql 永続データは特定の ディレクトリに保存 Dockerで管理 OpenStackで管理
  • 16. 16 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック Railsアプリをコンテナで起動する構成例 イメージ 保存領域 OS領域Docker導入済み VMテンプレート 仮想マシン 追加の エフェメラルディスク コンテナ (Railsアプリ) コンテナ イメージ DockerデーモンDockerで管理 OpenStackで管理 フローティングIP コンテナ内で Railsアプリを起動 Railsアプリ(伝言板) のイメージを事前登録 フローティングIPにアクセス
  • 17. 17 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック ゲストOSとイメージ保存領域の用意 イメージ 保存領域 OS領域Docker導入済み VMテンプレート 仮想マシン  OS領域とイメージ保存領域のディスクを用意します。 – RHEL7の公式ゲストイメージにdockerパッケージを導入 したスナップショットを用意します。 – また、イメージ保存領域用に「一時ディスク」の容量を 設定したフレーバーを定義しておきます。 # subscription-manager register # subscription-manager attach --pool=<pool id> # subscription-manager repos --disable=* # subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms # yum -y update # yum -y install docker lvm2
  • 18. 18 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック 仮想マシンの作成とコンテナの起動(Railsアプリ) イメージ 保存領域 OS領域Docker導入済み テンプレート 仮想マシン  Nova APIから仮想マシンを作成します。 – 先ほど準備したスナップショットとフレーバーで仮想マシンを起動します。 – 起動後に外部からアクセス可能なフローティングIPを割り当てます。  UserData(カスタマイズスクリプト)を用いて、下記の処理を実施します。 – イメージ保存領域をセットアップ – コンテナイメージを取得して、コンテナを起動 cat <<'EOF' >/etc/sysconfig/docker-storage-setup VG=vg_pool DATA_SIZE=18G EOF rm -rf /var/lib/docker/* pvcreate -f /dev/vdb vgcreate vg_pool /dev/vdb docker-storage-setup docker run -itd -p 8000:80 --name dengonban01 registry01:5000/enakai00/rails:ver1.0 「/dev/vdb」にVGを作成して、 イメージ保存領域として構成 ゲストOSからは 「/dev/vdb」として認識 8000番ポートへのアクセスを コンテナの80番ポートに転送
  • 19. 19 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック コンテナー (参考)Dockerの内部ネットワーク構成  それぞれのコンテナーには独立した仮想NICとプライベートIPアドレスが割り当てられて、ホ ストLinuxの仮想ブリッジ(docker0)に接続します。 – IPアドレスは自動で割り当てられますが、他のコンテナーからは環境変数で参照できるように設定が 可能です。  外部ネットワークからアクセスする際は、ホストLinuxで受信したパケットをコンテナー内に 転送するように設定します。 ホストLinux vethXX eth0 docker0 eth0 外部ネットワーク – 外部のクライアントはホストLinuxにアクセスするので、コン テナーの存在を意識することはありません。 – OpenStack環境の場合、外部からは、仮想マシンに割り当てた 「フローティングIP」にアクセスします。 172.17.42.1 # docker run -it -p 8000:80 ... ホストLinuxの IPアドレスに接続 TCP 8000 TCP 80 ポート フォワー ディング
  • 21. 21 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック MySQLをコンテナで起動する構成例 永続データ 領域 イメージ 保存領域 OS領域Docker導入済み テンプレート ホストLinuxの /dataにマウント 仮想マシン ブロックボリューム 追加の エフェメラルディスク コンテナ (MySQL) /data コンテナ イメージ Dockerデーモン /var/lib/mysql MySQLのデータ領域 「/var/lib/mysql」に ブロックボリュームの ディクレクトリを割り当て Dockerで管理 OpenStackで管理 コンテナ内で MySQLを起動 MySQLのイメージを 事前登録
  • 22. 22 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック 仮想マシンの作成とコンテナの起動(MySQL)  Nova APIから仮想マシンを作成します。 – 先ほど準備したスナップショットとフレーバーで仮想マシンを起動します。 – 起動後にフローティングIPとブロックボリュームを割り当てます。  UserData(カスタマイズスクリプト)を用いて、下記の処理を実施します。 – イメージ保存領域をセットアップ – ブロックボリュームが割り当てられるのを待って、ホストLinuxの/dataにマウント – コンテナイメージを取得して、コンテナを起動 mkfs.xfs -f /dev/vdd mkdir /data mount /dev/vdd /data chcon -Rt svirt_sandbox_file_t /data docker run -itd --name mysql01 -v /data:/var/lib/mysql -p 10000:3306 registry01:5000/enakai00/mysql:ver1.0 sleep 5 docker exec mysql01 mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'nodeuser'@'localhost';" docker exec mysql01 mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'nodeuser'@'%' IDENTIFIED BY 'pas4mysql';" docker exec mysql01 mysql -u nodeuser -e "CREATE DATABASE shorturl_service;" docker exec mysql01 mysql shorturl_service -u nodeuser -e " CREATE TABLE url_list ( hash CHAR(12) PRIMARY KEY, url VARCHAR(256) UNIQUE NOT NULL COLLATE utf8_bin );" EOF この後で起動するnode.jsアプリで 使用するデータベースを作成
  • 23. 23 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック MySQLにアクセスするコンテナの構成例 永続データ 領域 イメージ 保存領域 OS領域 コンテナ (MySQL) /data コンテナ イメージ Dockerデーモン /var/lib/mysql フローティングIP イメージ 保存領域 OS領域 コンテナ (node.jsアプリ) コンテナ イメージ Dockerデーモン フローティングIP フローティングIPにアクセス フローティングIPにアクセス var DBHOST = process.env.DB_PORT_3306_TCP_ADDR; var DBPORT = process.env.DB_PORT_3306_TCP_PORT; 接続先DBのIP/ポートは 環境変数で参照
  • 24. 24 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック 仮想マシンの作成とコンテナの起動(node.jsアプリ) 仮想マシン  Nova APIから仮想マシンを作成します。 – 先ほど準備したスナップショットとフレーバーで仮想マシンを起動します。 – 起動後に外部からアクセス可能なフローティングIPを割り当てます。  UserData(カスタマイズスクリプト)を用いて、下記の処理を実施します。 – イメージ保存領域をセットアップ – コンテナイメージを取得して、コンテナを起動 docker run -itd --name shorturl01 -p 8000:80 -e DB_PORT_3306_TCP_ADDR=192.168.1.104 -e DB_PORT_3306_TCP_PORT=10000 registry01:5000/enakai00/shorturl:ver1.0 接続先DBのIP/ポートを 環境変数に設定して コンテナを起動 接続先DBのIP/ポートは 環境変数で参照 コンテナ (node.jsアプリ) コンテナ イメージ Dockerデーモン var DBHOST = process.env.DB_PORT_3306_TCP_ADDR; var DBPORT = process.env.DB_PORT_3306_TCP_PORT;
  • 26. 26 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック Docker活用パターン1:アプリのデプロイを安全/簡単に  仮想マシン上のアプリケーションをコンテナイメージ化することで、アプリケー ションのデプロイを安全/簡単にします。 – 「1仮想マシンに1アプリケーション」という配置はあえて変更しないことで、運用方 法やアプリケーションのデザインへの影響を最小限に留めます。 – 外部からアプリケーションに接続するユーザー/外部システムは、アプリケーションが コンテナ化されていることを意識する必要がありません。 – コンテナイメージを開発する環境(OpenShiftなど)は、別途、必要となります。 OpenStack/仮想化基盤 仮想マシン (ゲストOS) アプリA ・・・ ・・・ これまでの環境 アプリケーションの コンテナイメージ化 OpenStack/仮想化基盤 仮想マシン (Dockerホスト) アプリA (コンテナ  イメージ) 仮想マシン (Dockerホスト) アプリB (コンテナ  イメージ) ・・・ ・・・ 仮想マシン (ゲストOS) アプリB
  • 27. 27 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック Docker活用パターン2:コンテナ化によるリソース有効活用  コンテナの配置先を自動的に振り分ける仕組みを用いて、複数ホストを「1つの コンピューティングリソース」として活用します。 – Kubernetesなどのオーケストレーションツールを使用します。  アプリケーションを機能単位に分割してコンテナ化することで、さらなるメリッ トが得られます。 – 必要な機能を負荷に応じてオートスケールします。 – 機能単位でコンテナを入れ替えることにより、稼働中のアプリケーションの動的な機能 変更が可能になります。 OpenStack/仮想化基盤 仮想マシン (Dockerホスト) 仮想マシン (Dockerホスト) 仮想マシン (Dockerホスト) ・・・ 複数ホストを束ねて「1つのコンピュータ」として活用 マイクロサービス化 アプリケーション
  • 28. 28 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック Kubernetes:Dockerをより高度に管理する仕組みを提供 http://jp.techcrunch.com/2014/07/11/20140710google-microsoft-ibm-and-others-collaborate-to-make-managing-docker-containers-easier/ 今後は、Kubernetesを利用した DevOps基盤が開発されていきます
  • 30. 30 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック まとめ  サービス環境でDockerを使用するメリットは、大きく2種類あります。  アプリケーションのデプロイを簡単/安全に実施する。 – 開発側で、テスト済みのアプリケーション環境をイメージ化する仕組みを用意する必要 があります。OpenShiftの開発支援機能を活用してください。 – 1VM(1ホスト)に1コンテナを配置することで、アプリケーションの設計/運用は従 来と同じ方法を踏襲します。 – OpenStack + Dockerにより、VMの作成とコンテナの配置を自動化する事も可能です。  複数のホストをプール化して、リソースの有効活用を行う。 – Kubernetes, OpenShiftなど、コンテナの自動配置(オーケストレーション)を行うツー ルと組み合わせる必要があります。OpenStackを用いて、Kubernetes/OpenShift環境を 自動構築する事も可能です。 – ハイパーバイザーのオーバーヘッドを回避したい場合は、OpenStackのベアメタルプロ ビジョニング機能が利用できます。 – アプリケーションのマイクロサービス化により、機能単位のオートスケール、アプリ ケーションの動的な機能変更が実現可能になります。 本日ご紹介した 利用パターン 先進企業が 取り組む世界
  • 31. 31 Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック 参考資料  OpenStack上でRHEL7のDockerを使う手順 – http://enakai00.hatenablog.com/entry/2015/10/06/194542  "Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する – http://www.slideshare.net/enakai/docker-is-not-container-dockerpaas  Dockerイメージ管理の内部構造 – http://www.slideshare.net/enakai/docker-43975886  Red Hat Enterprise Linux 7.1 Kubernetes入門 – http://www.slideshare.net/enakai/red-hat-enterprise-linux-71-kubernetes  Open shift 3 technical architecture – http://www.slideshare.net/hyoungseunglee/open-shift-3-technical-architecture