仮想化技術として注目されているdocker入門 - pasonatech advantage seminar

32
今今今今今今今今今今今今 Docker 今今今 CentOS 7.1 今今今 今今今今今今今今今今今 今今今今今今今今 CEO 今今 今 (@tmiyahar) http://VirtualTech.jp

Upload: virtualtech-japan-inc

Post on 10-Feb-2017

4.874 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

今さら聞けない人のためのDocker 超入門CentOS 7.1 対応版

日本仮想化技術株式会社代表取締役社長兼 CEO

宮原 徹 (@tmiyahar)http://VirtualTech.jp

Page 2: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

自己紹介• 本名:宮原 徹• 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

Page 3: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

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

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

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

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

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

3

Page 4: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

4

情報サイト:EnterpriseCloud.jp

• OpenStack で始めるエンタープライズクラウドの情報サイト

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

• 各種プレゼン資料• その他ブログ記事

Page 5: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

5

本日のアジェンダ• Docker を動かそう• Docker コンテナのライフサイクル• Docker の操作とトラブルシューティング 基礎の基礎• Docker のネットワーク• Dockerfile を書いてみる

• Docker を触ったことがない、という方向けです• ごく基本的な話しかしていません• バージョンアップして変更になったり、もっと色々

なテクニックも存在します

Page 6: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

6

Docker を動かそう

Page 7: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

7

Docker の特徴• 1 コンテナ 1 プロセスで動作する

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

– サービスプロセスと並行で対話型シェルを動かすなどの考え方は基本的に無い

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

– Web アプリなら Web AP サーバで 1 コンテナ、 DBサーバで 1 コンテナという感じ

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

Page 8: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

8

各方式の比較ベアメタル 仮想マシン コンテナ

性能 最も速い I/O が遅い 速い

OS 1つだけ 複数種類を混在可能

カーネルは 1つだけだが、ディストリビューションは混在可能

リソース使用

システムで専有 重複の無駄が多い OSカーネルは 1つで効率が良い

柔軟性 硬直的 非常に柔軟 単機能向け

主な用途 高速な DB など 従来型の業務システム

Web サービスのフロントエンド等、同一のものを大量配備する必要があるもの

Page 9: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

9

Docker をインストールする

1. CentOS 7.1 をインストール2. アップデートを行う

– # yum update -y3. Docker パッケージをインストール

– # yum install docker– Docker用ストレージ領域を設定後Docker サービ

スを起動するので、この段階では起動しません4. bridge-utils パッケージも入れておきます

– # yum install bridge-utils

Page 10: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

10

Docker用ストレージ領域• Docker用のストレージ領域を LVM領域に作成

– Thin Pool と呼ばれている– 設定しないとループバックデバイスが使用されるが非推奨

1. 未使用の /dev/sdb を用意する(仮想ディスク追加など)2. /etc/sysconfig/docker-storage-setup に以下の 2 行を追加

3. docker-storage-setup を実行する– # docker-storage-setup

4. docker サービスを起動し、有効化しておく– # systemctl start docker– # systemctl enable docker

DEVS=/dev/sdbVG=dokcer-vg

Page 11: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

11

docker-storage-setup実行例# docker-storage-setup 現在、誰もこのディスクを使っていないかを調べます ...OK

ディスク /dev/sdb: シリンダ数 8354 、ヘッド数 255 、 63 セクタ / トラックsfdisk: /dev/sdb: 認識できないパーティション領域タイプ

(略)

デバイス ブート 始点 終点 # セクタ Id システム/dev/sdb1 2048 134217727 134215680 8e Linux LVM/dev/sdb2 0 - 0 0 空/dev/sdb3 0 - 0 0 空/dev/sdb4 0 - 0 0 空(略) Physical volume "/dev/sdb1" successfully created Volume group "docker-vg" successfully created Rounding up size to full physical extent 68.00 MiB Logical volume "docker-poolmeta" created. Logical volume "docker-pool" created. WARNING: Converting logical volume docker-vg/docker-pool and docker-vg/docker-poolmeta to pool's data and metadata volumes. THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.) Converted docker-vg/docker-pool to thin pool. Logical volume "docker-pool" changed.

Page 12: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

12

firewalld の止め方• 後ほど Docker のネットワークについて調べる際に

firewalld を止めておくと設定が見やすい1. iptables-services パッケージをインストール

– 最小構成だとインストールされない– # yum install iptables-services

2. systemd の設定を変更し、 firewalld を停止・無効化、iptables を起動・有効化– # systemctl stop firewalld– # systemctl disable firewalld– # systemctl start iptables– # systemctl enable iptables

参考

Page 13: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

13

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

1. CentOS の Docker イメージを検索– # docker search centos

2. CentOS の Docker イメージをダウンロード– # docker pull centos–最新版( latest )がダウンロードされる

3. Docker イメージを確認– # docker images– 基本的には ID で識別(同一 ID に複数

TAG も)

Page 14: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

14

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 と名前が割り当てられる

Page 15: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

15

Docker コンテナ実行(応用)

1. コンテナ名を付ける– # docker run --name= 名前 イメージ名 コマ

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

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

– yum でパッケージをインストールしたり3. より複雑な実行時処理を行いたい場合は Dockerfile を記述する(後述)– どこまで複雑にするかはケースバイケー

ス?

Page 16: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

16

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

Page 17: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

17

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

centos

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

httpd ② # yum install httpd

centos

httpd

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

centos

Page 18: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

18

コンテナをイメージ化

1. コンテナに httpd パッケージをインストール– # docker run --name=httpd centos /bin/bash -c

"yum install httpd -y"2. httpd コンテナをコミットしてイメー

ジ化– # docker commit httpd httpd_template

3. イメージを確認– # docker images

Page 19: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

19

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

1. コンテナで httpd を実行し、コンテナのポート 80番をホストの 8080番に紐付ける– # docker run -d -p 8080:80 --name=web1

httpd_template /usr/sbin/httpd -D FOREGROUND– -d, --detach=true|false

2. ポートが紐付いていることを確認– # docker ps -a– # curl localhost:8080

Page 20: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

20

ストレージの使用状況を確認

• lsblk コマンドで Thin Pool にしていしたブロックデバイスを確認する

# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3e1627b55d10 httpd_template "/usr/sbin/httpd -D About a minute ago Up About a minute 0.0.0.0:8080->80/tcp web1

# lsblk /dev/sdb1NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsdb1 8:17 0 64G 0 part ├─dokcer--vg-docker--pool_tmeta 253:3 0 68M 0 lvm │ └─dokcer--vg-docker--pool 253:5 0 38.4G 0 lvm │ └─docker-253:0-134477219-3e1627b55d102cd04dce24579088cd6ba44765047c1bb909669240cd2de268bc 253:6 0 10G 0 dm └─dokcer--vg-docker--pool_tdata 253:4 0 38.4G 0 lvm └─dokcer--vg-docker--pool 253:5 0 38.4G 0 lvm └─docker-253:0-134477219-3e1627b55d102cd04dce24579088cd6ba44765047c1bb909669240cd2de268bc 253:6 0 10G 0 dm

Page 21: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

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

基礎の基礎

Page 22: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

22

覚えておきたいコマンド• docker inspect コンテナ名

– 実行中のコンテナの情報を確認できる• docker stop/start/pause コンテナ名

– 実行中のコンテナを停止/再実行/一時停止• docker attach コンテナ名

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

– 停止中のコンテナをコンテナリストから削除• docker rmi イメージ名

– イメージを削除

Page 23: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

23

トラブルシューティング• 対話式シェルを実行して手動実行

– エラーで停止したコンテナでシェル実行し、ログなどを確認できる

– # docker exec -it コンテナ名 /bin/bash• docker サービスを再起動してみる

– # systemctl restart docker– 動作中のコンテナは停止してしまうので start が必要

• ネットワーク周りなら iptables を確認– # iptables-save– firewalld が動いていると煩雑なので、 iptables に切り替える方が良いかも

Page 24: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

24

Docker のネットワーク

Page 25: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

25

Docker のネットワーク構成図

Dockerコンテナ eth0

eth0

docker0

veth veth

Dockerコンテナ eth0

仮想的に直結

ブリッジ接続

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

外部

Page 26: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

26

ホストの 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 forever3: 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 forever35: 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 showbridge name bridge id STP enabled interfacesdocker0 8000.56847afe9799 no veth1f3e585

Page 27: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

27

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:80COMMIT*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 ACCEPTCOMMIT

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

※firewalld を止めています

Page 28: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

28

Dockerfile を書いてみる

Page 29: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

29

Dockerfile に書ける内容命令 内容

FROM 元となるイメージ

MAINTAINER Dockerfile の制作者

RUN docker build時にコマンド実行

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

COPY ファイル、ディレクトリの追加( URL指定不可・解凍不可)

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

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

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

ENV 環境変数の指定

USER 実行ユーザの指定

EXPOSE ポートの紐付け

VOLUME ボリュームのマウント

LABEL イメージにメタデータを付与

Page 30: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

30

Dockerfile の使用例( 1 )• Dockerfile を作成する

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

• docker build で Docker イメージを作る– # docker build –t httpd_dockerfile .– 最後の「 . 」はカレントディレクトリの Dockerfile を参照するために指定

FROM centos:latestMAINTAINER tmiyahar <[email protected]>RUN yum install httpd -yENTRYPOINT /usr/sbin/httpd -D FOREGROUND

←. (ドット)を忘れずに

Page 31: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

31

Dockerfile の使用例( 2 )• Docker イメージが作成されたことを確認

– # docker ps -a• Docker build で作成したイメージでコンテ

ナを実行する– # docker run -d -p 8081:80 --name=web2

httpd_dockerfile– # curl localhost:8081– ENTRYPOINT で httpd の起動を指定しているの

でコンテナで実行するコマンドの指定は不要

Page 32: 仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR

32

まとめと課題• CentOS 7初期の頃は不整合が多く(特に systemd廻

り)扱いにくかったが、こなれてきたので一度触ってみるにはいい塩梅– httpd とか動かなかった

• どこまでイメージを作り込み、どこから Dockerfile等で自動化するかの加減は?– 作り込みすぎるとメンテが大変– 自動化部分が多いとデプロイに時間がかかる

• DockerHub を使ったり、 Git と連動させたり• AtomicHost とか CoreOS とか• Kubernetes のような管理ツールは?