今さら聞けない人のためのdocker超入門 – openstack最新情報セミナー...

42
今さら聞けない人のための Docker超入門 日本仮想化技術株式会社 代表取締役社長兼CEO 宮原 徹(@tmiyahar) http://VirtualTech.jp

Upload: virtualtech-japan-inc

Post on 15-Jul-2015

2.439 views

Category:

Technology


2 download

TRANSCRIPT

今さら聞けない人のためのDocker超入門

日本仮想化技術株式会社

代表取締役社長兼CEO

宮原徹(@tmiyahar)

http://VirtualTech.jp

自己紹介

• 本名:宮原徹• 1972年1月神奈川県生まれ• 1994年3月中央大学法学部法律学科卒業• 1994年4月日本オラクル株式会社入社

– PCサーバ向けRDBMS製品マーケティングに従事– Linux版Oracle8の日本市場向け出荷に貢献

• 2000年3月株式会社デジタルデザイン東京支社長および株式会社アクアリウムコンピューター代表取締役社長に就任– 2000年6月 (株)デジタルデザイン、ナスダック・ジャパン上場(4764)

• 2001年1月株式会社びぎねっと設立• 2006年12月日本仮想化技術株式会社設立• 2008年10月 IPA「日本OSS貢献者賞」受賞• 2009年10月日中韓OSSアワード 「特別貢献賞」受賞

2

日本仮想化技術株式会社概要

• 社名:日本仮想化技術株式会社– 英語名:VirtualTech Japan Inc.– 略称:日本仮想化技術/VTJ

• 設立:2006年12月• 資本金:2,000万円• 売上高:1億3,573万円(2013年7月期)• 本社:東京都渋谷区渋谷1-8-1• 取締役:宮原徹(代表取締役社長兼CEO)• 伊藤宏通(取締役CTO)• スタッフ:8名(うち、6名が仮想化技術専門エンジニアです)• URL:http://VirtualTech.jp/• 仮想化技術に関する研究および開発

– 仮想化技術に関する各種調査– 仮想化技術に関連したソフトウェアの開発– 仮想化技術を導入したシステムの構築– OpenStackの導入支援・新規機能開発

ベンダーニュートラルな独立系仮想化技術のエキスパート集団

3

情報サイト:EnterpriseCloud.jp

• OpenStackで始めるエ

ンタープライズクラウドの情報サイト

• OpenStack導入手順書のダウンロード

• 各種プレゼン資料

• その他ブログ記事

4

本日のアジェンダ

• Dockerを動かそう• Dockerコンテナのライフサイクル• Dockerの操作とトラブルシューティング基礎の基礎• Dockerfileを書いてみる• DockerとOpenStack

• スタッフ募集のお知らせ

• Dockerを触ったことがない、という方向けです• ごく基本的な話しかしていません

• バージョンアップして変更になったり、もっと色々なテクニックも存在します

5

Dockerを動かそう

6

Dockerの特徴

• 1コンテナ1プロセスで動作する– ハイパーバイザーのオーバーヘッドが無い

• ≒コンテナ内で1プロセスが動作する– サービスプロセスと並行で対話型シェルを動かすなどの考え方は基本的に無い

– コンテナの中であれもこれも動作させるのには向かない

• Dockerイメージはファイルシステム– chrootを思い浮かべるとちょうどいい

7

Dockerをインストールする

1. CentOS 7をインストール

2. Dockerパッケージをインストール

– # yum install docker

3. bridge-utilsパッケージも入れておきます

– # yum install bridge-utils

4. dockerサービスを起動しておきます

– # systemctl start docker.service

– # systemctl enable docker.service

8

Dockerイメージをダウンロード

1. CentOS 7のDockerイメージを検索

– # docker search centos

2. CentOSのDockerイメージをダウンロード

– # docker pull centos

– 最新版(latest)がダウンロードされる

3. Dockerイメージを確認

– # docker images

– 基本的にはIDで識別(同一IDに複数TAGも)

9

Dockerコンテナを実行(基本)

1. CentOSイメージでコンテナを実行

– # docker run -it centos /bin/bash

– -i, --interactive=true|false

– -t, --tty=true|false

2. 実行中のコンテナを確認

– # docker ps -a

– -a, --all=true|false

– 一意のIDと名前が割り当てられる

10

Dockerコンテナ実行(応用)

1. コンテナ名を付ける

– # docker run --name=名前イメージ名コマンド

2. シェルからコマンドを実行させる

– # docker run イメージ名 /bin/bash -c "コマンド"

– yumでパッケージをインストールしたり

3. より複雑な実行時処理を行いたい場合はDockerfileを記述する(後述)

– どこまで複雑にするかはケースバイケース?

11

Dockerコンテナのライフサイクル

12

イメージとコンテナの変移

13

centos

①コンテナとして実行(docker run)

httpd ② # yum install httpd

centos

httpd

③コンテナをイメージ化(docker commit)④イメージをコンテナ化(docker run)

centos

コンテナをイメージ化

1. コンテナにhttpdパッケージをインストール

– # docker run --name=httpd centos /bin/bash -c

"yum install httpd -y"

2. httpdコンテナをコミットしてイメージ化

– # docker commit httpd httpd_template

3. イメージを確認

– # docker images

14

新たなイメージからコンテナ実行

1. コンテナでhttpdを実行し、コンテナのポート80

番をホストの8080番に紐付ける

– # docker run -d -p 8080:80 --name=web1

httpd_template /usr/sbin/htttpd -D FOREGROUND

– -d, --detach=true|false

2. ポートが紐付いていることを確認

– # docker ps -a

– # curl localhost:8080

15

httpdが動かない!?

• CentOS 7.1へのバージョンアップが原因

• /run mounted as tmpfs in container and causes changes in the directory to not be persistent

– https://bugzilla.redhat.com/show_bug.cgi?id=1194542

• Dockerコンテナ内に/run/httpdディレクトリが存在しない– systemd-tmpfiles-setup.serviceが作成する

16

httpdが動かない場合の手順

1. 対話型でDockerコンテナを起動– # docker run -it --name=httpd centos /bin/bash

2. httpdパッケージをインストールする– # yum install httpd

3. Bug情報にあるシェルスクリプトを仕込む

4. docker commitする– # docker commit httpd httpd_template

5. docker runする時にシェルスクリプトを起動する– # docker run -d -p 8080:80 --name=web1

httpd_template /usr/bin/my_httpd_startup.bash

17

/usr/bin/my_httpd_startup.bash

#!/bin/bash

# Make sure we're not confused by old, incompletely-shutdown httpd

# context after restarting the container. httpd won't start correctly

# if it thinks it is already running.

rm -rf /run/httpd/*

# need to create directories per /usr/lib/tmpfiles.d/httpd.conf

## d /run/httpd 710 root apache

## d /run/httpd/htcacheclean 700 apache apache

mkdir -p /run/httpd/htcacheclean

chmod 710 /run/httpd

chmod 700 /run/httpd/htcacheclean

chown root:apache /run/httpd

chown apache:apache /run/httpd/htcacheclean

exec /usr/sbin/apachectl -D FOREGROUND

18

Dockerの操作とトラブルシューティング

基礎の基礎

覚えておきたいコマンド

• docker inspect– 実行中のコンテナの情報を確認できる

• docker stop/start/pause– 実行中のコンテナを停止/再実行/一時停止

• docker attach– 実行中のコンテナに接続(事前にstartが必要)

• docker rm– 停止中のコンテナをコンテナリストから削除

• docker rmi– イメージを削除

20

トラブルシューティング

• 対話式シェルを実行して手動実行– エラーで停止したコンテナにログインできないので、原因を探るにはシェル実行

– nsenterを使用する方法も

• dockerサービスを再起動してみる– # systemctl restart docker

– 動作中のコンテナは停止してしまう

• ネットワーク周りならiptablesを確認– # iptables-save

21

nsenterを便利に使う

1. util-linuxパッケージをインストールする– # yum install util-linux

2. /usr/bin/docker-nsenterスクリプトを作る

1. コンテナIDか名前を引数に実行– # docker-nsenter コンテナID|名前

2. 各種コマンドが実行できます

22

#!/bin/sh

/bin/nsenter \

--mount --uts --ipc --net --pid --target \

`docker inspect --format '{{.State.Pid}}' $1`

ホストのNIC周りの確認[root@localhost ~]# ip addr show

(略)2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:1c:42:1e:f2:ad brd ff:ff:ff:ff:ff:ff

inet 172.16.6.246/16 brd 172.16.255.255 scope global dynamic eth0

valid_lft 2984sec preferred_lft 2984sec

inet6 fe80::21c:42ff:fe1e:f2ad/64 scope link

valid_lft forever preferred_lft forever

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff

inet 172.17.42.1/16 scope global docker0

valid_lft forever preferred_lft forever

inet6 fe80::5484:7aff:fefe:9799/64 scope link

valid_lft forever preferred_lft forever

35: veth1f3e585: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master docker0 state UP qlen 1000

link/ether 92:d8:4a:6c:20:b2 brd ff:ff:ff:ff:ff:ff

inet6 fe80::90d8:4aff:fe6c:20b2/64 scope link

valid_lft forever preferred_lft forever

[root@localhost ~]# brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.56847afe9799 no veth1f3e585

23

Dockerのネットワーク構成図

24

Dockerコンテナ

eth0

eth0

docker0

veth veth

Dockerコンテナ

eth0

仮想的に直結

ブリッジ接続

NAPT接続(IPマスカレードやポート転送)

外部

iptables-saveの実行結果*nat

:PREROUTING ACCEPT [3251:517949]

:INPUT ACCEPT [1495:211919]

:OUTPUT ACCEPT [74:5868]

:POSTROUTING ACCEPT [73:5828]

:DOCKER - [0:0]

-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

-A DOCKER ! -i docker0 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 172.17.0.11:80

COMMIT

*filter

:INPUT ACCEPT [3028:437371]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [92:8782]

-A FORWARD -d 172.17.0.11/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT

-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i docker0 ! -o docker0 -j ACCEPT

-A FORWARD -i docker0 -o docker0 -j ACCEPT

COMMIT

赤:コンテナが外部に出ていくための設定 青:コンテナへの接続設定

25

※firewalldを止めています

Dockerfileを書いてみる

26

Dockerfileに書ける内容

命令 内容

FROM 元となるイメージ

MAINTAINER Dockerfileの制作者

RUN コマンドの実行

ADD ファイル、ディレクトリの追加

CMD コンテナの実行コマンド(実行時上書き可)

ENTRYPOINT コンテナの実行コマンド(実行時上書き不可)

WORKDIR 作業ディレクトリの指定

ENV 環境変数の指定

USER 実行ユーザの指定

EXPOSE ポートの紐付け

VOLUME ボリュームのマウント27

Dockerfileの使用例

• Dockerfileを作成する

– ENTRYPOINTでhttpdの起動を指定しているので、docker run時に指定が不要

• docker buildでイメージを作る

– # docker build -t イメージ名 ./Dockerfile

28

FROM centos:latest

MAINTAINER tmiyahar <[email protected]>

RUN yum install httpd -y

ENTRYPOINT /usr/sbin/httpd -D FOREGROUND

DockerとOpenStack

29

DockerとOpenStack

• HavanaでNova hypervisor driverとして登場

• IcehouseとJunoでは"out-of-tree"

– 色々と改良を加えるのに制限が少ない状態

• Kiloでmainlineに復帰しますよ

• DockerイメージをGlanceに格納– docker saveコマンドの出力(tarball)をglanceコマンドにパイプで流し込む

– コンテナフォーマットはdocker

– あまり細かい制御はできないのでDockerfileで事前設定必須

30

https://wiki.openstack.org/wiki/Docker より

DockerDriverのアーキテクチャ

31

GlanceへのDockerイメージの格納はdocker saveコマンドを使う

docker-registryは今後不要となる

https://wiki.openstack.org/wiki/Docker より

スタッフ募集のお知らせ

日本仮想化技術株式会社は

• 仮想化技術のエキスパート集団

• 進取の精神

• 豊富な検証機材で新技術を追求

• 自由な雰囲気の職場

募集している職種は

• サーバー・ネットワークエンジニア– LPIC、CCNAなどの保有者歓迎

• プログラマー– オブジェクト指向言語が理解できている事

– OpenStackのコードを読んだり、書いたり

• 営業・企画・マーケティング– SE、PL、PM経験者大歓迎

募集条件

•実力主義

•年齢・経験不問

•チャレンジ大歓迎

勤務先は?

•渋谷駅より徒歩5分

•全員がゆったりデスクとアーロンチェア

オフィスは渋谷駅至近

37

日本仮想化技術オフィス

ハチ公

渋谷駅東口

交差点信号

渋谷駅

ヒカリエの中を通ると雨の日にあまり濡れません

渋谷郵便局

優れた環境が優れた成果を生む

渋谷駅徒歩5分の新オフィス

幅140cmのゆったりデスクとアーロンチェアMacBook Pro/Airと大型液晶モニタが標準キーボード・マウスも自由

充実の検証環境最新機材で作業

充実の福利厚生

• マッサージチェア

• 充実のフリードリンクコーナー

– 各種お茶類、ネスプレッソなど各種取り揃え

• 誕生日はケーキでお祝い

• 雑誌年間購読制度

– 何でも好きな雑誌を年間購読

• 書籍購入支援制度

– 好きな書籍(漫画も可)を1万円/年購入

39

お問い合わせ先

メールにて

[email protected]

履歴書、職務経歴書をご用意ください

ご紹介も是非。きっと何かいいことあります。

40

お待ちしております

41

夏だ!雲人Tシャツ緊急販売

42最南端の波照間島より南方を臨む