アプリ屋もdockerをドカドカ使おう ~ docker入門

46
アプリ屋も Docker使おう 株式会社エクサ シニアITアーキテクト www.facebook.com/hori.tasuku

Upload: hori-tasuku

Post on 16-Apr-2017

6.001 views

Category:

Software


0 download

TRANSCRIPT

Page 1: アプリ屋もDockerをドカドカ使おう ~ Docker入門

アプリ屋もDockerをドカドカ使おう

株式会社エクサ

シニアITアーキテクト

堀 扶

www.facebook.com/hori.tasuku

Page 2: アプリ屋もDockerをドカドカ使おう ~ Docker入門

自己紹介

• 神奈川のSIer所属• アプリと基盤の間で働く、今年でSE22年目

• 現在の業務は、全社標準化と技術サポート• 開発プロセスおよび成果物の標準化

• プロジェクト支援ツールの標準化

お客様開発環境オフショア開発環境 自社内共通開発環境自社内プロジェクト専用

開発環境

早く 安く

簡単にできるだけ多くのプロジェクトに

最近良く聞く、Dockerは使えないか..

はじめに

© 2015 EXA CORPORATION 2

Page 3: アプリ屋もDockerをドカドカ使おう ~ Docker入門

以下のサーバをDockerコンテナで試行

• Jenkins• Subversion上で所定名称でタグ付けされたソースをITサーバへ自動デプロイ

• コンパイル&UT、SLOC計測、弊社独自の品質評価ツール適用も実行

• Subversion + WebDAV• 構成管理サーバ

• ソースコードだけでなく設計書などの文書も管理

• Redmine• バグトラッキングツール

• プロジェクト内でWBSアクティビティ化されていない作業をチケットで管理

ちょうど Docker コンテナの基本的な起動方法を網羅

① 公式イメージをそのままrun

② Dockerfileを使って build & run

③ 複数コンテナを一度に up

今回のセッションでこれらの手順を元に、Dockerの使い方を紹介します

はじめに

© 2015 EXA CORPORATION 3

Page 4: アプリ屋もDockerをドカドカ使おう ~ Docker入門

目次

• はじめに

• Dockerについて

• Dockerの使い方• 公式イメージをそのまま run

• Dockerfile を使って build & run

• 複数コンテナを一度に up

• さいごに

© 2015 EXA CORPORATION 4

Page 5: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Dockerとは

• コンピュータリソースを切り分けて使うソフトウェアの一つ• Google社のサービスは全部コンテナらしい

• Linuxのコンテナ技術(LXC)を使う• ユーザ空間のみ分離した環境のため従来の仮想化技術より効率的

• コンテナをコマンドラインで操作可能

物理マシン

カーネル空間

物理マシン

ゲストOS

ハイパバイザ

物理マシン

カーネル空間

ユーザ空間 ユーザ空間

仮想マシン

ホストOS + ハイパバイザ

ユーザ空間 ユーザ空間

ユーザ空間

ゲストOS

仮想マシン

ユーザ空間

ゲストOS

仮想マシン

ユーザ空間

Docker化仮想化

Dockerについて

© 2015 EXA CORPORATION 5

Page 6: アプリ屋もDockerをドカドカ使おう ~ Docker入門

仮想マシンとDockerコンテナの違い

• OSのインストールから

• 複数のプロセス動作可能

• フルイメージなら共有可

• イメージのコード化不可

• 複雑なNW構成も選択可能

• ホストOSはLinux以外も可

• OS導入済み状態から

• 原則単一のプロセスのみ

• 差分イメージの共有も可能

• イメージのコード化可能

• ホストマシンとのNATのみ

• ホストOSは今のところLinuxのみ

仮想マシン Dockerコンテナ

Dockerについて

© 2015 EXA CORPORATION 6

Dockerfile

Page 7: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Docker動作環境

2つの構成要素• Dockerサーバ:Linux OSが動作するマシン

• コンテナが実際に動作するサーバ

• Dockerクライアント:Windows/Mac OSでも動作、サーバ上でもOK• DockerコマンドによるDockerサーバ上のコンテナ操作

dockerコマンドによるコンテナ操作(CUI)

Linux OS

ユーザ空間 ユーザ空間 ユーザ空間

dockerデーモン

Dockerfile

《Dockerクライアント》

《Dockerサーバ》

Docker Engine

Dockerについて

DockerHub

公開イメージ

公式イメージ

ローカルリポジトリ

イメージ

© 2015 EXA CORPORATION 7

Page 8: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Dockerコンテナ起動までの流れ

DockerHub

Docker Hubからイメージを docker pull

ローカルリポジトリ

Dockerfileを使って docker build

自分のイメージを docker push

公式イメージ

公開イメージ 公式イメー

ジ公開イメー

イメージ

イメージ

イメージ

公開イメージ

Dockerコンテナ

Dockerコンテナ

Dockerコンテナ

実行 docker run

Dockerコンテナ

Dockerコンテナ

Dockerについて

インターネット上で公開したい場合のみ

© 2015 EXA CORPORATION 8

Dockerfile

Dockerfile

Page 9: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Docker Hub

• インターネット上のサービス• GitHubのDocker版

• Dockerfile やビルドコンテンツ、イメージなどが格納されている

• GitHub Enterprise相当のサービスがDocker Trasted Registory(一部無料)

• インターネットを使いたくない→Docker Registoryを構築、代替にする

• Official: 公式イメージ• Docker社が管理しているイメージ

• 使い方ドキュメントつき

• Public: 公開イメージ• 個人で作成したコンテンツを公開可能

• 要アカウント取得(無料)

DockerHub

Dockerについて

主な公開イメージ© 2015 EXA CORPORATION 9

Page 10: アプリ屋もDockerをドカドカ使おう ~ Docker入門

docker コマンド

• Dockerクライアントのコマンドラインから実行

• Getting Started [Windows/Mac/Linux] をまず読む

• 書式:「docker <コマンド名> <引数1> <引数2>…」主なコマンド 動作

pull Docker Hub/Docker Repogitoryからイメージをローカルリポジトリへダウンロード

push ローカルイメージをDocker Hub/Docker Repositoryへアップロード

build Dockerfileやビルドコンテンツをもとにイメージをビルドしローカルリポジトリへ格納

run イメージをコンテナとして実行

exec コンテナ上でコマンドを実行する

login Docker Hubへログインする

rmi ローカルリポジトリからイメージを削除する

rm コンテナを削除する

Dockerについて

© 2015 EXA CORPORATION 10

Page 11: アプリ屋もDockerをドカドカ使おう ~ Docker入門

ローカルリポジトリ

• Docker Hubから取得したイメージをDockerサーバ上に一旦格納

• 格納されるイメージには必ず「イメージID」が付与される

• 各イメージにのラベルをつけることができる• 形式:「<アカウント名>/<イメージ名>:<タグ名>」

• ローカルリポジトリ上のすべてのイメージ一覧表示→「dockerimages」

Dockerについて

ローカルリポジトリ

要素 説明

アカウント名 Docker Hub上のユーザ名

イメージ名 イメージ対象が一発で分かる名前をつける

タグ名 一般的にはバージョン番号(最新版は”latest”)

$ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEmaryatdocker/docker-whale latest 7d9495d03763 5 minutes ago 273.7 MBdocker-whale latest 7d9495d03763 2 hours ago 273.7 MB<none> <none> 5dac217f722c 5 hours ago 273.7 MB

© 2015 EXA CORPORATION 11

Page 12: アプリ屋もDockerをドカドカ使おう ~ Docker入門

目次

• はじめに

• Dockerについて

• Dockerの使い方• 公式イメージをそのまま run

• Dockerfile を使って build & run

• 複数コンテナを一度に up

• さいごに

© 2015 EXA CORPORATION 12

Page 13: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Dockerコンテナ起動までの流れ

DockerHub

Docker Hubからイメージを docker pull

ローカルリポジト

Dockerfileを使って docker build

自分のイメージを docker push

公式イメージ

公開イメージ

公式イメージ

公開イメージ

イメージ

イメージ

イメージ

公開イメージ

Dockerコンテナ

Dockerコンテナ

Dockerコンテナ

実行 docker run

Dockerコンテナ

Dockerコンテナ

Dockerの使い方

インターネット上で公開したい場合のみ

① 公式イメージをそのまま run

② Dockerfileを使って build & run

③ 複数コンテナを一度に up

© 2015 EXA CORPORATION 13

Page 14: アプリ屋もDockerをドカドカ使おう ~ Docker入門

① 公式イメージをそのままrun

Jenkinsのように、起動するとすぐに使用可能となる公式イメージもある

1. Docker Hub上の公式イメージサイトを読むJenkins → https://hub.docker.com/_/jenkins/

2. How to useにしたがって実行する

docker run --name myjenkins -p 8080:8080 -v /your/home:/var/jenkins_home jenkins

ダウンロードしたイメージの名前を“myjenkins”とつける

左側の番号:Dockerサーバ外部ポート番号右側の番号:コンテナ側のポート番号

左側のパス:Dockerサーバ上のマウント先パス右側のパス:コンテナ側のパス(VOLUME指定してエクスポーズしている

イメージの名前公開イメージの場合アカウント名省略タグ名省略時は”latest”が選択される

Dockerの使い方

© 2015 EXA CORPORATION 14

Page 15: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Linux OS

Dockerコンテナ

《参考》DockerコンテナのNAT構成

© 2015 EXA CORPORATION 15

《Dockerサーバ》

eth0 docker0veth0

172.17.0.2

Port:8080

192.168.10.101

192.168.10.0/16

docker run --name myjenkins -p 8080:8080 -v /your/home:/var/jenkins_home jenkins

JenkinsサーバWebサイトを開くには http://192.168.10.101:8080/ へアクセスする

Dockerの使い方

外からは、あたかもくっついたかのように見える

Page 16: アプリ屋もDockerをドカドカ使おう ~ Docker入門

② Dockerfileを使ってbuild&run

Docker Hub上には、Subversionの公式イメージがない

このような場合は、centosなどの公式イメージをカスタマイズ(build)して実行(run)して希望のコンテナを実行する

1. ベースとなるイメージの決定

OSの種類とバージョンを決める 例)最新のCentOS → “centos:latest”

1. カスタマイズ手順を決めるOSにrootでSSHしたあとのコマンドを記述する

2. Dockerfileに記述Dockerクライアント上で記述したコマンドを所定の書式でDockerfile化必要があればビルドコンテンツも用意

3. Dockerfile をビルド→作成したイメージはローカルリポジトリへ

4. 作成したイメージを実行

Dockerの使い方

© 2015 EXA CORPORATION 16

Page 17: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Dockerfile

• DockerコンテナのMakefileのようなもの• Dockerfileに記述した順番にイメージ上で処理される• 最初の「FROM」を使って使用するイメージ名を記述• 「RUN」コマンドを上から順番に実行

• RUNを実行するごとにイメージが作成される

• 最終行の「CMD」にデーモンプロセスをコマンドライン実行• systemctlでの起動は失敗する

• ビルドコンテンツ(ファイルやディレクトリ)をコンテナ上にCOPYやADD• 外部のファイルをビルド時にコンテンツ上に取り込める

• コマンドリファレンスはこちらを参照のこと

Dockerの使い方

© 2015 EXA CORPORATION 17

Page 18: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Subversion: Dockerfile記述例FROM centos:7MAINTAINER "Tasuku Hori" <[email protected]>

RUN echo "proxy=http://proxy.server:9999" >> /etc/yum.conf && yum -y update && ¥yum -y install subversion subversion-tools httpd mod_dav_svn net-tools tar gzip openssh-server && ¥echo "## WebDAV" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo "Alias /svn /var/www/svn" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo "<Location /svn>" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo " DAV svn" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo " SVNParentPath /var/www/svn/" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo " AuthType Basic" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo " AuthName ¥"svn default repository¥"" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo " AuthUserFile /etc/svn/svn-auth-users" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo " AuthzSVNAccessFile /etc/svn/svn-authz-access" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo " Require valid-user" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥echo "</Location>" >> /etc/httpd/conf.modules.d/10-subversion.conf && ¥mkdir -p /etc/svn && ¥echo "[repo:/]" >> /etc/svn/svn-authz-access && ¥echo "* =" >> /etc/svn/svn-authz-access && ¥echo "admin = rw" >> /etc/svn/svn-authz-access && ¥echo "[repo:/default]" >> /etc/svn/svn-authz-access && ¥echo "tsukamoto = rw" >> /etc/svn/svn-authz-access && ¥htpasswd -bcm /etc/svn/svn-auth-users admin admin && ¥htpasswd -bm /etc/svn/svn-auth-users tsukamoto tsukamoto && ¥mkdir -p /var/www/svn && cd /var/www/svn && ¥svnadmin create repo && ¥cd /var/www && chown -R apache:apache ./svn

VOLUME ["/var/www/svn", "/etc/svn"]EXPOSE 80CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

実行するプロセスを最後に記述する

実行時に-vや-pでDockerサーバ側に露出させることができる

実行時に-vや-pでDockerサーバ側に露出させることができる

Dockerの使い方

※本ファイルを実際に使用する場合は、at your own riskでお願いします

© 2015 EXA CORPORATION 18

コマンドラインからインストールする手順を上から順番に記述する

Page 19: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Redmine 実行環境の構成

• Ruby on Rails で記述されたWebアプリケーション

• Redmineには以下のような複数のプロセスが必要• Webサーバ(Apache HTTP Server + passengerモジュール など)

• RDBMS (mysql や PostgreSQLなど)

• (オプション)memcached

物理マシン

OS

apache

Passengerモジュール

Redmineアプリケーション

PostgreSQL memcached

《物理マシン構成例》

物理マシン

カーネル空間

ユーザ空間 ユーザ空間 ユーザ空間

《Dockerサーバ構成例》

Dockerの使い方

複数のコンテナで構成する必要がある

© 2015 EXA CORPORATION 19

Page 20: アプリ屋もDockerをドカドカ使おう ~ Docker入門

公開イメージ使用時のリスク

• 今回、公式イメージではなく公開イメージを使用した例を紹介

• 公開イメージは個人が作成したものである• 公式イメージがない場合に• 公式イメージがあっても最新バージョンが提供されていない場合に

• Redmine Officialには3.1.1はないが、sameersbn/redmineには3.1.1がある

• イメージ概要やインストール方法はドキュメントを確認すること

• 悪意ある公開者の可能性もある• 当然何か合った場合は各自でリスクをとらなくてはならない• Dockerはroot権限でコマンド実行を許可しているのと同等• 気休めだが..

• イメージのみ公開している場合は避ける• 参照数の少ないもの、更新頻度の低いものも避ける

Redmine3.1.1公開と同時にイメージも公開している..

Dockerの使い方

© 2015 EXA CORPORATION 20

Page 21: アプリ屋もDockerをドカドカ使おう ~ Docker入門

③ 複数コンテナを一度にup

• Docker Composeで複数のコンテナを一度に起動、停止できる• docker-compose コマンド(旧名fig)

• docker-compose up:起動、docker-compose stop:停止

• カレントディレクトリ上のdocker-compose.yml に従いコンテナ起動• image: 使用するイメージ名を指定• link:コンテナ間連携

• RedmineコンテナとPostgreSQLコンテナ• Redmineコンテナとmemcachedコンテナ

• volume: Dockerサーバ上のディレクトリへマウント• PostgreSQLのデータディレクトリ• Redmineのデータディレクトリ(アップロードしたファイルの格納先)

• docker-compose.ymlリファレンスはこちらを参考のこと

Dockerの使い方

© 2015 EXA CORPORATION 21

Page 22: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Redmine: docker-compose.yml記述例

postgresql:image: sameersbn/postgresql:9.4volumes:

- /home/10001/postgresql/data:/var/lib/postgresqlenvironment:

- DB_USER=redmine- DB_PASS=admin123- DB_NAME=redmin

memcached:image: sameersbn/memcached:latest

redmine10001:image: sameersbn/redmine:3.1.1links:- postgresql:postgresql- memcached:memcached

volumes:- /var/run/docker.sock:/run/docker.sock- /usr/bin/docker:/bin/docker- /home/10001/redmine/data:/home/redmine/data

environment:- DB_USER=redmine- DB_PASS=admin123- DB_NAME=redmine- SMTP_HOST=smtp_server_fqdn- SMTP_PORT=25

ports:- "10001:80"

Memcachedコンテナ

PostgreSQL コンテナ

Redmine コンテナ

Redmineデータ/home/redmine/data

PostgreSQLデータ/var/lib/postgresq

l

link

link

volume

volume

ports

DockerHub

公開イメージsomeershn/postgresql:9.4

公開イメージsomeershn/memcached:latest

公開イメージsomeershn/redmine:2.6.3

image

image

image

/bin/docker

/run/docker.sock

volume

volume

※本ファイルを実際に使用する場合は、at your own riskでお願いします

Dockerの使い方

© 2015 EXA CORPORATION 22

Page 23: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Dockerイメージによる社内標準化推進

23

DockerTrustedRegistory

カスタマイズ済みコンテナ

カスタマイズ済みコンテナ

カスタマイズ済みコンテナ

PMOツール

カスタマイズ済みコンテナ

テスト環境

カスタマイズ済みコンテナ

カスタマイズ済みコンテナ

カスタマイズ済みコンテナ

カスタマイズ済みコンテナ

Public IaaS/PaaSへ

社内仮想環境/*Stackへ

余ったPCなどへ

標準化担当

Dockerの使い方

Docker Incの有料サービス組織内ローカルのリポジトリ

© 2015 EXA CORPORATION

インターネット上にリポジトリがあると、パブリック・クラウドからオンプレミスまでイメージを共有できる インストール後

閉鎖環境へ持ち込み

オンプレのみであればDocker Repository(OSS)で実現可能

Page 24: アプリ屋もDockerをドカドカ使おう ~ Docker入門

目次

• はじめに

• Dockerについて

• Dockerの使い方• 公式イメージをそのまま run

• Dockerfile を使って build & run

• 複数コンテナを一度に up

• さいごに

© 2015 EXA CORPORATION 24

Page 25: アプリ屋もDockerをドカドカ使おう ~ Docker入門

おすすめ速習ルート

• 市販ムック本「Dockerエキスパート養成読本」か「Docker実践入門」を流し読み

• 自分のPCに実行環境を作り、本のコマンドを試す

• 自分でJenkins → Subversion → Redmine を立ててみる• 過去に作ったことのあるサーバがあればDockerで立ててみる

• VOLUMEを使い、Dockerコンテナ上データのバックアップ方法を理解する

• 実プロジェクトで使用するイメージを用意• Docker Hub上の公式イメージドキュメントを読む&試す

• できるだけDocker Hub資源を使い、Dockerfileはなるべく書かない!

• 開発用PCに実行環境を入れて運用

© 2015 EXA CORPORATION 25

いっちょかみ

ドカドカ

ひととおり

書かなくてはならなくなったら基盤屋に依頼しよう!

さいごに

Page 26: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Dockerを覚えるべき人

• やはり基盤技術者、システムアーキテクト• システムアーキテクチャを設計する人は必須

• ライフサイクルが短く、負荷見積が難しいシステム向き

• Public IaaS/PaaSとの親和性は比較的高い

• コマンドベースなので自動スケール設計、実装しやすい

• インストール手順、災害対策時などの退避や復旧手順の自動化• オンプレミス環境からPublic Iaas/PaaSへのポータビリティの実現

• Public IaaSへ一般公開したくない独自イメージ提供→Docker Trusted Repositoryが必要?• ベースとなるGit/GitHubを使うスキルも必要

では、アプリ屋(アプリ開発者)は不要?

さいごに

© 2015 EXA CORPORATION 26

Page 27: アプリ屋もDockerをドカドカ使おう ~ Docker入門

アプリ屋がDockerを使う

• アプリ屋と基盤屋のすきま、いわゆる「グレーゾーン」• 基盤屋にやってほしいが、結局アプリ屋がやっている作業• Public PaaS環境なども入ってきそう• ステージング環境のうち実装、UT、IT前半あたり• プロジェクト支援三種の神器(Subversion, Redmine, Jenkins)

• これらの環境構築はDockerが得意• 少ないリソースを効率よく使う

• Dockerユーザに徹すれば、Dockerは便利なツール• Dockerfileやdocker-compose.ymlには手を出さない• どんなに便利なイメージがDocker Hubにあるかよく知っているとなお良い

• スクリプト言語を使って便利なツールを作り、再利用する• PHP, Ruby on Rails, Python, JavaScript(HTML5/CSS3), Groovy..

さいごに

© 2015 EXA CORPORATION 27

Page 28: アプリ屋もDockerをドカドカ使おう ~ Docker入門

アプリ屋向き実行環境:Kitematic

• Windows 7/8.x PCで動作するDocker GUI• 現時点ではWindows10では動作しない

• 簡単インストール(Porxyなしの場合)

• 公式イメージをそのまま使用する場合はワンクリック起動

© 2015 EXA CORPORATION 28

tps://www.youtube.com/watc

ps://www.youtube.com/watch?

Linux操作を知らないPMO向けツールただし、Docker Hub上のドキュメントは読む必要あり

さいごに

Page 29: アプリ屋もDockerをドカドカ使おう ~ Docker入門

アプリ屋向き実行環境:CoreOS

• 必要最小限の機能に絞ったDockerコンテナ実行環境(Linux)• クラスタリング(etcd)、分散システムツール(fleet)

• Windows7 + VMwarePlayer + CoreOS + Tera Term

• インストールが比較的簡単

• Proxy環境でも動作

• PMOでもなんとか扱えそう..

© 2015 EXA CORPORATION 29

さいごに

Ubuntu/CentOS/Fedora/RHEL..Snappy Ubuntu CoreAtom Project (CentOS/RedHat)Apache MESOS

CoreOS以外のDocker実行環境

Poderosaだと動作しない

Page 30: アプリ屋もDockerをドカドカ使おう ~ Docker入門

物理マシン

アプリ屋向き実行環境:Panamax/CoreOS

• KitematicのWeb UI版

• DockerHub+Panamax独自テンプレ

• 5つのコンテナ+クライアント• 小さいPCだとオーバヘッド大きい• 2vCPU2GBメモリだと半分のメモリを消費

• 簡単インストール• Proxy環境では動作しない?

© 2015 EXA CORPORATION 30

CoreOS

モニタリングUI

NoSQL

ワークフロー

cAdvisor redis

DRAY

UI

panamax-ui

エージェント

panamax-api

ユーザのコンテナ

ユーザのコンテナ

ユーザのコンテナ

Panamaxクライアント

panamaxの起動停止、状態確認等

コンテナ運用者

コンテナの設定、起動停止等

さいごに

Page 31: アプリ屋もDockerをドカドカ使おう ~ Docker入門

PMOも技術を身につけよう!

• PMO こそ Docker を覚えてほしい• いつまでも メール/Excel/Word/共有フォルダ だけ?

• プロジェクト管理にもITを積極活用しよう• ユーザ管理 → Active Directory / FreeIPA

• 共有フォルダ → ownCloud / GitLab / Subversion + WebDAV

• 課題、障害管理 → Trac / Redmine

• 品質評価、生産性集計 → Jenkins+FindBugs/Checkstyle+SLOCCount,Redmine..

• コミュニケーション → Slack, Kandan, OpenMeetings..

• Webアプリ系スクリプト言語も覚えれば最強に• HTML5+CSS3、PHP、Ruby on Rails、Groovy + Public PaaS

• 独自便利ツール量産も夢ではない

© 2015 EXA CORPORATION 31

さいごに

Page 32: アプリ屋もDockerをドカドカ使おう ~ Docker入門

あなたもDockerをドカドカ使ってみませんか?

本資料に記載の企業名称、製品名称は、米国およびその他の国における各社の登録商標です。

© 2015 EXA CORPORATION 32

Page 33: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Docker1.8 構成

• Docker Engine• DockerデーモンとDockerコマンド(CUIクライアント)、Dockerの基本構成

• Docker Hub• Docker社管理下のDockerイメージの利用や、個人作成イメージ公開が可能

• Docker Compose• 複数コンテナで構成されたアプリを構築する際に使用

• Kitematic• 単一のPC上でDockerコンテナをGUIで管理できる

• Docker Trasted Registory• 旧名Docker Hub Enterprise、インターネット上にプライベートイメージを保管できる(有償、30日ト

ライアルあり)

• Docker Swarm• 複数のDocker実行ノードのクラスタリング(Docker1.8ではまだβ)

• Docker Registory• ローカル環境にDocker イメージを保管できる(Docker1.6以降)

本日説明した範囲

参考

© 2015 EXA CORPORATION 33

Page 34: アプリ屋もDockerをドカドカ使おう ~ Docker入門

The Docker1.5 User Guideの参考翻訳

• Dockerユーザガイドへようこそ• Docker Hubを使ってみよう• “Hello world”アプリのDocker化• コンテナの動作• Dockerイメージの動作• コンテナへのリンク• コンテナ内データの管理• Docker Hubの動作• Docker Compose• Docker Machine• Docker Swarm

左記リンクはすべて個人ブログ記事であり翻訳内容も保証されているものではありません。参照の際は、ご注意ください

• リファレンス• Dockerfile

• docker-compose.yml

• インストール• CentOS上にVagrantなしでDockerをインストール

• Docker Composeのインストール

参考

© 2015 EXA CORPORATION 34

Page 35: アプリ屋もDockerをドカドカ使おう ~ Docker入門

学習用環境の構築

• Dockerサーバ用PCを用意できる場合は、CentOSやUbuntuをインストールし、Docker最新版をインストールする

• 1台のPC上で学習する場合、Kitematicをインストールするか、Virtualbox/VMware Workstation Player上にCentOSやUbuntuを入れDockerサーバをインストールする• 私見では、Proxy環境下の場合はCentOS/Ubuntu環境下でDockerサーバをインストールするほうが楽

• Proxyなしでインターネット接続できる環境では、ほぼドキュメント通りに実行すればOK

参考

© 2015 EXA CORPORATION 35

Page 36: アプリ屋もDockerをドカドカ使おう ~ Docker入門

WindowsPC上にインストールする際の注意

• 2015/9/29時点ではWindows10未サポート

• Proxy環境は検索し情報を集めながらすすめること(筆者未実行)

• Virtualboxが未インストールの場合はインストールしておく• PCによってはBIOS設定変更(VT-x/AMD-x)が必要な場合あり• Windows8はタスクマネージャで設定確認できるらしい• Windows7の場合は、Microsoft ® Hardware-Assisted Virtualization Detection Toolをダウンロードし、実行しておく

• Kinematic をダウンロードし、実行すると必要なソフトウェアがインストールされる

• Docker Quick Start ターミナルを実行すると、Virtualbox上にdefaultという名前の仮想マシンが導入、起動される(インストール完了)

• インストール確認は docker run hello-world を実行する

参考

© 2015 EXA CORPORATION 36

Page 37: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Windows7上にKitematicをインストール

• BIOS設定でIntel-VT/VT-Xオン• AMDには対応していないらしい(未確認)

• 事前にVirtualbox最新版をインストール

• Docker Toolboxサイトからインストーラをダウンロードし実行する

• Docker Quick Start Terminal起動• 成功したら、docker run hello-worldを実行し動作確認し、終了させる

• 念のためPCを再起動し、Kitematicを起動• 起動前Virtualbox上の仮想マシン”default”は落としたままにしておく

© 2015 EXA CORPORATION 37

参考

Page 38: アプリ屋もDockerをドカドカ使おう ~ Docker入門

CentOS 7上にインストールする際の注意

• CentOS 7 標準リポジトリ上のDockerバージョンは1.7• Proxy環境下でインストールする場合は、/etc/sysconfig/docker に環境変数HTTP_PROXY, HTTPS_PROXY,NO_PROXYを指定する

• 書籍「Docker実践入門」にインストール手順紹介あり

• Docker公式サイト上は 1.8 をインストールする手順を紹介している• CentOS 7.0イメージを使っている場合は必ずyum upgradeすること

• https://docs.docker.com/articles/systemd/ にproxy指定方法あり(dockerデーモン起動前に実施すること)

• Kitematicがうまく動作しない場合は、イロイロ調べるより、VirtualboxやVMware Player上にCentOSをインストールしたほうが早いかも..

参考

© 2015 EXA CORPORATION 38

Page 39: アプリ屋もDockerをドカドカ使おう ~ Docker入門

CoreOSをインストールする際の注意

• ISOイメージをCD-ROMに刺し起動した状態はLive実行状態• coreos-installしないと実際にインストールされない

• dockerコマンドを試すレベルなら、この状態でも可能

• 2015/10/06時点でリリースされているCoreOSについて• PoderosaからSSH接続できないので、TeraTermなど他のターミナル接続ソフトを使用すること

• デフォルトでsshdが有効となっている

• Kitematic使用した際、Virtualbox上にCoreOSが適用される

© 2015 EXA CORPORATION 39

参考

Page 40: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Proxy環境下でCoreOSを使う

• /usr/share/oem/run作成#!/bin/bashsystemctl set-environemt http_proxy=http://proxy.fqdn:port/systemctl set-environemt https_proxy=http://proxy.fqdn:port/

• chmod a+x /usr/share/oem/run&&reboot しておく

• ~/.curlrc 新規作成proxy=http://proxy.fqdn:port/

• Gitコマンド実行(docker操作するユーザで)• git config global http.procxy http://proxy.fqdn:port/• git config global http.procxy http://proxy.fqdn:port/

• ~/.bashrc (rootユーザor新規ユーザ)export http_proxy=http://proxy.fqdn:port/export http_proxy=http://proxy.fqdn:port/

© 2015 EXA CORPORATION 40

参考

Page 41: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Jenkins公式イメージ使用時の注意

• 実行例• mkdir /jenkins_home && chown 102:102 /jenkins_home && chmoda+rwx /jenkins_home

• docker run -d -v /jenkins_home:/var/jenkins_home -p 8888:8080 --name=jenkins jenkins:latest

• docker stop Jenkins / docker start

• バックアップは docker stop jenkinsしたあと/Jenkins_homeをコピー

• リストアは /jenkins_homeを戻し、docker startもしくはdocker run

• 実行例にある通り、ホスト側の露出先が102:102で読み書き可能であること

© 2015 EXA CORPORATION 41

参考

Page 42: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Subversion実行イメージ作成時の注意

• Dockerfileサンプルの注意• 公式イメージはマイナーバージョンまでフル指定したほうが良い

• リストア時にリビジョンNo復帰までしなくてよいなら、VOLUMEによる/var/www/svn露出をやめ、Subversionクライアントで定期的にチェックアウトしたデータを保管してもよい

• 認証でKerberos+LDAPを使用したほうがパスワード管理しやすい

© 2015 EXA CORPORATION 42

<Location /svn>DAV svnSVNParentPath /var/www/svn/AuthType KerberosAuthName “FreeIPA Login(Kerberos+LDAP)"KrbMethodNegotiate onKrbMethodK5Passwd onKrbServiceName HTTPKrbAuthRealms WEBPOT.LOCALKrb5KeyTab /etc/httpd/conf/ipa.keytabKrbSaveCredentials onAuthLDAPUrl ldap://freeipa.fqdn/dc=XXXX,dc=YYYY?krbPrincipalNameRequire valid-user

# ErrorDocument 401 /ipa/errors/unauthorized.html</Location>

FreeIPA参照/etc/httpd/conf.modules.d/10-subversion.conf設定例

参考

Page 43: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Redmine公式イメージでコンテナ起動

• 以下のようなdocker-compose.ymlを書けばOK

• 2015/10/06時点の公式イメージ最新バージョンは3.0.5• 最新版は3.1.1

• README.mdにはmemcached対応については書いていなかった..

© 2015 EXA CORPORATION 43

red_pgsql:image: postgres:9.4.4environment:- POSTGRES_USER=redmine- POSTGRES_PASSWORD=secret- LANG=ja_JP.utf8

red:image: redmine:3.0.5links:- red_pgsql:postgres

volumes:- /redmine_files:/usr/src/redmine/files

ports:- "8083:3000"

参考

Page 44: アプリ屋もDockerをドカドカ使おう ~ Docker入門

Kubernetes

• クーバァネィティス:舵取り役という意味らしい

• 大量コンテナ管理、クラスタリング機能などを提供

• 複数コンテナをPodという単位で管理• Pod単位で複製可能

• ホストをまたいだ複数PodをMinionという単位で管理

• PodやMinion単位でネットワーク設定が可能

• コンテナでサービスを運用する人(基盤屋)向け• アプリ屋にはPanamaxのほうがあってそう..• なので筆者はまだ試してません..• Docker関連書籍によく紹介されている

© 2015 EXA CORPORATION 44

参考

Page 45: アプリ屋もDockerをドカドカ使おう ~ Docker入門

現在市販されている書籍 (1/2)

• Docker実践入門(紙・Kindle)• バランスよく書かれており、最初に購入しても問題なく学習できる• 最も新しい書籍だがバージョンは1.7ベースなので1.8の情報はない

• CentOS yumパッケージ管理下のdockerを使用している• 外部ユーティリティ情報が少ない(KubernetesとAtomic Hostは記述あり)

• Dockerエキスパート養成読本(紙・Kindle)• 雑誌記事を再編しただけのムックなので構成は良くないが、各記事が短いので短気な人向け(いっちょかみ向け)

• 情報は古いものも少なくないが、記述している範囲は広い

• Dockerを支える技術(Kindle)• 日経Linux連載記事をまとめた書籍• Linuxに関する技術的知識が必要、基盤技術者向けか• じっくり勉強したい人向け、私も買ったがまだ読みきっていません

© 2015 EXA CORPORATION 45

参考

※各著者の方々、スミマセン…

Page 46: アプリ屋もDockerをドカドカ使おう ~ Docker入門

現在市販されている書籍 (2/2)

• Dockerコンテナ実践検証(Kindle)• どこかの企業の技術検証部署が書いたレポートっぽい

• よくかけてるけどすぐ古くなるからその前に電子書籍にしちゃえ..的なにおいが

• 試行および私見が書かれているが手順などはほとんどない

• PanamaxやKuberbetesなどDocker Inc以外のツールなども網羅

• Docker入門~Immutable Infrastructureを実現する(Kindle)• 最初のDocker市販書籍、なので内容が古い

• 私はお世話にはなったが、これから始める人はもっと新しい情報からのほうがよい

• イントロ部は基盤屋向け、コマンド操作はUbuntuベースで記述

© 2015 EXA CORPORATION 46

参考

※各著者の方々、スミマセン…