Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月

11,917 views

Published on

今さら聞けない人のためのDocker超入門
講師:宮原 徹(日本仮想化技術株式会社 代表取締役兼CEO)

Docker盛り上がってるなあ、と横目で見ながら、今まで触らずに来てしまった。今さらDockerの使い方とか聞けない、という方のためのDocker超入門です。CentOS 7を使って、Dockerの基本的な使い方をデモを交えて解説します。また、DockerとOpenStackの連携についても簡単に解説します。

Published in: Technology
  • Be the first to comment

今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月

  1. 1. 今さら聞けない人のための Docker超入門 日本仮想化技術株式会社 代表取締役社長兼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万円 • 売上高:1億3,573万円(2013年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の操作とトラブルシューティング 基礎の基礎 • Dockerfileを書いてみる • DockerとOpenStack • スタッフ募集のお知らせ • Dockerを触ったことがない、という方向けです • ごく基本的な話しかしていません • バージョンアップして変更になったり、もっと色々なテク ニックも存在します 5
  6. 6. Dockerを動かそう 6
  7. 7. Dockerの特徴 • 1コンテナ1プロセスで動作する – ハイパーバイザーのオーバーヘッドが無い • ≒コンテナ内で1プロセスが動作する – サービスプロセスと並行で対話型シェルを動 かすなどの考え方は基本的に無い – コンテナの中であれもこれも動作させるのに は向かない • Dockerイメージはファイルシステム – chrootを思い浮かべるとちょうどいい 7
  8. 8. Dockerをインストールする 1. CentOS 7をインストール 2. Dockerパッケージをインストール – # yum install docker 3. bridge-utilsパッケージも入れておきます – # yum install bridge-utils 4. dockerサービスを起動しておきます – # systemctl start docker.service – # systemctl enable docker.service 8
  9. 9. Dockerイメージをダウンロード 1. CentOS 7のDockerイメージを検索 – # docker search centos 2. CentOSのDockerイメージをダウンロード – # docker pull centos – 最新版(latest)がダウンロードされる 3. Dockerイメージを確認 – # docker images – 基本的にはIDで識別(同一IDに複数TAGも) 9
  10. 10. 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と名前が割り当てられる 10
  11. 11. Dockerコンテナ実行(応用) 1. コンテナ名を付ける – # docker run --name=名前 イメージ名 コマンド 2. シェルからコマンドを実行させる – # docker run イメージ名 /bin/bash -c "コマンド" – yumでパッケージをインストールしたり 3. より複雑な実行時処理を行いたい場合は Dockerfileを記述する(後述) – どこまで複雑にするかはケースバイケース? 11
  12. 12. Dockerコンテナのライフサイクル 12
  13. 13. イメージとコンテナの変移 13 centos ①コンテナとして実行(docker run) httpd ② # yum install httpd centos httpd ③コンテナをイメージ化(docker commit) ④イメージをコンテナ化 (docker run) centos
  14. 14. コンテナをイメージ化 1. コンテナにhttpdパッケージをインストール – # docker run --name=httpd centos /bin/bash -c "yum install httpd -y" 2. httpdコンテナをコミットしてイメージ化 – # docker commit httpd httpd_template 3. イメージを確認 – # docker images 14
  15. 15. 新たなイメージからコンテナ実行 1. コンテナでhttpdを実行し、コンテナのポート80 番をホストの8080番に紐付ける – # docker run -d -p 8080:80 --name=web1 httpd_template /usr/sbin/htttpd -D FOREGROUND – -d, --detach=true|false 2. ポートが紐付いていることを確認 – # docker ps -a – # curl localhost:8080 15
  16. 16. httpdが動かない!? • CentOS 7.1へのバージョンアップが原因 • /run mounted as tmpfs in container and causes changes in the directory to not be persistent – https://bugzilla.redhat.com/show_bug.cgi?id=1 194542 • Dockerコンテナ内に/run/httpdディレクトリ が存在しない – systemd-tmpfiles-setup.serviceが作成する 16
  17. 17. httpdが動かない場合の手順 1. 対話型でDockerコンテナを起動 – # docker run -it --name=httpd centos /bin/bash 2. httpdパッケージをインストールする – # yum install httpd 3. Bug情報にあるシェルスクリプトを仕込む 4. docker commitする – # docker commit httpd httpd_template 5. docker runする時にシェルスクリプトを起動する – # docker run -d -p 8080:80 --name=web1 httpd_template /usr/bin/my_httpd_startup.bash 17
  18. 18. /usr/bin/my_httpd_startup.bash #!/bin/bash # Make sure we're not confused by old, incompletely-shutdown httpd # context after restarting the container. httpd won't start correctly # if it thinks it is already running. rm -rf /run/httpd/* # need to create directories per /usr/lib/tmpfiles.d/httpd.conf ## d /run/httpd 710 root apache ## d /run/httpd/htcacheclean 700 apache apache mkdir -p /run/httpd/htcacheclean chmod 710 /run/httpd chmod 700 /run/httpd/htcacheclean chown root:apache /run/httpd chown apache:apache /run/httpd/htcacheclean exec /usr/sbin/apachectl -D FOREGROUND 18
  19. 19. Dockerの操作と トラブルシューティング 基礎の基礎
  20. 20. 覚えておきたいコマンド • docker inspect – 実行中のコンテナの情報を確認できる • docker stop/start/pause – 実行中のコンテナを停止/再実行/一時停止 • docker attach – 実行中のコンテナに接続(事前にstartが必要) • docker rm – 停止中のコンテナをコンテナリストから削除 • docker rmi – イメージを削除 20
  21. 21. トラブルシューティング • 対話式シェルを実行して手動実行 – エラーで停止したコンテナにログインできない ので、原因を探るにはシェル実行 – nsenterを使用する方法も • dockerサービスを再起動してみる – # systemctl restart docker – 動作中のコンテナは停止してしまう • ネットワーク周りならiptablesを確認 – # iptables-save 21
  22. 22. nsenterを便利に使う 1. util-linuxパッケージをインストールする – # yum install util-linux 2. /usr/bin/docker-nsenterスクリプトを作る 1. コンテナIDか名前を引数に実行 – # docker-nsenter コンテナID|名前 2. 各種コマンドが実行できます 22 #!/bin/sh /bin/nsenter --mount --uts --ipc --net --pid --target `docker inspect --format '{{.State.Pid}}' $1`
  23. 23. ホストの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 23
  24. 24. Dockerのネットワーク構成図 24 Dockerコンテナ eth0 eth0 docker0 veth veth Dockerコンテナ eth0 仮想的に直結 ブリッジ接続 NAPT接続(IPマスカレードやポート転送) 外部
  25. 25. 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 赤:コンテナが外部に出ていくための設定 青:コンテナへの接続設定 25 ※firewalldを止めています
  26. 26. Dockerfileを書いてみる 26
  27. 27. Dockerfileに書ける内容 命令 内容 FROM 元となるイメージ MAINTAINER Dockerfileの制作者 RUN コマンドの実行 ADD ファイル、ディレクトリの追加 CMD コンテナの実行コマンド(実行時上書き可) ENTRYPOINT コンテナの実行コマンド(実行時上書き不 可) WORKDIR 作業ディレクトリの指定 ENV 環境変数の指定 USER 実行ユーザの指定 EXPOSE ポートの紐付け VOLUME ボリュームのマウント 27
  28. 28. Dockerfileの使用例 • Dockerfileを作成する – ENTRYPOINTでhttpdの起動を指定している ので、docker run時に指定が不要 • docker buildでイメージを作る – # docker build -t イメージ名 ./Dockerfile 28 FROM centos:latest MAINTAINER tmiyahar <miyahara@virtualtech.jp> RUN yum install httpd -y ENTRYPOINT /usr/sbin/httpd -D FOREGROUND
  29. 29. DockerとOpenStack 29
  30. 30. DockerとOpenStack • HavanaでNova hypervisor driverとして登場 • IcehouseとJunoでは"out-of-tree" – 色々と改良を加えるのに制限が少ない状態 • Kiloでmainlineに復帰しますよ • DockerイメージをGlanceに格納 – docker saveコマンドの出力(tarball)をglanceコマン ドにパイプで流し込む – コンテナフォーマットはdocker – あまり細かい制御はできないのでDockerfileで事 前設定必須 30 https://wiki.openstack.org/wiki/Docker より
  31. 31. DockerDriverのアーキテクチャ 31 GlanceへのDockerイメージの格納は docker saveコマンドを使う docker-registryは今後不要となる https://wiki.openstack.org/wiki/Docker より
  32. 32. スタッフ募集のお知らせ
  33. 33. 日本仮想化技術株式会社は • 仮想化技術のエキスパート集団 • 進取の精神 • 豊富な検証機材で新技術を追求 • 自由な雰囲気の職場
  34. 34. 募集している職種は • サーバー・ネットワークエンジニア – LPIC、CCNAなどの保有者歓迎 • プログラマー – オブジェクト指向言語が理解できている事 – OpenStackのコードを読んだり、書いたり • 営業・企画・マーケティング – SE、PL、PM経験者大歓迎
  35. 35. 募集条件 •実力主義 •年齢・経験不問 •チャレンジ大歓迎
  36. 36. 勤務先は? •渋谷駅より徒歩5分 •全員がゆったりデスク とアーロンチェア
  37. 37. オフィスは渋谷駅至近 37 日本仮想化技術 オフィス ハ チ 公 渋谷駅東 口 交差点信 号 渋 谷 駅 ヒカリエの中を通ると 雨の日にあまり濡れません 渋 谷 郵 便 局
  38. 38. 優れた環境が優れた成果を生む 渋谷駅徒歩5分の新オフィス 幅140cmのゆったりデスクとアーロンチェア MacBook Pro/Airと大型液晶モニタが標準 キーボード・マウスも自由 充実の検証環境 最新機材で作業
  39. 39. 充実の福利厚生 • マッサージチェア • 充実のフリードリンクコーナー – 各種お茶類、ネスプレッソなど各種取り揃え • 誕生日はケーキでお祝い • 雑誌年間購読制度 – 何でも好きな雑誌を年間購読 • 書籍購入支援制度 – 好きな書籍(漫画も可)を1万円/年購入 39
  40. 40. お問い合わせ先 メールにて recruit@VirtualTech.jp 履歴書、職務経歴書をご用意ください ご紹介も是非。きっと何かいいことあります。 40
  41. 41. お待ちしております 41
  42. 42. 夏だ!雲人Tシャツ緊急販売 42 最南端の波照間島より南方を臨む

×