今さら聞けない人のための
Docker超入門
CentOS 7.1対応版
日本仮想化技術株式会社
代表取締役社長兼CEO
宮原 徹(@tmiyahar)
http://VirtualTech.jp
自己紹介
• 本名:宮原 徹
• 1972年1月 神奈川県生まれ
• 1994年3月 中央大学法学部法律学科卒業
• 1994年4月 日本オラクル株式会社入社
– PCサーバ向けRDBMS製品マーケティングに従事
– Linux版Oracle8...
日本仮想化技術株式会社 概要
• 社名:日本仮想化技術株式会社
– 英語名:VirtualTech Japan Inc.
– 略称:日本仮想化技術/VTJ
• 設立:2006年12月
• 資本金:2,000万円
• 売上高:8,700万円(20...
情報サイト:EnterpriseCloud.jp
• OpenStackで始めるエ
ンタープライズクラウ
ドの情報サイト
• OpenStack導入手順
書のダウンロード
• 各種プレゼン資料
• その他ブログ記事
4
本日のアジェンダ
• Dockerを動かそう
• Dockerコンテナのライフサイクル
• Dockerの操作とトラブルシューティング 基礎の基
礎
• Dockerのネットワーク
• Dockerfileを書いてみる
• Dockerを触った...
Dockerを動かそう
6
Dockerの特徴
• 1コンテナ1プロセスで動作する
– ハイパーバイザーのオーバーヘッドが無い
• ≒コンテナ内で1プロセスが動作する
– サービスプロセスと並行で対話型シェルを動かす
などの考え方は基本的に無い
– コンテナの中であれもこ...
各方式の比較
ベアメタル 仮想マシン コンテナ
性能 最も速い I/Oが遅い 速い
OS 1つだけ 複数種類を混在可
能
カーネルは1つだけ
だが、ディストリ
ビューションは混在
可能
リソース使用 システムで専有 重複の無駄が多い OSカーネ...
Dockerをインストールする
1. CentOS 7.1をインストール
2. アップデートを行う
– # yum update -y
3. Dockerパッケージをインストール
– # yum install docker
– Docker用...
Docker用ストレージ領域
• Docker用のストレージ領域をLVM領域に作成
– Thin Poolと呼ばれている
– 設定しないとループバックデバイスが使用されるが非推奨
1. 未使用の/dev/sdbを用意する(仮想ディスク追加など)...
docker-storage-setup実行例
# docker-storage-setup
現在、誰もこのディスクを使っていないかを調べます...
OK
ディスク /dev/sdb: シリンダ数 8354、ヘッド数 255、63 セクタ/トラ...
firewalldの止め方
• 後ほどDockerのネットワークについて調べる
際にfirewalldを止めておくと設定が見やすい
1. iptables-servicesパッケージをインストール
– 最小構成だとインストールされない
– # ...
Dockerイメージをダウンロード
1. CentOSのDockerイメージを検索
– # docker search centos
2. CentOSのDockerイメージをダウンロード
– # docker pull centos
– 最新...
Dockerコンテナを実行(基本)
1. CentOSイメージでコンテナを実行
– # docker run -it centos /bin/bash
– -i, --interactive=true|false
– -t, --tty=tru...
Dockerコンテナ実行(応用)
1. コンテナ名を付ける
– # docker run --name=名前 イメージ名 コマンド
2. シェルからコマンドを実行させる
– # docker run イメージ名 /bin/bash -c "コマ...
Dockerコンテナのライフサイクル
16
イメージとコンテナの変移
17
centos
①コンテナとして実行(docker run)
httpd ② # yum install httpd
centos
httpd
③コンテナをイメージ化(docker commit)
④イメージをコン...
コンテナをイメージ化
1. コンテナにhttpdパッケージをインストール
– # docker run --name=httpd centos /bin/bash -c
"yum install httpd -y"
2. httpdコンテナをコ...
新たなイメージからコンテナ実行
1. コンテナでhttpdを実行し、コンテナのポート80
番をホストの8080番に紐付ける
– # docker run -d -p 8080:80 --name=web1
httpd_template /usr...
ストレージの使用状況を確認
• lsblkコマンドでThin Poolにしていしたブロッ
クデバイスを確認する
20
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS ...
Dockerの操作と
トラブルシューティング
基礎の基礎
覚えておきたいコマンド
• docker inspect コンテナ名
– 実行中のコンテナの情報を確認できる
• docker stop/start/pause コンテナ名
– 実行中のコンテナを停止/再実行/一時停止
• docker att...
トラブルシューティング
• 対話式シェルを実行して手動実行
– エラーで停止したコンテナでシェル実行し、ログなどを
確認できる
– # docker exec -it コンテナ名 /bin/bash
• dockerサービスを再起動してみる
–...
Dockerのネットワーク
24
Dockerのネットワーク構成図
25
Dockerコンテナ
eth0
eth0
docker0
veth veth
Dockerコンテナ
eth0
仮想的に直結
ブリッジ接続
NAPT接続(IPマスカレードやポート転送)
外部
ホストのNIC周りの確認
[root@localhost ~]# ip addr show
(略)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast sta...
iptables-saveの実行結果
*nat
:PREROUTING ACCEPT [3251:517949]
:INPUT ACCEPT [1495:211919]
:OUTPUT ACCEPT [74:5868]
:POSTROUTING...
Dockerfileを書いてみる
28
Dockerfileに書ける内容
命令 内容
FROM 元となるイメージ
MAINTAINER Dockerfileの制作者
RUN docker build時にコマンド実行
ADD ファイル、ディレクトリの追加
COPY ファイル、ディレクト...
Dockerfileの使用例(1)
• Dockerfileを作成する
– ENTRYPOINTでhttpdの起動を指定しているので、
docker run時にhttp起動の指定が不要
• docker buildでDockerイメージを作る
...
Dockerfileの使用例(2)
• Dockerイメージが作成されたことを確認
– # docker ps -a
• Docker buildで作成したイメージでコンテナを
実行する
– # docker run -d -p 8081:80...
まとめと課題
• CentOS 7初期の頃は不整合が多く(特にsystemd
廻り)扱いにくかったが、こなれてきたので一度
触ってみるにはいい塩梅
– httpdとか動かなかった
• どこまでイメージを作り込み、どこからDockerfile等
...
Upcoming SlideShare
Loading in...5
×

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

343

Published on

仮想化技術として注目されているDocker入門
講師:宮原 徹(日本仮想化技術 社長兼CEO)

企業におけるITシステムは仮想化技術の発展によって成長を加速させてきました。また、仮想的に表現する技術や仮想技術を便利に使えるツールが次々と開発されていますが、その中でも、数年前から注目されてるのがコンテナ型仮想化技術である「Docker」です。サーバーエンジニアが知ってて損しない技術の1つと言えると思います。

Dockerにこれまで携わることがなかったけど、スキルアップのために知っておきたい方や、基本的な操作方法を復習しておきたい方まで、Docker入門編としてセミナーを開催致します。セミナーでは、CentOS 7を使って、Dockerの基本的な使い方をデモを交えて解説しますので、よりイメージがしやすく理解度が高まると思います。また、IaaS環境を構築するために用いられるOpenStackとの連携についても説明致します。

【このセミナーで学べること】
Dockerの動かし方
Dockerの操作とトラブルシューティング
DockerとOpenStack

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
343
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

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

  1. 1. 今さら聞けない人のための Docker超入門 CentOS 7.1対応版 日本仮想化技術株式会社 代表取締役社長兼CEO 宮原 徹(@tmiyahar) http://VirtualTech.jp
  2. 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
  3. 3. 日本仮想化技術株式会社 概要 • 社名:日本仮想化技術株式会社 – 英語名: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
  4. 4. 情報サイト:EnterpriseCloud.jp • OpenStackで始めるエ ンタープライズクラウ ドの情報サイト • OpenStack導入手順 書のダウンロード • 各種プレゼン資料 • その他ブログ記事 4
  5. 5. 本日のアジェンダ • Dockerを動かそう • Dockerコンテナのライフサイクル • Dockerの操作とトラブルシューティング 基礎の基 礎 • Dockerのネットワーク • Dockerfileを書いてみる • Dockerを触ったことがない、という方向けです • ごく基本的な話しかしていません • バージョンアップして変更になったり、もっと色々な テクニックも存在します 5
  6. 6. Dockerを動かそう 6
  7. 7. Dockerの特徴 • 1コンテナ1プロセスで動作する – ハイパーバイザーのオーバーヘッドが無い • ≒コンテナ内で1プロセスが動作する – サービスプロセスと並行で対話型シェルを動かす などの考え方は基本的に無い – コンテナの中であれもこれも動作させるのには向 かない – WebアプリならWeb APサーバで1コンテナ、DB サーバで1コンテナという感じ • Dockerイメージはファイルシステム – chrootを思い浮かべるとちょうどいい 7
  8. 8. 各方式の比較 ベアメタル 仮想マシン コンテナ 性能 最も速い I/Oが遅い 速い OS 1つだけ 複数種類を混在可 能 カーネルは1つだけ だが、ディストリ ビューションは混在 可能 リソース使用 システムで専有 重複の無駄が多い OSカーネルは1つ で効率が良い 柔軟性 硬直的 非常に柔軟 単機能向け 主な用途 高速なDBなど 従来型の業務シス テム Webサービスのフロ ントエンド等、同一 のものを大量配備 する必要があるも の 8
  9. 9. Dockerをインストールする 1. CentOS 7.1をインストール 2. アップデートを行う – # yum update -y 3. Dockerパッケージをインストール – # yum install docker – Docker用ストレージ領域を設定後Dockerサービス を起動するので、この段階では起動しません 4. bridge-utilsパッケージも入れておきます – # yum install bridge-utils 9
  10. 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 10 DEVS=/dev/sdb VG=dokcer-vg
  11. 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. 11
  12. 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 12 参考
  13. 13. Dockerイメージをダウンロード 1. CentOSのDockerイメージを検索 – # docker search centos 2. CentOSのDockerイメージをダウンロード – # docker pull centos – 最新版(latest)がダウンロードされる 3. Dockerイメージを確認 – # docker images – 基本的にはIDで識別(同一IDに複数TAGも) 13
  14. 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と名前が割り当てられる 14
  15. 15. Dockerコンテナ実行(応用) 1. コンテナ名を付ける – # docker run --name=名前 イメージ名 コマンド 2. シェルからコマンドを実行させる – # docker run イメージ名 /bin/bash -c "コマンド" – yumでパッケージをインストールしたり 3. より複雑な実行時処理を行いたい場合は Dockerfileを記述する(後述) – どこまで複雑にするかはケースバイケース? 15
  16. 16. Dockerコンテナのライフサイクル 16
  17. 17. イメージとコンテナの変移 17 centos ①コンテナとして実行(docker run) httpd ② # yum install httpd centos httpd ③コンテナをイメージ化(docker commit) ④イメージをコンテナ化 (docker run) centos
  18. 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 18
  19. 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 19
  20. 20. ストレージの使用状況を確認 • lsblkコマンドでThin Poolにしていしたブロッ クデバイスを確認する 20 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e1627b55d10 httpd_template "/usr/sbin/httpd -D About a minute ago Up About a minute 0.0.0.0:8080->80/tcp web1 # lsblk /dev/sdb1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb1 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
  21. 21. Dockerの操作と トラブルシューティング 基礎の基礎
  22. 22. 覚えておきたいコマンド • docker inspect コンテナ名 – 実行中のコンテナの情報を確認できる • docker stop/start/pause コンテナ名 – 実行中のコンテナを停止/再実行/一時停止 • docker attach コンテナ名 – 実行中のコンテナに接続(事前にstartが必要) • docker rm コンテナ名 – 停止中のコンテナをコンテナリストから削除 • docker rmi イメージ名 – イメージを削除 22
  23. 23. トラブルシューティング • 対話式シェルを実行して手動実行 – エラーで停止したコンテナでシェル実行し、ログなどを 確認できる – # docker exec -it コンテナ名 /bin/bash • dockerサービスを再起動してみる – # systemctl restart docker – 動作中のコンテナは停止してしまうのでstartが必要 • ネットワーク周りならiptablesを確認 – # iptables-save – firewalldが動いていると煩雑なので、iptablesに切り替 える方が良いかも 23
  24. 24. Dockerのネットワーク 24
  25. 25. Dockerのネットワーク構成図 25 Dockerコンテナ eth0 eth0 docker0 veth veth Dockerコンテナ eth0 仮想的に直結 ブリッジ接続 NAPT接続(IPマスカレードやポート転送) 外部
  26. 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 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 26
  27. 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: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 赤:コンテナが外部に出ていくための設定 青:コンテナへの接続設定 27 ※firewalldを止めています
  28. 28. Dockerfileを書いてみる 28
  29. 29. Dockerfileに書ける内容 命令 内容 FROM 元となるイメージ MAINTAINER Dockerfileの制作者 RUN docker build時にコマンド実行 ADD ファイル、ディレクトリの追加 COPY ファイル、ディレクトリの追加(URL指定不可・解凍不可 ) CMD コンテナ実行時にコマンド実行(実行時上書き可) ENTRYPOINT コンテナ実行時にコマンド実行(実行時上書き不可) WORKDIR 作業ディレクトリの指定 ENV 環境変数の指定 USER 実行ユーザの指定 EXPOSE ポートの紐付け VOLUME ボリュームのマウント29
  30. 30. Dockerfileの使用例(1) • Dockerfileを作成する – ENTRYPOINTでhttpdの起動を指定しているので、 docker run時にhttp起動の指定が不要 • docker buildでDockerイメージを作る – # docker build –t httpd_dockerfile . – 最後の「. 」はカレントディレクトリのDockerfileを参照す るために指定 30 FROM centos:latest MAINTAINER tmiyahar <miyahara@virtualtech.jp> RUN yum install httpd -y ENTRYPOINT /usr/sbin/httpd -D FOREGROUND ←.(ドット)を忘れずに
  31. 31. Dockerfileの使用例(2) • Dockerイメージが作成されたことを確認 – # docker ps -a • Docker buildで作成したイメージでコンテナを 実行する – # docker run -d -p 8081:80 --name=web2 httpd_dockerfile – # curl localhost:8081 – ENTRYPOINTでhttpdの起動を指定しているので コンテナで実行するコマンドの指定は不要 31
  32. 32. まとめと課題 • CentOS 7初期の頃は不整合が多く(特にsystemd 廻り)扱いにくかったが、こなれてきたので一度 触ってみるにはいい塩梅 – httpdとか動かなかった • どこまでイメージを作り込み、どこからDockerfile等 で自動化するかの加減は? – 作り込みすぎるとメンテが大変 – 自動化部分が多いとデプロイに時間がかかる • DockerHubを使ったり、Gitと連動させたり • AtomicHostとかCoreOSとか • Kubernetesのような管理ツールは? 32
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×