Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

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

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Próximo SlideShare
Docker Compose 徹底解説
Docker Compose 徹底解説
Cargando en…3
×

Eche un vistazo a continuación

1 de 43 Anuncio

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

Descargar para leer sin conexión

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

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

Anuncio
Anuncio

Más Contenido Relacionado

Presentaciones para usted (20)

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

Anuncio

Más de VirtualTech Japan Inc. (20)

Más reciente (20)

Anuncio

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

  1. 1. 今さら聞けない人のための Docker超入門 CentOS 7.2対応版 日本仮想化技術株式会社 代表取締役社長兼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月 • 資本金:3,000万円 • 売上高:8,700万円(2015年7月期) • 本社:東京都渋谷区渋谷1-8-1 • 取締役:宮原 徹(代表取締役社長兼CEO) • 伊藤 宏通(取締役CTO) • スタッフ:9名(うち、7名が仮想化技術専門エンジニアです) • URL:http://VirtualTech.jp/ • 仮想化技術に関する研究および開発 – 仮想化技術に関する各種調査 – 仮想化技術に関連したソフトウェアの開発 – 仮想化技術を導入したシステムの構築 – OpenStackの導入支援・新規機能開発 ベンダーニュートラルな 独立系仮想化技術の エキスパート集団 3
  4. 4. 情報サイト:EnterpriseCloud.jp • OpenStackで始めるエ ンタープライズクラウ ドの情報サイト • OpenStack導入手順 書のダウンロード • 各種プレゼン資料 • その他ブログ記事 4
  5. 5. 会社のご紹介 仲間募集のお知らせ 5
  6. 6. 日本仮想化技術株式会社は • 仮想化技術のエキスパート集団 • 進取の精神 • 豊富な検証機材で新技術を追求 • 自由な雰囲気の職場
  7. 7. 一緒に頑張ってくれる仲間を募集中 • サーバー、ネットワークエンジニア – 新卒からキャリアアップしたい経験者まで – クラウド技術、自動化技術に興味がある人 • コンサルタント – 通信系に強い人大歓迎 • 短期インターン – 学生はもちろん、社会人も可 7
  8. 8. お問い合わせ先 メールにて recruit@VirtualTech.jp 履歴書、職務経歴書をご用意ください ご紹介も是非。きっと何かいいことあります。 8
  9. 9. どんなオフィス? •渋谷駅より徒歩5分 •全員がゆったりデスク とアーロンチェア
  10. 10. オフィスは渋谷駅至近 10 日本仮想化技術 オフィス ハ チ 公 渋谷駅東 口 交差点信 号 渋 谷 駅 ヒカリエの中を通ると 雨の日にあまり濡れません 渋 谷 郵 便 局
  11. 11. 優れた環境が優れた成果を生む 渋谷駅徒歩5分の新オフィス 幅140cmのゆったりデスクとアーロンチェア MacBook Pro/Airと大型液晶モニタが標準 キーボード・マウスも自由 充実の検証環境 最新機材で作業
  12. 12. 充実の福利厚生 • マッサージチェア • 充実のフリードリンクコーナー – 各種お茶類、ネスプレッソなど各種取り揃え • 誕生日はケーキでお祝い • 雑誌年間購読制度 – 何でも好きな雑誌を年間購読 • 書籍購入支援制度 – 好きな書籍(漫画も可)を1万円/年購入 12
  13. 13. 書籍購入支援制度 活用例 13
  14. 14. 本日のアジェンダ • Dockerを動かそう • Dockerコンテナのライフサイクル • Dockerの操作とトラブルシューティング 基礎の基礎 • Dockerのネットワーク • Dockerfileを書いてみる • Dockerを触ったことがない、という方向けです • ごく基本的な話しかしていません • バージョンアップして変更になったり、もっと色々な テクニックも存在しますが、よく分かってません 14
  15. 15. Dockerを動かそう 15
  16. 16. Dockerの特徴 • 1コンテナ1プロセスで動作する – 仮想マシンと比べてハイパーバイザーのオーバーヘッ ドが無いのでより高速 • ≒コンテナ内で1プロセス(1タスク)が動作する – サービスプロセスと並行で対話型シェルを動かすなど の考え方は基本的に無い(シングルタスク) – コンテナの中であれこれ動作させるのには向かない – WebアプリならWeb APサーバで1コンテナ、DBサーバ で1コンテナという感じ • Dockerイメージは(ルート)ファイルシステム – chrootを思い浮かべるとちょうどいい 16
  17. 17. 各方式の比較 ベアメタル(物理) 仮想マシン コンテナ 性能 最も速い I/Oが遅い 速い OS 1つだけ 複数種類を混在可 能 カーネルは1つだけ だが、ディストリ ビューションは混在 可能 リソース使用 システムで専有 メモリの無駄が多い OSカーネルは1つ で効率が良い 柔軟性 硬直的 非常に柔軟 単機能向け 主な用途 高速なDBなど 従来型の業務シス テム Webサービスのフロ ントエンド等、同一 のものを大量配備 する必要があるも の 17
  18. 18. Dockerをインストールする 1. CentOS 7.2をインストール 2. アップデートを行う – # yum update -y 3. Dockerパッケージをインストール – # yum install docker – Docker用ストレージ領域を設定後Dockerサービス を起動するので、この段階では起動しません 4. bridge-utilsパッケージも入れておきます – # yum install bridge-utils 18
  19. 19. Docker用ストレージ領域 • Docker用のストレージ領域をLVM領域に作成 – Thin Poolと呼ばれている – 設定しないとループバックデバイスが使用されるが非推奨 1. 未使用の/dev/sdbを用意する(仮想ディスク追加など) 2. /etc/sysconfig/docker-storage-setupに以下の2行を追 加 3. docker-storage-setupを実行する – # docker-storage-setup 19 DEVS=/dev/sdb VG=dokcer-vg
  20. 20. サービスの起動 1. dockerサービスを起動する – # systemctl start docker 2. システム起動時に自動起動するように有 効化しておく – # systemctl enable docker • Dockerサービスを停止すると、動作中のコ ンテナは停止します – 消えるわけではない 20
  21. 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. 21
  22. 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 22 参考
  23. 23. Dockerイメージをダウンロード 1. CentOSのDockerイメージを検索 – # docker search centos 2. CentOSのDockerイメージをダウンロード – # docker pull centos – 最新版(latest)がダウンロードされる 3. Dockerイメージを確認 – # docker images – 基本的にはIDで識別(同一IDに複数TAGも) 23
  24. 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と名前が割り当てられる 24
  25. 25. Dockerコンテナ実行(応用) 1. コンテナ名を付ける – # docker run --name=名前 イメージ名 コマンド 2. シェルからコマンドを実行させる – # docker run イメージ名 /bin/bash -c "コマンド" – yumでパッケージをインストールしたり 3. より複雑な実行時処理を行いたい場合は Dockerfileを記述する(後述) – どこまで複雑にするかはケースバイケース? 25
  26. 26. Dockerコンテナのライフサイクル 26
  27. 27. イメージとコンテナの変移 27 centos ①コンテナとして実行(docker run) httpd ② # yum install httpd centos httpd ③コンテナをイメージ化(docker commit) ④イメージをコンテナ化 (docker run) centos
  28. 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 28
  29. 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 29
  30. 30. ストレージの使用状況を確認 • lsblkコマンドでThin Poolにしていしたブロッ クデバイスを確認する 30 # 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
  31. 31. Dockerの操作と トラブルシューティング 基礎の基礎
  32. 32. 覚えておきたいコマンド • docker inspect コンテナ名 – 実行中のコンテナの情報を確認できる • docker stop/start/pause コンテナ名 – 実行中のコンテナを停止/再実行/一時停止 • docker attach コンテナ名 – 実行中のコンテナに接続(事前にstartが必要) • docker rm コンテナ名 – 停止中のコンテナをコンテナリストから削除 • docker rmi イメージ名 – イメージを削除 32
  33. 33. トラブルシューティング • 対話式シェルを実行して手動実行 – エラーで停止したコンテナでシェル実行し、ログなどを 確認できる – # docker exec -it コンテナ名 /bin/bash • dockerサービスを再起動してみる – # systemctl restart docker – 動作中のコンテナは停止してしまうのでstartが必要 • ネットワーク周りならiptablesを確認 – # iptables-save – firewalldが動いていると煩雑なので、iptablesに切り替 える方が良いかも 33
  34. 34. Dockerのネットワーク 34
  35. 35. Dockerのネットワーク構成図 35 Dockerコンテナ eth0 eth0 docker0 veth veth Dockerコンテナ eth0 仮想的に直結 ブリッジ接続 NAPT接続(IPマスカレードやポート転送) 外部
  36. 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 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 36
  37. 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: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 赤:コンテナが外部に出ていくための設定 青:コンテナへの接続設定 37 ※firewalldを止めています
  38. 38. Dockerfileを書いてみる 38
  39. 39. Dockerfileに書ける内容 命令 内容 FROM 元となるイメージ MAINTAINER Dockerfileの制作者 RUN docker build時にコマンド実行 ADD ファイル、ディレクトリの追加 COPY ファイル、ディレクトリの追加(URL指定不可・解凍不可 ) CMD コンテナ実行時にコマンド実行(実行時上書き可) ENTRYPOINT コンテナ実行時にコマンド実行(実行時上書き不可) WORKDIR 作業ディレクトリの指定 ENV 環境変数の指定 USER 実行ユーザの指定 EXPOSE ポートの紐付け VOLUME ボリュームのマウント39
  40. 40. Dockerfileの使用例(1) • Dockerfileを作成する – ENTRYPOINTでhttpdの起動を指定しているので、 docker run時にhttp起動の指定が不要 • docker buildでDockerイメージを作る – # docker build -t httpd_dockerfile . – 最後の「. 」はカレントディレクトリのDockerfileを参照す るために指定 40 FROM centos:latest MAINTAINER tmiyahar <miyahara@virtualtech.jp> RUN yum install httpd -y ENTRYPOINT /usr/sbin/httpd -D FOREGROUND ←.(ドット)を忘れずに
  41. 41. Dockerfileの使用例(2) • Dockerイメージが作成されたことを確認 – # docker images • Docker buildで作成したイメージでコンテナを 実行する – # docker run -d -p 8081:80 --name=web2 httpd_dockerfile – # curl localhost:8081 – ENTRYPOINTでhttpdの起動を指定しているので コンテナで実行するコマンドの指定は不要 41
  42. 42. まとめと課題 • CentOS 7初期の頃は不整合が多く(特にsystemd 廻り)扱いにくかったが、こなれてきたので一度 触ってみるにはいい塩梅 – httpdとか動かなかった(/var/runがtmpfsだから) • どこまでイメージを作り込み、どこからDockerfile等 で自動化するかの加減は? – 作り込みすぎるとメンテが大変 – 自動化部分が多いとデプロイに時間がかかる • DockerHubを使ったり、Gitと連動させたり • AtomicHostとかCoreOSとか • Kubernetesのような管理ツールは? 42
  43. 43. ありがとうございました 43

×