• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Dockerクイックツアー
 

Dockerクイックツアー

on

  • 10,320 views

Linux女子部08「Docker勉強会」 ...

Linux女子部08「Docker勉強会」
http://connpass.com/event/6318/
で使用予定の資料の一部です。

変更履歴
ver1.0 公開
ver1.1 Dockerfileの内容修正
ver1.2 「Dockerとは?」追加
ver1.3 「Dockerが無いとき」を追加
ver1.4 Dockerfileを分かりやすく修正
ver1.5 微修正
ver1.6 docker-io-0.11.1-3.el7.x86_64に合わせて手順を修正
ver 1.8 Fedora20 + Docker1.0 に手順を変更
ver 1.9 run/stop/start/rm のライフサイクルの説明を追加

Statistics

Views

Total Views
10,320
Views on SlideShare
9,198
Embed Views
1,122

Actions

Likes
74
Downloads
254
Comments
0

13 Embeds 1,122

https://twitter.com 492
http://blog.livedoor.jp 301
http://www.totalsolution.biz 112
http://connpass.com 78
http://ipsys.dojima.mcnet.ad.jp 70
http://kometchtech.blog.fc2.com 22
http://docs.mos.nttcom.co.jp 22
http://ljstudy.connpass.com 10
http://www.feedspot.com 6
http://admin.blog.fc2.com 3
http://mail.totalsolution.biz 3
http://s.deeeki.com 2
https://www.chatwork.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Dockerクイックツアー Dockerクイックツアー Presentation Transcript

    • Dockerクイックツアー ver1.9 中井悦司 Twitter @enakai00 オープンクラウド・キャンパス Dockerクイックツアー
    • Open Cloud Campus 2 Dockerクイックツアー 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 「Linux独習書の新定番」 書きました! 読者の声より ―― 「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく   なっているのは不幸なことだと思う。そんな中、この本はすごくいい」 「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。  脳みそに染みこんで来ます」
    • Open Cloud Campus 3 Dockerクイックツアー Contents  Dockerとは?  Dockerの導入とコンテナの起動  アプリ導入済みイメージの利用  アプリ導入済みイメージの作成  参考:Dcokerが無いとき  参考資料 (*) Dockerは開発速度が早く、使用するバージョンによって手順が異なる場合があります。  本資料の説明はFedora20を前提としており、具体的には、下記のRPMパッケージを使用して  検証しています。 ● kernel-3.14.6-200.fc20.x86_64 ● docker-io-1.0.0-1.fc20.x86_64
    • Dockerクイックツアー Dockerとは?
    • Open Cloud Campus 5 Dockerクイックツアー 一般的なサーバ仮想化の分類 物理マシン 物理マシン ホスト OS ハイパーバイザ (カーネルモジュール) 仮想 マシン ゲスト OS VMware vSphere, Xen など Linux KVM ハードウェアによる仮想化 (物理マシンにハイパーバイザを内蔵) ソフトウェアによる仮想化 (物理マシン上にハイパーバイザを導入) ソフトウェアによる仮想化 (ホスト OS にハイパーバイザ機能を追加) 物理マシン OS 非仮想化環境 基本的には「物理マシン」と同等の「仮想マシン」を複数 作り出す技術です。 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS ハイパーバイザ(ソフトウェア) 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 物理マシン ハイパーバイザ(ファームウェア)
    • Open Cloud Campus 6 Dockerクイックツアー  「Linuxコンテナ」は、Linux標準のコンテナ型仮想化技術です。Linuxカーネルの機能によ り、ユーザプロセスの実行環境(ユーザ空間)を独立した「コンテナ」に閉じ込めます。  コンテナごとに独立したリソースを割り当てることで、アプリケーションの実行環境を分離 します。「カーネル共有型」の軽量な仮想化機能と言えます。 – コンテナごとに異なるファイルシステムを割り当て – コンテナごとに異なるネットワーク設定(仮想NIC)を割り当て – コンテナごとにCPU、メモリーの割り当て量を制限  クラウド上のLinux仮想マシンの上で、コンテナを利用することも可能です。 カーネル空間 ユーザプロセス ・・・ 物理マシン 物理マシン OS コンテナ型仮想化 非仮想化環境 ユーザプロセス ユーザプロセス ユーザ空間 カーネル空間 ユーザプロセス ユーザプロセス ユーザ空間 ユーザプロセス ユーザプロセス ユーザ空間 ・・・ コンテナ コンテナ型の仮想化とは?
    • Open Cloud Campus 7 Dockerクイックツアー Dockerとは  Docker, Inc. が開発するオープンソースのLinuxコンテナ管理ツールです。  Red Hatが協力して、RHEL対応とさらなる機能拡張を行っています。 – RHELのThin Provisioning機能対応(ディスク性能の向上) – RHEL7のプロセス管理機能(systemd)との統合 – Docker専用ディストリビューション「Red Hat Enterprise Linux Atomic Host」の開発 http://www.docker.com/
    • Open Cloud Campus 8 Dockerクイックツアー Dockerの特徴  独自の「イメージ管理機能」により、コンテナに割り当てるファイルシステムの内容をイ メージ化して管理することができます。 • 既存のイメージを編集して、新たなイメージとして登録可能。 • 作成したイメージを「レジストリ」に登録して共有可能 – 「AppStore」からアプリケーションをダウンロードする感覚で、「レジストリ」からア プリケーション導入済みイメージをダウンロードして、すぐにコンテナで実行すること ができます。 • Webサーバ(nginx)が入ったコンテナイメージをダウンロードして起動する例: – アプリケーションの新たな配信/実行基盤としての活用が期待されています。 # docker search nginx # docker pull dockerfile/nginx # docker run -d dockerfile/nginx 公開レジストリ内のイメージを検索 イメージをダウンロード イメージからコンテナを起動 アプリケーションの詰まった コンテナイメージを持ち運んで 好きなところで実行可能に!
    • Dockerクイックツアー Dockerの導入とコンテナの起動
    • Open Cloud Campus 10 Dockerクイックツアー Fedora20とDockerのインストール  Fedora20を「最小構成」+「標準アドオン」でインストールします。 • http://download.fedoraproject.org/pub/fedora/linux/releases/20/Fedora/x86_64/iso – 涙を飲んでSELinuxをDisabledにします。  Dockerをインストールして、dockerサービスを起動します。 # systemctl stop firewalld.service # systemctl mask firewalld.service # yum -y install docker-io # systemctl enable docker.service # systemctl start docker.service # systemctl status docker.service docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled) Active: activating (start) since 金 2014-06-13 21:22:08 JST; 2s ago Docs: http://docs.docker.io Main PID: 928 (docker) CGroup: /system.slice/docker.service ├─928 /usr/bin/docker -d --selinux-enabled -H fd:// └─962 mkfs.ext4 -E nodiscard,lazy_itable_init=0,lazy_journal_init=... 6月 13 21:22:08 fedora20 systemd[1]: Starting Docker Application Containe..... 6月 13 21:22:08 fedora20 docker[928]: 2014/06/13 21:22:08 docker daemon: 1...: ... この後の説明の都合で実行しています。 マスタイメージのフォーマット中 フォーマットが終わるまでしばし待ちます # yum -y update # sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config # reboot
    • Open Cloud Campus 11 Dockerクイックツアー CentOSイメージをダウンロード  構成情報を確認します。  CentOS6のイメージを公式レジストリからダウンロードします。 # docker info Containers: 0 Images: 0 Storage Driver: devicemapper Pool Name: docker-252:3-130516-pool Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 291.5 Mb Data Space Total: 102400.0 Mb Metadata Space Used: 0.7 Mb Metadata Space Total: 2048.0 Mb Execution Driver: native-0.2 Kernel Version: 3.14.6-200.fc20.x86_64 # docker search centos NAME DESCRIPTION STARS.. centos The official build of CentOS. 146 tianon/centos CentOS 5 and 6, created using rinse instea... 22 blalor/centos Bare-bones base CentOS 6.5 image 4 ... # docker pull centos # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos centos6 0c752394b855 3 days ago 124.1 MB centos latest 0c752394b855 3 days ago 124.1 MB centos 6.4 539c0211cd76 14 months ago 300.6 MB イメージ管理には、Device Mapper ドライバ(Thin-Provisioning)を使用 イメージの保存領域は(最大)100GB
    • Open Cloud Campus 12 Dockerクイックツアー レジストリ/リポジトリ/スナップショットの関係について  Dockerではイメージのスナップショットを何度も取得するので、1つの元イメージから作成 されたスナップショットの集合体をまとめて「リポジトリ(Repository)」と呼びます。 – 先ほどダウンロードした「centos」は、正確には複数のスナップショットを含む1つの「リポジト リ」になります。 – それぞれのスナップショットには、個別の「タグ(Tag)」が振られます。  Dockerの利用者は、ローカルサーバで作成した「リポジトリ」を「レジストリ (Registry)」にアップロードして公開することができます。 – デフォルトで使用されるリポジトリは、「https://index.docker.io」にあります。 – 同じユーザが複数のリポジトリを公開する際は「<ユーザ名>/hoge」のようにリポジトリ名の先頭 にユーザ名を付けます。これは、レジストリの登録ユーザ名に対応します。 リポジトリ enakai/fedora20 スナップショットの束が 1つのリポジトリ リポジトリ名は、先頭に 「<ユーザ名>/」を付ける Dokcer公式(パブリック)レジストリ https://index.docker.io oreore/hoge oreore/hoga oreore/fuga
    • Open Cloud Campus 13 Dockerクイックツアー CentOSイメージからコンテナを起動  「リポジトリ名:タグ名」でイメージを指定してコンテナを起動します。 – コンテナ内で実行するコマンドとして、ここでは「/bin/bash」を指定します。 – 「-it」オプションで、インタラクティブにbashが操作できます。 – exitでbashを終了するとコンテナ内部のプロセスが無くなって、コンテナが終了します。ただし、 コンテナの定義情報とディスクイメージは、そのまま保存されています。 # docker run -it centos:latest /bin/bash bash-4.1# cat /etc/redhat-release CentOS release 6.5 (Final) bash-4.1# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 07:59 ? 00:00:00 /bin/bash root 6 1 0 07:59 ? 00:00:00 ps -ef bash-4.1# ifconfig eth0 eth0 Link encap:Ethernet HWaddr D2:E4:56:E5:D5:59 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 ... bash-4.1# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.17.42.1 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 bash-4.1# yum -y install traceroute bash-4.1# traceroute -m 100 216.81.59.173 ... 謎のIPアドレスが振られていますが、 ホストからIPマスカレードで、 外部に出ることができます。 タグを省略した場合は 「latest」が選択されます。
    • Open Cloud Campus 14 Dockerクイックツアー コンテナのディスクイメージを保存  終了したコンテナのディスクイメージを新規のリポジトリに保存します。  保存したイメージから、新たなコンテナを起動することができます。 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fb21d0c069bf centos:centos6 /bin/bash 3 minutes ago Exited (0) 1 seconds ago boring_bardeen # docker commit ca1f25132c15 enakai/centos6:traceroute a0725f4d429fb5c00e47fd9453eea654fc99fe71864d5946a01954ca630cb2e5 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE enakai/centos6 traceroute 44f1d7517217 6 seconds ago 171.6 MB centos centos6 0c752394b855 3 days ago 124.1 MB centos latest 0c752394b855 3 days ago 124.1 MB centos 6.4 539c0211cd76 14 months ago 300.6 MB # docker run -it enakai/centos6:traceroute /bin/bash bash-4.1# traceroute --version Modern traceroute for Linux, version 2.0.14, Nov 11 2010 Copyright (c) 2008 Dmitry Butskoy, License: GPL v2 or any later bash-4.1# exit
    • Open Cloud Campus 15 Dockerクイックツアー コンテナのディスクイメージを保存  終了したコンテナで不要なものは、次のコマンドで削除しておきます。 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 16dd08fefadb enakai/centos6:traceroute /bin/bash 2 minutes ago Exited (0) 2 seconds ago distracted_fermi fb21d0c069bf centos:centos6 /bin/bash 7 minutes ago Exited (0) 4 minutes ago boring_bardeen # docker rm 16dd08fefadb docker r16dd08fefadb # docker rm fb21d0c069bf fb21d0c069bf # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    • Dockerクイックツアー アプリ導入済みイメージの利用
    • Open Cloud Campus 17 Dockerクイックツアー アプリケーション導入済みイメージのダウンロード  nginxをインストール済みのイメージを公式レジストリからダウンロードします。 # docker search nginx NAME DESCRIPTION STARS... nginx Official build of Nginx. 46 dockerfile/nginx Trusted Nginx (http://nginx.org/) Build ... 30� fedora/nginx 18 ... # docker pull dockerfile/nginx # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE enakai/centos6 traceroute 44f1d7517217 7 minutes ago 171.6 MB centos centos6 0c752394b855 3 days ago 124.1 MB centos latest 0c752394b855 3 days ago 124.1 MB dockerfile/nginx latest 2a106d243809 3 weeks ago 604.7 MB centos 6.4 539c0211cd76 14 months ago 300.6 MB
    • Open Cloud Campus 18 Dockerクイックツアー イメージの設定確認  このイメージは自動でnginxが起動するように仕込まれています。 # image_id=2a106d243809; cat /var/lib/docker/graph/$image_id*/json | python -mjson.tool { "Size": 0, "architecture": "amd64", ... "Cmd": [ "nginx" ], "Env": [ "HOME=/root", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "ExposedPorts": { "443/tcp": {}, "80/tcp": {} }, ... "Volumes": { "/data": {}, "/etc/nginx/sites-enabled": {}, "/var/log/nginx": {} }, ... イメージの詳細設定を確認する 裏ワザ(?)のコマンド コンテナ起動時に実行するコマンド ホストからポート転送可能にするポート ホストのディレクトリをコンテナから共有可能 にする「コンテナ側」のマウントポイント
    • Open Cloud Campus 19 Dockerクイックツアー アプリケーション導入済みのイメージからのコンテナ起動  このイメージからコンテナを起動します。 – 「-d」でバックグランド実行 – 「-v 」はホストの「/tmp/log」をコンテナ内の「/var/log/nginx」にマウント – 「-p 8000:80」はホストの8000番ポートをコンテナ内の80番ポートに転送 # mkdir /tmp/log # docker run -d -p 8000:80 -v /tmp/log:/var/log/nginx dockerfile/nginx:latest b4d1efd972391d0d67ace6b839751a5a25bd5d25bae448a21d95c22ef1923757 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b4d1efd97239 dockerfile/nginx:latest nginx 8 seconds ago Up 6 seconds 443/tcp, 0.0.0.0:8000->80/tcp furious_heisenberg # iptables-save # Generated by iptables-save v1.4.19.1 on Fri Jun 13 22:02:34 2014 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :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 ! -d 172.17.0.0/16 -j MASQUERADE -A DOCKER ! -i docker0 -p tcp -m tcp --dport 8000 -j DNAT --to-destination 172.17.0.5:80 COMMIT ...
    • Open Cloud Campus 20 Dockerクイックツアー コンテナの動作確認  コンテナ内のWebサーバにアクセスします。  コンテナ内にマウントされたディレクトリからログが確認できます。 # curl http://localhost:8000 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> ... # cat /tmp/log/access.log 172.17.42.1 - - [13/Jun/2014:13:03:45 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.32.0"
    • Open Cloud Campus 21 Dockerクイックツアー コンテナの動作確認  コンテナ内のプロセスをホスト側から確認する際は、次のコマンドが使用できます。 – Dockerはsystemdと連携して、コンテナごとにcgroupsのグループを作成します。 # docker top b4d1efd97239 UID PID PPID C STIME TTY TIME CMD root 1724 928 0 22:01 ? 00:00:00 nginx: master process nginx 33 1734 1724 0 22:01 ? 00:00:00 nginx: worker process 33 1735 1724 0 22:01 ? 00:00:00 nginx: worker process 33 1736 1724 0 22:01 ? 00:00:00 nginx: worker process 33 1737 1724 0 22:01 ? 00:00:00 nginx: worker process # systemd-cgls ... └─system.slice ├─docker-b4d1efd972391d0d67ace6b839751a5a25bd5d25bae448a21d95c22ef1923757.scope │ ├─1724 nginx: master process ngin │ ├─1734 nginx: worker proces │ ├─1735 nginx: worker proces │ ├─1736 nginx: worker proces │ └─1737 nginx: worker proces ... 「docker-<コンテナID>.scope」が cgroupsのグループ名
    • Dockerクイックツアー アプリ導入済みイメージの作成
    • Open Cloud Campus 23 Dockerクイックツアー アプリケーション導入済みイメージを自分で作成  最初のCentOS6のイメージでやったように、手動でコンテナ内にアプリケーションをイン ストールしてイメージを保存することもできます。  ただし、一般には、「Dockerfile」を利用する方が便利です。 – インストール作業が自動化されるので、イメージの修正・再作成の手間がかかりません。 – コンテナ起動時に実行するコマンド、外部に公開するポート番号、ホストのディレクトリをコンテ ナ内にマウント可能にする、などの追加設定も行えます。
    • Open Cloud Campus 24 Dockerクイックツアー Dockerfileの使い方  1つのディレクトリに「Dockerfile」と関連ファイルをまとめて入れておきます。 # ls enakai_httpd Dockerfile authorized_keys init.sh src FROM centos MAINTAINER enakai RUN yum -y install openssh-server sudo httpd RUN useradd enakai RUN mkdir /home/enakai/.ssh ADD authorized_keys /home/enakai/.ssh/authorized_keys RUN chown -R enakai.enakai /home/enakai/.ssh RUN chmod 600 /home/enakai/.ssh/authorized_keys RUN echo "enakai ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/enakai ADD src /var/www/html RUN chmod -R 644 /var/www/html/* EXPOSE 22 80 ADD init.sh /usr/local/bin/init.sh RUN chmod u+x /usr/local/bin/init.sh CMD ["/usr/local/bin/init.sh"] Dockerfile #!/bin/sh service sshd start service httpd start while [[ true ]]; do /bin/bash done init.sh sshdとhttpdを起動するコンテナの例 – Dockerfileには次のような指示を記述します。 • FROM : 出発点のイメージ • RUN : コマンド実行 • ADD : ファイル(ディレクトリ)をコピー • EXPOSE : 外部からアクセス可能なポート番号 • CMD/ENTRYPOINT : コンテナ起動時の実行コマンド – 詳細は下記のドキュメントを参照 • http://docs.docker.io/reference/builder/ コンテナにSSHログインする際の認証用公開鍵 HTTPDで公開するコンテンツディレクトリ
    • Open Cloud Campus 25 Dockerクイックツアー Dockerfileのビルドとコンテナの起動  先のファイルを入れたディレクトリを指定して、ビルドを実施します。  ビルドしたイメージからコンテナを起動してみます。 – 「docker attach」でbashに接続するには、「--itd」オプションが必要です。 – 「--name」オプションで名前をつけると、コンテンIDの代わりに名前で各種操作ができます。 # docker build -t enakai/httpd:ver1.0 enakai_httpd # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE enakai/httpd ver1.0 1b25b8646223 40 seconds ago 379.7 MB ... # docker run -itd -p 8000:80 -p 2222:22 --name web01 enakai/httpd:ver1.0 1014c487be4eac6f3e895192262bd8cc6eb875916a6472e7895a0d8821eac2fe # systemd-cgls ... └─system.slice ├─docker-1014c487be4eac6f3e895192262bd8cc6eb875916a6472e7895a0d8821eac2fe.scop │ ├─6127 /bin/sh /usr/local/bin/init.sh │ ├─6165 /usr/sbin/sshd │ ├─6177 /usr/sbin/httpd │ ├─6179 /usr/sbin/httpd │ ├─6180 /usr/sbin/httpd │ ├─6181 /bin/bash │ ├─6182 /usr/sbin/httpd │ ├─6183 /usr/sbin/httpd ... # curl http://localhost:8000 Hello, World!
    • Open Cloud Campus 26 Dockerクイックツアー Dockerfileのビルドとコンテナの起動 – SSHでログインして、sudoでrootになる様子です。 # ssh enakai@localhost -p 2222 The authenticity of host '[localhost]:2222 ([::1]:2222)' can't be established. RSA key fingerprint is 78:d1:17:dd:5d:d1:e0:76:46:94:e6:14:c8:0f:f0:0f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[localhost]:2222' (RSA) to the list of known hosts. [enakai@1014c487be4e ~]$ sudo -i [root@1014c487be4e ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 14:24 ? 00:00:00 /bin/sh /usr/local/bin/init.sh root 35 1 0 14:24 ? 00:00:00 /usr/sbin/sshd root 47 1 0 14:24 ? 00:00:00 /usr/sbin/httpd apache 49 47 0 14:24 ? 00:00:00 /usr/sbin/httpd apache 50 47 0 14:24 ? 00:00:00 /usr/sbin/httpd root 51 1 0 14:24 ? 00:00:00 /bin/bash apache 52 47 0 14:24 ? 00:00:00 /usr/sbin/httpd apache 53 47 0 14:24 ? 00:00:00 /usr/sbin/httpd apache 54 47 0 14:24 ? 00:00:00 /usr/sbin/httpd apache 55 47 0 14:24 ? 00:00:00 /usr/sbin/httpd apache 56 47 0 14:24 ? 00:00:00 /usr/sbin/httpd apache 57 47 0 14:24 ? 00:00:00 /usr/sbin/httpd root 60 35 0 14:24 ? 00:00:00 sshd: enakai [priv] enakai 62 60 0 14:25 ? 00:00:00 sshd: enakai@pts/0 enakai 63 62 0 14:25 pts/0 00:00:00 -bash root 78 63 0 14:25 pts/0 00:00:00 sudo -i root 79 78 0 14:25 pts/0 00:00:00 -bash root 90 79 0 14:25 pts/0 00:00:00 ps -ef
    • Open Cloud Campus 27 Dockerクイックツアー Dockerfileのビルドとコンテナの起動  コンテナを停止した後、再度、起動する例です。 – 「docker run」は、最初にコンテナを起動した際と同じオプションで、再度、コンテナを作成しま す。ディスクイメージは停止時に保存してあるものを再利用します。 – 不要になったコンテナは停止した後に、「docker rm」で削除しておきます。 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1014c487be4e enakai/httpd:ver1.0 /usr/local/bin/init. About a minute ago Up About a minute 0.0.0.0:2222->22/tcp, 0.0.0.0:8000->80/tcp web01 # docker stop web01 web01 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1014c487be4e enakai/httpd:ver1.0 /usr/local/bin/init. About a minute ago Exited (-1) 2 seconds ago web01 # docker start web01 web01 [root@fedora20 ~]# !curl curl http://localhost:8000 Hello, World! # docker stop web01 web01 # docker rm web01 web01 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    • Dockerクイックツアー 参考:Dockerが無いとき ( ´ー`)551が~ あるとき~(´ー` ) ( ´ - `)ないとき~(´ - ` ) ( ´ー`)あるとき~(´ー` ) ( ´ - `)ないとき~(´ - ` ) ( ´ー`)あるとき~(´ー` ) ( ´ - `)ないとき~(´ - ` )
    • Open Cloud Campus 29 Dockerクイックツアー libvirtによるコンテナ作成  RHEL6.5の環境で、libvirtを使用してコンテナを作成する手順を紹介します。 – 図のようにKVM仮想マシンと同様にvirshコマンドでコンテナを作成・管理できます。ここで は、busyboxによる簡易httpdサーバをコンテナ内で起動します。 – はじめに、通常の手順でKVMホスト環境を用意します。 仮想マシン#1 vnet1 eth0 仮想マシン#2 eth0 IPマスカレード ホスト Linuxvnet0 eth0 外部ネットワーク veth0 eth0 コンテナ#1 virbr0 (default) busybox 192.168.122.190 192.168.122.1 # yum groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform" # chkconfig libvirtd on # reboot
    • Open Cloud Campus 30 Dockerクイックツアー 仮想ルートファイルシステムの用意  アプリケーションコンテナの仮想ルートファイルシステムを用意します。 – busyboxの動作に必要な最小限の環境を「/export/lxcguest01」以下に用意します。 – コンテナ起動時に最初に実行するスクリプト「/export/lxcguest01/bin/init」を作成します。 • これは、IPアドレスの設定と簡易Webサーバの起動を行います。最後の「sh」は、仮想コンソールで使用する シェルになります。 – 「/export/lxcguset01/bin/init」に実行権を設定します。 – 簡易Webサーバで公開するコンテンツ「/export/lxcguest01/html/index.html」を用意します。 # mkdir -p /export/lxcguest01/bin # mkdir -p /export/lxcguest01/html # cd /export/lxcguest01/bin # cp /sbin/busybox ./ # for i in echo grep ifconfig kill ps route test which cat false head ls pwd sh true date find httpd ip ping rm sleep wget; do ln -s busybox $i; done #!/bin/sh ifconfig eth0 192.168.122.190 route add default gw 192.168.122.1 eth0 httpd -h /html while [[ true ]]; do sh done /export/lxcguest01/bin/init # chmod u+x /export/lxcguest01/bin/init <h1>Welcome to Linux Container</h1> /export/lxcguest01/html/index.html
    • Open Cloud Campus 31 Dockerクイックツアー コンテナの定義  コンテナ「lxcguest01」を定義して、起動します。 – コンテナ定義のXMLファイル「/root/work/lxcguest01.xml」を作成します。 – コンテナを定義します。 <domain type='lxc'> <name>lxcguest01</name> <memory>200000</memory> <os> <type>exe</type> <init>/bin/init</init> </os> <devices> <interface type='network'> <source network='default'/> </interface> <console type='pty'/> <filesystem type='mount'> <source dir='/export/lxcguest01'/> <target dir='/'/> </filesystem> </devices> </domain> /root/work/lxcguest01.xml # cd /root/work # virsh -c lxc:/// define lxcguest01.xml ドメイン lxcguest01 が lxcguest01.xml から定義されました # virsh -c lxc:/// list --all Id 名前 状態 ---------------------------------- - lxcguest01 シャットオフ
    • Open Cloud Campus 32 Dockerクイックツアー コンテナの起動 – コンテナを起動します。 – コンテナの仮想コンソールに接続して、コンテナ内部の状態を確認します。 • 最初に起動した「/export/lxcguest01/bin/init」がPID 1のプロセスとなり、その子プロセスが見えます。 ファイルシステムは「/export/lxcguset01」がルートファイルシステムとして見えます。 # virsh -c lxc:/// start lxcguest01 ドメイン lxcguest01 が起動されました # virsh -c lxc:/// list --all Id 名前 状態 ---------------------------------- 12123 lxcguest01 実行中 # virsh -c lxc:/// console lxcguest01 Connected to domain lxcguest01 エスケープ文字は ^] です # ps -ef PID USER TIME COMMAND 1 0 0:00 /bin/sh /bin/init 6 0 0:00 httpd -h /html 7 0 0:00 sh 8 0 0:00 ps -ef # ls -l drwxr-xr-x 2 0 0 4096 May 15 23:01 bin drwxr-xr-x 10 0 0 200 May 15 23:05 cgroup drwxr-xr-x 3 0 0 300 May 15 23:05 dev drwxr-xr-x 2 0 0 4096 May 15 23:02 html dr-xr-xr-x 324 0 0 0 May 15 23:05 proc drwxr-xr-x 13 0 0 0 Mar 13 03:14 sys
    • Open Cloud Campus 33 Dockerクイックツアー コンテナの起動 – コンテナ内部の状態確認の続きです。 • コンテナ内部には仮想NIC「eth0」がアサインされています。これは、ホストLinux上の「veth0」と接続され ています。仮想コンソールへの接続は、「Ctrl+]」で終了します。 – ホストLinuxからWebサーバにアクセスできることも分かります。 # ifconfig eth0 eth0 Link encap:Ethernet HWaddr 52:54:00:44:E0:52 inet addr:192.168.122.190 Bcast:192.168.122.255 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fe44:e052/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:648 (648.0 B) TX bytes:648 (648.0 B) # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.122.1 0.0.0.0 UG 0 0 0 eth0 # ← Ctrl+]を押す # curl http://192.168.122.190 <h1>Welcome to Linux Container</h1>
    • Open Cloud Campus 34 Dockerクイックツアー ホストLinuxからの確認とコンテナの停止  ホストLinux上でコンテナの状態を確認します。 – ホストLinux上でコンテナを実行するプロセスを確認します。 • libvirt_lxcから起動される子プロセスがコンテナ内部から見えるプロセスになります。 – 仮想ブリッジの状態を確認します。 # pstree ・・・ ├─libvirt_lxc───init─┬─httpd │ └─sh ・・・ # brctl show virbr0 bridge name bridge id STP enabled interfaces virbr0 8000.52540031ddff no veth0 virbr0-nic eth0 IPマスカレード ホスト Linux 外部ネットワーク veth0 eth0 コンテナ#1 virbr0 busybox 192.168.122.190 192.168.122.1# virsh -c lxc:/// dumpxml lxcguest01 | grep veth <target dev='veth0'/> • この例では、「virbr0」に接続された「veth0」がコンテナ内部の仮想 NIC「eth0」に接続されています。 • 実際にコンテナに割り当てられた仮想イーサネットデバイスは、次のコマンド で確認します。 – コンテナ「lxcguest01」を停止します。 # virsh -c lxc:/// destroy lxcguest01 ドメイン lxcguest01 は強制停止されました
    • Dockerクイックツアー 参考資料
    • Open Cloud Campus 36 Dockerクイックツアー 参考資料  Dockerfile tutorial – https://www.docker.io/learn/dockerfile/
    • Open Cloud Campus 37 Dockerクイックツアー QA
    • Dockerクイックツアー 中井悦司 Twitter @enakai00 オープンクラウド・キャンパス RHEL7 & Fedoraで最新技術を 学びましょう!