SlideShare a Scribd company logo
1 of 46
Download to read offline
アプリ屋も
Dockerをドカドカ使おう
株式会社エクサ
シニアITアーキテクト
堀 扶
www.facebook.com/hori.tasuku
自己紹介
• 神奈川のSIer所属
• アプリと基盤の間で働く、今年でSE22年目
• 現在の業務は、全社標準化と技術サポート
• 開発プロセスおよび成果物の標準化
• プロジェクト支援ツールの標準化
お客様開発環境オフショア開発環境 自社内共通開発環境
自社内プロジェクト専用
開発環境
早く 安く
簡単に
できるだけ多くのプロジェクトに
最近良く聞く、Dockerは使えないか..
はじめに
© 2015 EXA CORPORATION 2
以下のサーバをDockerコンテナで試行
• Jenkins
• Subversion上で所定名称でタグ付けされたソースをITサーバへ自動デプロイ
• コンパイル&UT、SLOC計測、弊社独自の品質評価ツール適用も実行
• Subversion + WebDAV
• 構成管理サーバ
• ソースコードだけでなく設計書などの文書も管理
• Redmine
• バグトラッキングツール
• プロジェクト内でWBSアクティビティ化されていない作業をチケットで管理
ちょうど Docker コンテナの基本的な起動方法を網羅
① 公式イメージをそのままrun
② Dockerfileを使って build & run
③ 複数コンテナを一度に up
今回のセッションでこれらの手順を元に、Dockerの使い方を紹介します
はじめに
© 2015 EXA CORPORATION 3
目次
• はじめに
• Dockerについて
• Dockerの使い方
• 公式イメージをそのまま run
• Dockerfile を使って build & run
• 複数コンテナを一度に up
• さいごに
© 2015 EXA CORPORATION 4
Dockerとは
• コンピュータリソースを切り分けて使うソフトウェアの一つ
• Google社のサービスは全部コンテナらしい
• Linuxのコンテナ技術(LXC)を使う
• ユーザ空間のみ分離した環境のため従来の仮想化技術より効率的
• コンテナをコマンドラインで操作可能
物理マシン
カーネル空間
物理マシン
ゲストOS
ハイパバイザ
物理マシン
カーネル空間
ユーザ空間 ユーザ空間
仮想マシン
ホストOS + ハイパバイザ
ユーザ空間 ユーザ空間
ユーザ空間
ゲストOS
仮想マシン
ユーザ空間
ゲストOS
仮想マシン
ユーザ空間
Docker化仮想化
Dockerについて
© 2015 EXA CORPORATION 5
仮想マシンとDockerコンテナの違い
• OSのインストールから
• 複数のプロセス動作可能
• フルイメージなら共有可
• イメージのコード化不可
• 複雑なNW構成も選択可能
• ホストOSはLinux以外も可
• OS導入済み状態から
• 原則単一のプロセスのみ
• 差分イメージの共有も可能
• イメージのコード化可能
• ホストマシンとのNATのみ
• ホストOSは今のところLinuxの
み
仮想マシン Dockerコンテナ
Dockerについて
© 2015 EXA CORPORATION 6
Dockerfile
Docker動作環境
2つの構成要素
• Dockerサーバ:Linux OSが動作するマシン
• コンテナが実際に動作するサーバ
• Dockerクライアント:Windows/Mac OSでも動作、サーバ上でもOK
• DockerコマンドによるDockerサーバ上のコンテナ操作
dockerコマンド
によるコンテナ操作(CUI)
Linux OS
ユーザ空間 ユーザ空間 ユーザ空間
dockerデーモン
Dockerfile
《Dockerクライアント》
《Dockerサーバ》
Docker Engine
Dockerについて
Docker
Hub
公開イメージ
公式イメージ
ローカル
リポジトリ
イメージ
© 2015 EXA CORPORATION 7
Dockerコンテナ起動までの流れ
Docker
Hub
Docker Hubからイメージを docker pull
ローカル
リポジトリ
Dockerfileを使って docker build
自分のイメージを docker push
公式イメー
ジ
公開イメー
ジ 公式イメー
ジ
公開イメー
ジ
イメージ
イメージ
イメージ
公開イメー
ジ
Docker
コンテ
ナ
Docker
コンテ
ナ
Docker
コンテ
ナ
実行 docker run
Docker
コンテ
ナ
Docker
コンテ
ナ
Dockerについて
インターネット上で公
開したい場合のみ
© 2015 EXA CORPORATION 8
Dockerfile
Dockerfile
Docker Hub
• インターネット上のサービス
• GitHubのDocker版
• Dockerfile やビルドコンテンツ、イメージなどが格納されている
• GitHub Enterprise相当のサービスがDocker Trasted Registory(一部無料)
• インターネットを使いたくない→Docker Registoryを構築、代替にする
• Official: 公式イメージ
• Docker社が管理しているイメージ
• 使い方ドキュメントつき
• Public: 公開イメージ
• 個人で作成したコンテンツを公開可能
• 要アカウント取得(無料)
Docker
Hub
Dockerについて
主な公開イメージ© 2015 EXA CORPORATION 9
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
ローカルリポジトリ
• Docker Hubから取得したイメージをDockerサーバ上に一旦格納
• 格納されるイメージには必ず「イメージID」が付与される
• 各イメージにのラベルをつけることができる
• 形式:「<アカウント名>/<イメージ名>:<タグ名>」
• ローカルリポジトリ上のすべてのイメージ一覧表示→「docker
images」
Dockerについて
ローカル
リポジトリ
要素 説明
アカウント名 Docker Hub上のユーザ名
イメージ名 イメージ対象が一発で分かる名前をつける
タグ名 一般的にはバージョン番号(最新版は”latest”)
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUALSIZE
maryatdocker/docker-whale latest 7d9495d03763 5 minutes ago 273.7 MB
docker-whale latest 7d9495d03763 2 hours ago 273.7 MB© 2015 EXA CORPORATION 11
目次
• はじめに
• Dockerについて
• Dockerの使い方
• 公式イメージをそのまま run
• Dockerfile を使って build & run
• 複数コンテナを一度に up
• さいごに
© 2015 EXA CORPORATION 12
Dockerコンテナ起動までの流れ
Docker
Hub
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
① 公式イメージをそのまま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
Linux OS
Docker
コンテナ
《参考》DockerコンテナのNAT構成
© 2015 EXA CORPORATION 15
《Dockerサーバ》
eth0 docker0
veth0
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の使い方
外からは、
あたかもくっついたかのように見える
② 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
Dockerfile
• DockerコンテナのMakefileのようなもの
• Dockerfileに記述した順番にイメージ上で処理される
• 最初の「FROM」を使って使用するイメージ名を記述
• 「RUN」コマンドを上から順番に実行
• RUNを実行するごとにイメージが作成される
• 最終行の「CMD」にデーモンプロセスをコマンドライン実行
• systemctlでの起動は失敗する
• ビルドコンテンツ(ファイルやディレクトリ)をコンテナ上にCOPYや
ADD
• 外部のファイルをビルド時にコンテンツ上に取り込める
• コマンドリファレンスはこちらを参照のこと
Dockerの使い方
© 2015 EXA CORPORATION 17
Subversion: Dockerfile記述例
FROM centos:7
MAINTAINER "Tasuku Hori" <tasuku-hori@exa-corp.co.jp>
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 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
実行するプロセスを最後に記述する
実行時に-vや-pでDockerサーバ側に露出させることができる
実行時に-vや-pでDockerサーバ側に露出させることができる
Dockerの使い方
※本ファイルを実際に使用する場合は、at your own riskでお願いします
© 2015 EXA CORPORATION 18
コマンドラインから
インストールする手順を
上から順番に記述する
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
公開イメージ使用時のリスク
• 今回、公式イメージではなく公開イメージを使用した例を紹介
• 公開イメージは個人が作成したものである
• 公式イメージがない場合に
• 公式イメージがあっても最新バージョンが提供されていない場合に
• Redmine Officialには3.1.1はないが、sameersbn/redmineには3.1.1がある
• イメージ概要やインストール方法はドキュメントを確認すること
• 悪意ある公開者の可能性もある
• 当然何か合った場合は各自でリスクをとらなくてはならない
• Dockerはroot権限でコマンド実行を許可しているのと同等
• 気休めだが..
• イメージのみ公開している場合は避ける
• 参照数の少ないもの、更新頻度の低いものも避ける
Redmine3.1.1公開と同時に
イメージも公開している..
Dockerの使い方
© 2015 EXA CORPORATION 20
③ 複数コンテナを一度に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
Redmine: docker-compose.yml記述例
postgresql:
image: sameersbn/postgresql:9.4
volumes:
- /home/10001/postgresql/data:/var/lib/postgresql
environment:
- DB_USER=redmine
- DB_PASS=admin123
- DB_NAME=redmin
memcached:
image: sameersbn/memcached:latest
redmine10001:
image: sameersbn/redmine:3.1.1
links:
- 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
Docker
Hub
公開イメージ
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
Dockerイメージによる社内標準化推進
23
Docker
Trusted
Registory
カスタマイズ
済みコンテナ
カスタマイズ
済みコンテナ
カスタマイズ
済みコンテナ
PMOツール
カスタマイズ
済みコンテナ
テスト環境
カスタマイズ
済みコンテナ
カスタマイズ
済みコンテナ
カスタマイズ
済みコンテナ
カスタマイズ
済みコンテナ
Public IaaS/PaaSへ
社内仮想環境/*Stackへ
余ったPCなどへ
標準化担当
Dockerの使い方
Docker Incの有料サービス
組織内ローカルのリポジトリ
© 2015 EXA CORPORATION
インターネット上にリポジトリがあると、
パブリック・クラウドからオンプレミスまでイメージを共有できる インストール後
閉鎖環境へ持ち込み
オンプレのみであれば
Docker Repository(OSS)
で実現可能
目次
• はじめに
• Dockerについて
• Dockerの使い方
• 公式イメージをそのまま run
• Dockerfile を使って build & run
• 複数コンテナを一度に up
• さいごに
© 2015 EXA CORPORATION 24
おすすめ速習ルート
• 市販ムック本「Dockerエキスパート養成読本」か「Docker実践入
門」を流し読み
• 自分のPCに実行環境を作り、本のコマンドを試す
• 自分でJenkins → Subversion → Redmine を立ててみる
• 過去に作ったことのあるサーバがあればDockerで立ててみる
• VOLUMEを使い、Dockerコンテナ上データのバックアップ方法を理解する
• 実プロジェクトで使用するイメージを用意
• Docker Hub上の公式イメージドキュメントを読む&試す
• できるだけDocker Hub資源を使い、Dockerfileはなるべく書かない!
• 開発用PCに実行環境を入れて運用
© 2015 EXA CORPORATION 25
いっちょかみ
ドカドカ
ひととおり
書かなくてはならなくなったら基盤屋に依頼しよう!
さいごに
Dockerを覚えるべき人
• やはり基盤技術者、システムアーキテクト
• システムアーキテクチャを設計する人は必須
• ライフサイクルが短く、負荷見積が難しいシステム向き
• Public IaaS/PaaSとの親和性は比較的高い
• コマンドベースなので自動スケール設計、実装しやすい
• インストール手順、災害対策時などの退避や復旧手順の自動化
• オンプレミス環境からPublic Iaas/PaaSへのポータビリティの実現
• Public IaaSへ一般公開したくない独自イメージ提供→Docker Trusted
Repositoryが必要?
• ベースとなるGit/GitHubを使うスキルも必要
では、アプリ屋(アプリ開発者)は不要?
さいごに
© 2015 EXA CORPORATION 26
アプリ屋が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
アプリ屋向き実行環境:Kitematic
• Windows 7/8.x PCで動作するDocker GUI
• 現時点ではWindows10では動作しない
• 簡単インストール(Porxyなしの場合)
• 公式イメージをそのまま使用する場合はワンクリック起動
© 2015 EXA CORPORATION 28
t
p
s
:
/
/
w
w
w
.
y
o
u
t
u
b
e
.
c
o
m
/
w
a
t
s
:
/
/
w
w
w
.
y
o
u
t
u
b
e
.
c
o
m
/
w
a
t
c
h
Linux操作を知らないPMO向けツール
ただし、Docker Hub上のドキュメントは読む必要あり
さいごに
アプリ屋向き実行環境:CoreOS
• 必要最小限の機能に絞ったDockerコンテナ実行環境(Linux)
• クラスタリング(etcd)、分散システムツール(fleet)
• Windows7 + VMwarePlayer + CoreOS + Tera Term
• インストールが比較的簡単
• Proxy環境でも動作
• PMOでもなんとか扱えそう..
© 2015 EXA CORPORATION 29
さいごに
Ubuntu/CentOS/Fedora/RHEL..
Snappy Ubuntu Core
Atom Project (CentOS/RedHat)
Apache MESOS
CoreOS以外のDocker実行環境
Poderosaだと
動作しない
物理マシン
アプリ屋向き実行環境: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の起動停止、状態確認等
コンテナ運用者
コンテナの設定、起動停止等
さいごに
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
さいごに
あなたもDockerをドカドカ使ってみませんか?
本資料に記載の企業名称、製品名称は、米国および
その他の国における各社の登録商標です。
© 2015 EXA CORPORATION 32
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
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
学習用環境の構築
• 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
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
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
参考
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
CoreOSをインストールする際の注意
• ISOイメージをCD-ROMに刺し起動した状態はLive実行状態
• coreos-installしないと実際にインストールされない
• dockerコマンドを試すレベルなら、この状態でも可能
• 2015/10/06時点でリリースされているCoreOSについて
• PoderosaからSSH接続できないので、TeraTermなど他のターミナル接続
ソフトを使用すること
• デフォルトでsshdが有効となっている
• Kitematic使用した際、Virtualbox上にCoreOSが適用される
© 2015 EXA CORPORATION 39
参考
Proxy環境下でCoreOSを使う
• /usr/share/oem/run作成
#!/bin/bash
systemctl 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
参考
Jenkins公式イメージ使用時の注意
• 実行例
• mkdir /jenkins_home && chown 102:102 /jenkins_home && chmod
a+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
参考
Subversion実行イメージ作成時の注意
• Dockerfileサンプルの注意
• 公式イメージはマイナーバージョンまでフル指定したほうが良い
• リストア時にリビジョンNo復帰までしなくてよいなら、VOLUMEによる
/var/www/svn露出をやめ、Subversionクライアントで定期的にチェッ
クアウトしたデータを保管してもよい
• 認証でKerberos+LDAPを使用したほうがパスワード管理しやすい
© 2015 EXA CORPORATION 42
<Location /svn>
DAV svn
SVNParentPath /var/www/svn/
AuthType Kerberos
AuthName “FreeIPA Login(Kerberos+LDAP)"
KrbMethodNegotiate on
KrbMethodK5Passwd on
KrbServiceName HTTP
KrbAuthRealms WEBPOT.LOCAL
Krb5KeyTab /etc/httpd/conf/ipa.keytab
KrbSaveCredentials on
AuthLDAPUrl ldap://freeipa.fqdn/dc=XXXX,dc=YYYY?krbPrincipalName
Require valid-user
# ErrorDocument 401 /ipa/errors/unauthorized.html
</Location>
FreeIPA参照/etc/httpd/conf.modules.d/10-subversion.conf設定例
参考
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.4
environment:
- POSTGRES_USER=redmine
- POSTGRES_PASSWORD=secret
- LANG=ja_JP.utf8
red:
image: redmine:3.0.5
links:
- red_pgsql:postgres
volumes:
- /redmine_files:/usr/src/redmine/files
ports:
- "8083:3000"
参考
Kubernetes
• クーバァネィティス:舵取り役という意味らしい
• 大量コンテナ管理、クラスタリング機能などを提供
• 複数コンテナをPodという単位で管理
• Pod単位で複製可能
• ホストをまたいだ複数PodをMinionという単位で管理
• PodやMinion単位でネットワーク設定が可能
• コンテナでサービスを運用する人(基盤屋)向け
• アプリ屋にはPanamaxのほうがあってそう..
• なので筆者はまだ試してません..
• Docker関連書籍によく紹介されている
© 2015 EXA CORPORATION 44
参考
現在市販されている書籍 (1/2)
• Docker実践入門(紙・Kindle)
• バランスよく書かれており、最初に購入しても問題なく学習できる
• 最も新しい書籍だがバージョンは1.7ベースなので1.8の情報はない
• CentOS yumパッケージ管理下のdockerを使用している
• 外部ユーティリティ情報が少ない(KubernetesとAtomic Hostは記述あり)
• Dockerエキスパート養成読本(紙・Kindle)
• 雑誌記事を再編しただけのムックなので構成は良くないが、各記事が短いの
で短気な人向け(いっちょかみ向け)
• 情報は古いものも少なくないが、記述している範囲は広い
• Dockerを支える技術(Kindle)
• 日経Linux連載記事をまとめた書籍
• Linuxに関する技術的知識が必要、基盤技術者向けか
• じっくり勉強したい人向け、私も買ったがまだ読みきっていません
© 2015 EXA CORPORATION 45
参考
※各著者の方々、スミマセン…
現在市販されている書籍 (2/2)
• Dockerコンテナ実践検証(Kindle)
• どこかの企業の技術検証部署が書いたレポートっぽい
• よくかけてるけどすぐ古くなるからその前に電子書籍にしちゃえ..的なにおいが
• 試行および私見が書かれているが手順などはほとんどない
• PanamaxやKuberbetesなどDocker Inc以外のツールなども網羅
• Docker入門~Immutable Infrastructureを実現する(Kindle)
• 最初のDocker市販書籍、なので内容が古い
• 私はお世話にはなったが、これから始める人はもっと新しい情報からの
ほうがよい
• イントロ部は基盤屋向け、コマンド操作はUbuntuベースで記述
© 2015 EXA CORPORATION 46
参考
※各著者の方々、スミマセン…

More Related Content

What's hot

コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話torisoup
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]DeNA
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話torisoup
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
Redmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システム
Redmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システムRedmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システム
Redmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システムGo Maeda
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方Daisaku Mochizuki
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ SEGADevTech
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOGame Tools & Middleware Forum
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門demuyan
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Yoshifumi Kawai
 
挫折しないRedmine (2022)
 挫折しないRedmine  (2022) 挫折しないRedmine  (2022)
挫折しないRedmine (2022)Go Maeda
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理torisoup
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングSatoshi Kodaira
 

What's hot (20)

コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
Redmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システム
Redmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システムRedmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システム
Redmine 4.2で作るヘルプデスク向け問い合わせ受付・管理システム
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
UnityのMultiplayサービスの得意な事
UnityのMultiplayサービスの得意な事UnityのMultiplayサービスの得意な事
UnityのMultiplayサービスの得意な事
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
挫折しないRedmine (2022)
 挫折しないRedmine  (2022) 挫折しないRedmine  (2022)
挫折しないRedmine (2022)
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 

Viewers also liked

Watson Explorerを使ったテキストマイニング
Watson Explorerを使ったテキストマイニングWatson Explorerを使ったテキストマイニング
Watson Explorerを使ったテキストマイニングHori Tasuku
 
子どもの言語獲得のモデル化とNN Language ModelsNN
子どもの言語獲得のモデル化とNN Language ModelsNN 子どもの言語獲得のモデル化とNN Language ModelsNN
子どもの言語獲得のモデル化とNN Language ModelsNN Chiba Institute of Technology
 
RHEL, CentOS 7 に移行しよう! LT
RHEL, CentOS 7 に移行しよう! LTRHEL, CentOS 7 に移行しよう! LT
RHEL, CentOS 7 に移行しよう! LTEmma Haruka Iwao
 
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 4Emma Haruka Iwao
 
IDCF クラウド meets Node-RED !
IDCF クラウド meets Node-RED !IDCF クラウド meets Node-RED !
IDCF クラウド meets Node-RED !K Kimura
 
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川SORACOM,INC
 
Watsonにあなたの知識を教えよう
Watsonにあなたの知識を教えようWatsonにあなたの知識を教えよう
Watsonにあなたの知識を教えようAkiko Murakami
 
20150902 Bluemix Challenge Garden Hori LT
20150902 Bluemix Challenge Garden Hori LT20150902 Bluemix Challenge Garden Hori LT
20150902 Bluemix Challenge Garden Hori LTHori Tasuku
 
Watson API トレーニング 20160716 rev02
Watson API トレーニング 20160716 rev02Watson API トレーニング 20160716 rev02
Watson API トレーニング 20160716 rev02Hiroaki Komine
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
IBMワトソン 勉強会 20161121a
IBMワトソン 勉強会 20161121aIBMワトソン 勉強会 20161121a
IBMワトソン 勉強会 20161121aMaho Takara
 
子供の言語獲得と機械の言語獲得
子供の言語獲得と機械の言語獲得子供の言語獲得と機械の言語獲得
子供の言語獲得と機械の言語獲得Yuya Unno
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 

Viewers also liked (13)

Watson Explorerを使ったテキストマイニング
Watson Explorerを使ったテキストマイニングWatson Explorerを使ったテキストマイニング
Watson Explorerを使ったテキストマイニング
 
子どもの言語獲得のモデル化とNN Language ModelsNN
子どもの言語獲得のモデル化とNN Language ModelsNN 子どもの言語獲得のモデル化とNN Language ModelsNN
子どもの言語獲得のモデル化とNN Language ModelsNN
 
RHEL, CentOS 7 に移行しよう! LT
RHEL, CentOS 7 に移行しよう! LTRHEL, CentOS 7 に移行しよう! LT
RHEL, CentOS 7 に移行しよう! LT
 
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
 
IDCF クラウド meets Node-RED !
IDCF クラウド meets Node-RED !IDCF クラウド meets Node-RED !
IDCF クラウド meets Node-RED !
 
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川
日経ITpro EXPO 2015: 次世代IoTアーキテクチャ CEO玉川、CTO安川
 
Watsonにあなたの知識を教えよう
Watsonにあなたの知識を教えようWatsonにあなたの知識を教えよう
Watsonにあなたの知識を教えよう
 
20150902 Bluemix Challenge Garden Hori LT
20150902 Bluemix Challenge Garden Hori LT20150902 Bluemix Challenge Garden Hori LT
20150902 Bluemix Challenge Garden Hori LT
 
Watson API トレーニング 20160716 rev02
Watson API トレーニング 20160716 rev02Watson API トレーニング 20160716 rev02
Watson API トレーニング 20160716 rev02
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
IBMワトソン 勉強会 20161121a
IBMワトソン 勉強会 20161121aIBMワトソン 勉強会 20161121a
IBMワトソン 勉強会 20161121a
 
子供の言語獲得と機械の言語獲得
子供の言語獲得と機械の言語獲得子供の言語獲得と機械の言語獲得
子供の言語獲得と機械の言語獲得
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 

Similar to アプリ屋もDockerをドカドカ使おう ~ Docker入門

オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門Tsukasa Kato
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするRyo Adachi
 
自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with Docker自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with DockeriPride Co., Ltd.
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
SharePoint Framework Extension 基礎講座
SharePoint Framework Extension 基礎講座SharePoint Framework Extension 基礎講座
SharePoint Framework Extension 基礎講座Hiroaki Oikawa
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうけるcf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうけるTakeshi Morikawa
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker74th
 
はじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxはじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxKazushi Kamegawa
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築MILI-LLC
 
Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料
Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料
Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料Tomoya Kitayama
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた日本マイクロソフト株式会社
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方Kento Aoyama
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料teruyaono1
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Microsoft Corporation
 

Similar to アプリ屋もDockerをドカドカ使おう ~ Docker入門 (20)

オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングする
 
自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with Docker自作アプリをデプロイしてみた with Docker
自作アプリをデプロイしてみた with Docker
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
SharePoint Framework Extension 基礎講座
SharePoint Framework Extension 基礎講座SharePoint Framework Extension 基礎講座
SharePoint Framework Extension 基礎講座
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうけるcf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
 
はじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxはじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & Linux
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築明日からはじめられる Docker + さくらvpsを使った開発環境構築
明日からはじめられる Docker + さくらvpsを使った開発環境構築
 
Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料
Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料
Dockerを徹底活用したSoftLayer環境にお けるディープラーニング開発環境の構築 - Alpaca Cloud Days発表資料
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
 

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

  • 2. 自己紹介 • 神奈川のSIer所属 • アプリと基盤の間で働く、今年でSE22年目 • 現在の業務は、全社標準化と技術サポート • 開発プロセスおよび成果物の標準化 • プロジェクト支援ツールの標準化 お客様開発環境オフショア開発環境 自社内共通開発環境 自社内プロジェクト専用 開発環境 早く 安く 簡単に できるだけ多くのプロジェクトに 最近良く聞く、Dockerは使えないか.. はじめに © 2015 EXA CORPORATION 2
  • 3. 以下のサーバをDockerコンテナで試行 • Jenkins • Subversion上で所定名称でタグ付けされたソースをITサーバへ自動デプロイ • コンパイル&UT、SLOC計測、弊社独自の品質評価ツール適用も実行 • Subversion + WebDAV • 構成管理サーバ • ソースコードだけでなく設計書などの文書も管理 • Redmine • バグトラッキングツール • プロジェクト内でWBSアクティビティ化されていない作業をチケットで管理 ちょうど Docker コンテナの基本的な起動方法を網羅 ① 公式イメージをそのままrun ② Dockerfileを使って build & run ③ 複数コンテナを一度に up 今回のセッションでこれらの手順を元に、Dockerの使い方を紹介します はじめに © 2015 EXA CORPORATION 3
  • 4. 目次 • はじめに • Dockerについて • Dockerの使い方 • 公式イメージをそのまま run • Dockerfile を使って build & run • 複数コンテナを一度に up • さいごに © 2015 EXA CORPORATION 4
  • 5. Dockerとは • コンピュータリソースを切り分けて使うソフトウェアの一つ • Google社のサービスは全部コンテナらしい • Linuxのコンテナ技術(LXC)を使う • ユーザ空間のみ分離した環境のため従来の仮想化技術より効率的 • コンテナをコマンドラインで操作可能 物理マシン カーネル空間 物理マシン ゲストOS ハイパバイザ 物理マシン カーネル空間 ユーザ空間 ユーザ空間 仮想マシン ホストOS + ハイパバイザ ユーザ空間 ユーザ空間 ユーザ空間 ゲストOS 仮想マシン ユーザ空間 ゲストOS 仮想マシン ユーザ空間 Docker化仮想化 Dockerについて © 2015 EXA CORPORATION 5
  • 6. 仮想マシンとDockerコンテナの違い • OSのインストールから • 複数のプロセス動作可能 • フルイメージなら共有可 • イメージのコード化不可 • 複雑なNW構成も選択可能 • ホストOSはLinux以外も可 • OS導入済み状態から • 原則単一のプロセスのみ • 差分イメージの共有も可能 • イメージのコード化可能 • ホストマシンとのNATのみ • ホストOSは今のところLinuxの み 仮想マシン Dockerコンテナ Dockerについて © 2015 EXA CORPORATION 6 Dockerfile
  • 7. Docker動作環境 2つの構成要素 • Dockerサーバ:Linux OSが動作するマシン • コンテナが実際に動作するサーバ • Dockerクライアント:Windows/Mac OSでも動作、サーバ上でもOK • DockerコマンドによるDockerサーバ上のコンテナ操作 dockerコマンド によるコンテナ操作(CUI) Linux OS ユーザ空間 ユーザ空間 ユーザ空間 dockerデーモン Dockerfile 《Dockerクライアント》 《Dockerサーバ》 Docker Engine Dockerについて Docker Hub 公開イメージ 公式イメージ ローカル リポジトリ イメージ © 2015 EXA CORPORATION 7
  • 8. Dockerコンテナ起動までの流れ Docker Hub Docker Hubからイメージを docker pull ローカル リポジトリ Dockerfileを使って docker build 自分のイメージを docker push 公式イメー ジ 公開イメー ジ 公式イメー ジ 公開イメー ジ イメージ イメージ イメージ 公開イメー ジ Docker コンテ ナ Docker コンテ ナ Docker コンテ ナ 実行 docker run Docker コンテ ナ Docker コンテ ナ Dockerについて インターネット上で公 開したい場合のみ © 2015 EXA CORPORATION 8 Dockerfile Dockerfile
  • 9. Docker Hub • インターネット上のサービス • GitHubのDocker版 • Dockerfile やビルドコンテンツ、イメージなどが格納されている • GitHub Enterprise相当のサービスがDocker Trasted Registory(一部無料) • インターネットを使いたくない→Docker Registoryを構築、代替にする • Official: 公式イメージ • Docker社が管理しているイメージ • 使い方ドキュメントつき • Public: 公開イメージ • 個人で作成したコンテンツを公開可能 • 要アカウント取得(無料) Docker Hub Dockerについて 主な公開イメージ© 2015 EXA CORPORATION 9
  • 10. 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
  • 11. ローカルリポジトリ • Docker Hubから取得したイメージをDockerサーバ上に一旦格納 • 格納されるイメージには必ず「イメージID」が付与される • 各イメージにのラベルをつけることができる • 形式:「<アカウント名>/<イメージ名>:<タグ名>」 • ローカルリポジトリ上のすべてのイメージ一覧表示→「docker images」 Dockerについて ローカル リポジトリ 要素 説明 アカウント名 Docker Hub上のユーザ名 イメージ名 イメージ対象が一発で分かる名前をつける タグ名 一般的にはバージョン番号(最新版は”latest”) $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUALSIZE maryatdocker/docker-whale latest 7d9495d03763 5 minutes ago 273.7 MB docker-whale latest 7d9495d03763 2 hours ago 273.7 MB© 2015 EXA CORPORATION 11
  • 12. 目次 • はじめに • Dockerについて • Dockerの使い方 • 公式イメージをそのまま run • Dockerfile を使って build & run • 複数コンテナを一度に up • さいごに © 2015 EXA CORPORATION 12
  • 13. Dockerコンテナ起動までの流れ Docker Hub 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
  • 14. ① 公式イメージをそのまま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
  • 15. Linux OS Docker コンテナ 《参考》DockerコンテナのNAT構成 © 2015 EXA CORPORATION 15 《Dockerサーバ》 eth0 docker0 veth0 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の使い方 外からは、 あたかもくっついたかのように見える
  • 16. ② 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
  • 17. Dockerfile • DockerコンテナのMakefileのようなもの • Dockerfileに記述した順番にイメージ上で処理される • 最初の「FROM」を使って使用するイメージ名を記述 • 「RUN」コマンドを上から順番に実行 • RUNを実行するごとにイメージが作成される • 最終行の「CMD」にデーモンプロセスをコマンドライン実行 • systemctlでの起動は失敗する • ビルドコンテンツ(ファイルやディレクトリ)をコンテナ上にCOPYや ADD • 外部のファイルをビルド時にコンテンツ上に取り込める • コマンドリファレンスはこちらを参照のこと Dockerの使い方 © 2015 EXA CORPORATION 17
  • 18. Subversion: Dockerfile記述例 FROM centos:7 MAINTAINER "Tasuku Hori" <tasuku-hori@exa-corp.co.jp> 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 80 CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] 実行するプロセスを最後に記述する 実行時に-vや-pでDockerサーバ側に露出させることができる 実行時に-vや-pでDockerサーバ側に露出させることができる Dockerの使い方 ※本ファイルを実際に使用する場合は、at your own riskでお願いします © 2015 EXA CORPORATION 18 コマンドラインから インストールする手順を 上から順番に記述する
  • 19. 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
  • 20. 公開イメージ使用時のリスク • 今回、公式イメージではなく公開イメージを使用した例を紹介 • 公開イメージは個人が作成したものである • 公式イメージがない場合に • 公式イメージがあっても最新バージョンが提供されていない場合に • Redmine Officialには3.1.1はないが、sameersbn/redmineには3.1.1がある • イメージ概要やインストール方法はドキュメントを確認すること • 悪意ある公開者の可能性もある • 当然何か合った場合は各自でリスクをとらなくてはならない • Dockerはroot権限でコマンド実行を許可しているのと同等 • 気休めだが.. • イメージのみ公開している場合は避ける • 参照数の少ないもの、更新頻度の低いものも避ける Redmine3.1.1公開と同時に イメージも公開している.. Dockerの使い方 © 2015 EXA CORPORATION 20
  • 21. ③ 複数コンテナを一度に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
  • 22. Redmine: docker-compose.yml記述例 postgresql: image: sameersbn/postgresql:9.4 volumes: - /home/10001/postgresql/data:/var/lib/postgresql environment: - DB_USER=redmine - DB_PASS=admin123 - DB_NAME=redmin memcached: image: sameersbn/memcached:latest redmine10001: image: sameersbn/redmine:3.1.1 links: - 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 Docker Hub 公開イメージ 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
  • 23. Dockerイメージによる社内標準化推進 23 Docker Trusted Registory カスタマイズ 済みコンテナ カスタマイズ 済みコンテナ カスタマイズ 済みコンテナ PMOツール カスタマイズ 済みコンテナ テスト環境 カスタマイズ 済みコンテナ カスタマイズ 済みコンテナ カスタマイズ 済みコンテナ カスタマイズ 済みコンテナ Public IaaS/PaaSへ 社内仮想環境/*Stackへ 余ったPCなどへ 標準化担当 Dockerの使い方 Docker Incの有料サービス 組織内ローカルのリポジトリ © 2015 EXA CORPORATION インターネット上にリポジトリがあると、 パブリック・クラウドからオンプレミスまでイメージを共有できる インストール後 閉鎖環境へ持ち込み オンプレのみであれば Docker Repository(OSS) で実現可能
  • 24. 目次 • はじめに • Dockerについて • Dockerの使い方 • 公式イメージをそのまま run • Dockerfile を使って build & run • 複数コンテナを一度に up • さいごに © 2015 EXA CORPORATION 24
  • 25. おすすめ速習ルート • 市販ムック本「Dockerエキスパート養成読本」か「Docker実践入 門」を流し読み • 自分のPCに実行環境を作り、本のコマンドを試す • 自分でJenkins → Subversion → Redmine を立ててみる • 過去に作ったことのあるサーバがあればDockerで立ててみる • VOLUMEを使い、Dockerコンテナ上データのバックアップ方法を理解する • 実プロジェクトで使用するイメージを用意 • Docker Hub上の公式イメージドキュメントを読む&試す • できるだけDocker Hub資源を使い、Dockerfileはなるべく書かない! • 開発用PCに実行環境を入れて運用 © 2015 EXA CORPORATION 25 いっちょかみ ドカドカ ひととおり 書かなくてはならなくなったら基盤屋に依頼しよう! さいごに
  • 26. Dockerを覚えるべき人 • やはり基盤技術者、システムアーキテクト • システムアーキテクチャを設計する人は必須 • ライフサイクルが短く、負荷見積が難しいシステム向き • Public IaaS/PaaSとの親和性は比較的高い • コマンドベースなので自動スケール設計、実装しやすい • インストール手順、災害対策時などの退避や復旧手順の自動化 • オンプレミス環境からPublic Iaas/PaaSへのポータビリティの実現 • Public IaaSへ一般公開したくない独自イメージ提供→Docker Trusted Repositoryが必要? • ベースとなるGit/GitHubを使うスキルも必要 では、アプリ屋(アプリ開発者)は不要? さいごに © 2015 EXA CORPORATION 26
  • 27. アプリ屋が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
  • 28. アプリ屋向き実行環境:Kitematic • Windows 7/8.x PCで動作するDocker GUI • 現時点ではWindows10では動作しない • 簡単インストール(Porxyなしの場合) • 公式イメージをそのまま使用する場合はワンクリック起動 © 2015 EXA CORPORATION 28 t p s : / / w w w . y o u t u b e . c o m / w a t s : / / w w w . y o u t u b e . c o m / w a t c h Linux操作を知らないPMO向けツール ただし、Docker Hub上のドキュメントは読む必要あり さいごに
  • 29. アプリ屋向き実行環境:CoreOS • 必要最小限の機能に絞ったDockerコンテナ実行環境(Linux) • クラスタリング(etcd)、分散システムツール(fleet) • Windows7 + VMwarePlayer + CoreOS + Tera Term • インストールが比較的簡単 • Proxy環境でも動作 • PMOでもなんとか扱えそう.. © 2015 EXA CORPORATION 29 さいごに Ubuntu/CentOS/Fedora/RHEL.. Snappy Ubuntu Core Atom Project (CentOS/RedHat) Apache MESOS CoreOS以外のDocker実行環境 Poderosaだと 動作しない
  • 30. 物理マシン アプリ屋向き実行環境: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の起動停止、状態確認等 コンテナ運用者 コンテナの設定、起動停止等 さいごに
  • 31. 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 さいごに
  • 33. 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
  • 34. 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
  • 35. 学習用環境の構築 • 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
  • 36. 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
  • 37. 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 参考
  • 38. 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
  • 39. CoreOSをインストールする際の注意 • ISOイメージをCD-ROMに刺し起動した状態はLive実行状態 • coreos-installしないと実際にインストールされない • dockerコマンドを試すレベルなら、この状態でも可能 • 2015/10/06時点でリリースされているCoreOSについて • PoderosaからSSH接続できないので、TeraTermなど他のターミナル接続 ソフトを使用すること • デフォルトでsshdが有効となっている • Kitematic使用した際、Virtualbox上にCoreOSが適用される © 2015 EXA CORPORATION 39 参考
  • 40. Proxy環境下でCoreOSを使う • /usr/share/oem/run作成 #!/bin/bash systemctl 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 参考
  • 41. Jenkins公式イメージ使用時の注意 • 実行例 • mkdir /jenkins_home && chown 102:102 /jenkins_home && chmod a+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 参考
  • 42. Subversion実行イメージ作成時の注意 • Dockerfileサンプルの注意 • 公式イメージはマイナーバージョンまでフル指定したほうが良い • リストア時にリビジョンNo復帰までしなくてよいなら、VOLUMEによる /var/www/svn露出をやめ、Subversionクライアントで定期的にチェッ クアウトしたデータを保管してもよい • 認証でKerberos+LDAPを使用したほうがパスワード管理しやすい © 2015 EXA CORPORATION 42 <Location /svn> DAV svn SVNParentPath /var/www/svn/ AuthType Kerberos AuthName “FreeIPA Login(Kerberos+LDAP)" KrbMethodNegotiate on KrbMethodK5Passwd on KrbServiceName HTTP KrbAuthRealms WEBPOT.LOCAL Krb5KeyTab /etc/httpd/conf/ipa.keytab KrbSaveCredentials on AuthLDAPUrl ldap://freeipa.fqdn/dc=XXXX,dc=YYYY?krbPrincipalName Require valid-user # ErrorDocument 401 /ipa/errors/unauthorized.html </Location> FreeIPA参照/etc/httpd/conf.modules.d/10-subversion.conf設定例 参考
  • 43. 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.4 environment: - POSTGRES_USER=redmine - POSTGRES_PASSWORD=secret - LANG=ja_JP.utf8 red: image: redmine:3.0.5 links: - red_pgsql:postgres volumes: - /redmine_files:/usr/src/redmine/files ports: - "8083:3000" 参考
  • 44. Kubernetes • クーバァネィティス:舵取り役という意味らしい • 大量コンテナ管理、クラスタリング機能などを提供 • 複数コンテナをPodという単位で管理 • Pod単位で複製可能 • ホストをまたいだ複数PodをMinionという単位で管理 • PodやMinion単位でネットワーク設定が可能 • コンテナでサービスを運用する人(基盤屋)向け • アプリ屋にはPanamaxのほうがあってそう.. • なので筆者はまだ試してません.. • Docker関連書籍によく紹介されている © 2015 EXA CORPORATION 44 参考
  • 45. 現在市販されている書籍 (1/2) • Docker実践入門(紙・Kindle) • バランスよく書かれており、最初に購入しても問題なく学習できる • 最も新しい書籍だがバージョンは1.7ベースなので1.8の情報はない • CentOS yumパッケージ管理下のdockerを使用している • 外部ユーティリティ情報が少ない(KubernetesとAtomic Hostは記述あり) • Dockerエキスパート養成読本(紙・Kindle) • 雑誌記事を再編しただけのムックなので構成は良くないが、各記事が短いの で短気な人向け(いっちょかみ向け) • 情報は古いものも少なくないが、記述している範囲は広い • Dockerを支える技術(Kindle) • 日経Linux連載記事をまとめた書籍 • Linuxに関する技術的知識が必要、基盤技術者向けか • じっくり勉強したい人向け、私も買ったがまだ読みきっていません © 2015 EXA CORPORATION 45 参考 ※各著者の方々、スミマセン…
  • 46. 現在市販されている書籍 (2/2) • Dockerコンテナ実践検証(Kindle) • どこかの企業の技術検証部署が書いたレポートっぽい • よくかけてるけどすぐ古くなるからその前に電子書籍にしちゃえ..的なにおいが • 試行および私見が書かれているが手順などはほとんどない • PanamaxやKuberbetesなどDocker Inc以外のツールなども網羅 • Docker入門~Immutable Infrastructureを実現する(Kindle) • 最初のDocker市販書籍、なので内容が古い • 私はお世話にはなったが、これから始める人はもっと新しい情報からの ほうがよい • イントロ部は基盤屋向け、コマンド操作はUbuntuベースで記述 © 2015 EXA CORPORATION 46 参考 ※各著者の方々、スミマセン…