今さら聞けない人のためのdocker超入門 centos 7.2対応版

43
今今今今今今今今今今今今 Docker 今今今 CentOS 7.2 今今今 今今今今今今今今今今今 今今今今今今今今 CEO 今今 今 (@tmiyahar) http://VirtualTech.jp

Upload: virtualtech-japan-inc

Post on 12-Jan-2017

848 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

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

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

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

Page 2: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

自己紹介• 本名:宮原 徹• 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超入門 CentOS 7.2対応版

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

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

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

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

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

3

Page 4: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

4

情報サイト:EnterpriseCloud.jp

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

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

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

Page 5: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

5

会社のご紹介仲間募集のお知らせ

Page 6: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

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

• 仮想化技術のエキスパート集団• 進取の精神• 豊富な検証機材で新技術を追求• 自由な雰囲気の職場

Page 7: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

7

一緒に頑張ってくれる仲間を募集中

• サーバー、ネットワークエンジニア– 新卒からキャリアアップしたい経験者ま

で– クラウド技術、自動化技術に興味がある人

• コンサルタント– 通信系に強い人大歓迎

• 短期インターン– 学生はもちろん、社会人も可

Page 8: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

8

お問い合わせ先

メールにて

[email protected]

履歴書、職務経歴書をご用意くださいご紹介も是非。きっと何かいいことあり

ます。

Page 9: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

どんなオフィス?

•渋谷駅より徒歩 5分•全員がゆったりデスクとアーロンチェア

Page 10: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

10

オフィスは渋谷駅至近日本仮想化技術

オフィス

ハチ公

渋谷駅東口

交差点信号

渋谷駅

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

渋谷郵便局

Page 11: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

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

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

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

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

Page 12: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

12

充実の福利厚生

• マッサージチェア• 充実のフリードリンクコーナー

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

• 誕生日はケーキでお祝い• 雑誌年間購読制度

–何でも好きな雑誌を年間購読• 書籍購入支援制度

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

Page 13: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

13

書籍購入支援制度 活用例

「くまみこ」一気買い

Page 14: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

14

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

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

なテクニックも存在しますが、よく分かってません

Page 15: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

15

Docker を動かそう

Page 16: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

16

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

– 仮想マシンと比べてハイパーバイザーのオーバーヘッドが無いのでより高速

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

– コンテナの中であれこれ動作させるのには向かない– Web アプリなら Web AP サーバで 1 コンテナ、 DB サーバ

で 1 コンテナという感じ• Docker イメージは(ルート)ファイルシステム

– chroot を思い浮かべるとちょうどいい

Page 17: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

17

各方式の比較ベアメタル(物理)

仮想マシン コンテナ

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

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

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

リソース使用

システムで専有 メモリの無駄が多い

OSカーネルは 1つで効率が良い

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

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

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

Page 18: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

18

Docker をインストールする

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

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

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

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

– # yum install bridge-utils

Page 19: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

19

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

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

1. 未使用の /dev/sdb を用意する(仮想ディスク追加など)

2. /etc/sysconfig/docker-storage-setup に以下の 2行を追加

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

DEVS=/dev/sdbVG=dokcer-vg

Page 20: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

20

サービスの起動

1. docker サービスを起動する– # systemctl start docker

2. システム起動時に自動起動するように有効化しておく– # systemctl enable docker

• Docker サービスを停止すると、動作中のコンテナは停止します–消えるわけではない

Page 21: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

21

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 22: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

22

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

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

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

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

参考

Page 23: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

23

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

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

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

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

TAGも)

Page 24: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

24

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 25: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

25

Docker コンテナ実行(応用)

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

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

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

– yum でパッケージをインストールしたり3. より複雑な実行時処理を行いたい場合

は Dockerfile を記述する(後述)–どこまで複雑にするかはケースバイケー

ス?

Page 26: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

26

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

Page 27: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

27

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

centos

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

httpd ② # yum install httpd

centos

httpd

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

centos

Page 28: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

28

コンテナをイメージ化

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 29: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

29

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

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 30: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

30

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

• 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 31: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

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

基礎の基礎

Page 32: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

32

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

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

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

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

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

– イメージを削除

Page 33: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

33

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

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

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

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

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

Page 34: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

34

Docker のネットワーク

Page 35: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

35

Docker のネットワーク構成図

Dockerコンテナ eth0

eth0

docker0

veth veth

Dockerコンテナ eth0

仮想的に直結

ブリッジ接続

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

外部

Page 36: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

36

ホストの 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 37: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

37

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 38: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

38

Dockerfile を書いてみる

Page 39: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

39

Dockerfile に書ける内容命令 内容

FROM 元となるイメージ

MAINTAINER Dockerfile の制作者

RUN docker build時にコマンド実行

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

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

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

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

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

ENV 環境変数の指定

USER 実行ユーザの指定

EXPOSE ポートの紐付け

VOLUME ボリュームのマウント

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

Page 40: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

40

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 41: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

41

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

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

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

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

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

Page 42: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

42

まとめと課題• CentOS 7初期の頃は不整合が多く(特に systemd廻り)扱いにくかったが、こなれてきたので一度触ってみるにはいい塩梅– httpd とか動かなかった( /var/run が tmpfsだから)

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

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

Page 43: 今さら聞けない人のためのDocker超入門 CentOS 7.2対応版

43

ありがとうございました