Contenu connexe
Similaire à 今さら聞けない人のためのDocker超入門 (20)
Plus de VirtualTech Japan Inc./Begi.net Inc. (20)
今さら聞けない人のためのDocker超入門
- 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. 日本仮想化技術株式会社 概要
• 社名:日本仮想化技術株式会社
– 英語名:VirtualTech Japan Inc.
– 略称:日本仮想化技術/VTJ
• 設立:2006年12月
• 資本金:3,000万円
• 売上高:10,702万円(2017年7月期)
• 本社:東京都渋谷区渋谷1-8-1
• 取締役:宮原 徹(代表取締役社長兼CEO)
• 伊藤 宏通(取締役CTO)
• スタッフ:9名(うち、7名が仮想化技術専門エンジニアです)
• URL:http://VirtualTech.jp/
• 仮想化技術に関する研究および開発
– 仮想化技術に関する各種調査
– 仮想化技術に関連したソフトウェアの開発
– 仮想化技術を導入したシステムの構築
– OpenStackの導入支援・新規機能開発
ベンダーニュートラルな
独立系仮想化技術の
エキスパート集団
3
- 9. 各方式の比較
ベアメタル(物理) 仮想マシン コンテナ
性能 最も速い I/Oが遅い 速い
OS 1つだけ 複数種類を混在可
能
カーネルは1つだけ
だが、ディストリ
ビューションは混在
可能
リソース使用 システムで専有 メモリの無駄が多い OSカーネルは1つ
で効率が良い
柔軟性 硬直的 非常に柔軟 単機能向け
主な用途 高速なDBなど 従来型の業務シス
テム
Webサービスのフロ
ントエンド等、同一
のものを大量配備
する必要があるも
の
9
- 10. Dockerをインストールする
1. CentOS 7.3をインストール
2. アップデートを行う
– # yum update -y
3. Dockerパッケージをインストール
– # yum install docker
– Docker用ストレージ領域を設定後Dockerサービス
を起動するので、この段階では起動しません
4. bridge-utilsパッケージも入れておきます
– # yum install bridge-utils
10
- 11. Docker用ストレージ領域
• Docker用のストレージ領域をLVM領域に作成
– Thin Poolと呼ばれている
– 設定しないとループバックデバイスが使用されるが非推奨
1. 未使用の/dev/sdbを用意する(仮想ディスク追加など)
2. /etc/sysconfig/docker-storage-setupに以下の2行を追
加
3. docker-storage-setupを実行する
– # docker-storage-setup
11
DEVS=/dev/sdb
VG=dokcer-vg
- 12. 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.
12
- 13. サービスの起動
1. dockerサービスを起動する
– # systemctl start docker
2. システム起動時に自動起動するように有
効化しておく
– # systemctl enable docker
• Dockerサービスを停止すると、動作中のコ
ンテナは停止します
– 消えるわけではない
13
- 16. 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と名前が割り当てられる
16
- 17. Dockerコンテナ実行(応用)
1. コンテナ名を付ける
– # docker run --name=名前 イメージ名 コマンド
2. シェルからコマンドを実行させる
– # docker run イメージ名 /bin/bash -c "コマンド"
– yumでパッケージをインストールしたり
3. より複雑な実行時処理を行いたい場合は
Dockerfileを記述する(後述)
– どこまで複雑にするかはケースバイケース?
17
- 20. コンテナをイメージ化
1. コンテナにhttpdパッケージをインストール
– # docker run --name=httpd centos /bin/bash -c
"yum install httpd -y"
2. httpdコンテナをコミットしてイメージ化
– # docker commit httpd httpd_template
3. イメージを確認
– # docker images
20
- 22. ストレージの使用状況を確認
• lsblkコマンドでThin Poolにしていしたブロッ
クデバイスを確認する
22
# 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
- 24. 覚えておきたいコマンド
• docker inspect コンテナ名
– 実行中のコンテナの情報を確認できる
• docker stop/start/pause コンテナ名
– 実行中のコンテナを停止/再実行/一時停止
• docker attach コンテナ名
– 実行中のコンテナに接続(事前にstartが必要)
• docker rm コンテナ名
– 停止中のコンテナをコンテナリストから削除
• docker rmi イメージ名
– イメージを削除
24
- 28. ホストの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
28
- 29. 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
赤:コンテナが外部に出ていくための設定 青:コンテナへの接続設定
29
※firewalldを止めています
- 31. Dockerfileに書ける内容
命令 内容
FROM 元となるイメージ
MAINTAINER Dockerfileの制作者
RUN docker build時にコマンド実行
ADD ファイル、ディレクトリの追加
COPY ファイル、ディレクトリの追加(URL指定不可・解凍不可
)
CMD コンテナ実行時にコマンド実行(実行時上書き可)
ENTRYPOINT コンテナ実行時にコマンド実行(実行時上書き不可)
WORKDIR 作業ディレクトリの指定
ENV 環境変数の指定
USER 実行ユーザの指定
EXPOSE ポートの紐付け
VOLUME ボリュームのマウント31
- 33. Dockerfileの使用例(2)
• Dockerイメージが作成されたことを確認
– # docker images
• Docker buildで作成したイメージでコンテナを
実行する
– # docker run -d -p 8081:80 --name=web2
httpd_dockerfile
– # curl localhost:8081
– ENTRYPOINTでhttpdの起動を指定しているので
コンテナで実行するコマンドの指定は不要
33