SlideShare a Scribd company logo
1 of 38
Download to read offline
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で最新技術を
学びましょう!

More Related Content

What's hot

Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編VirtualTech Japan Inc.
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Emma Haruka Iwao
 
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)NTT DATA Technology & Innovation
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Masahito Zembutsu
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)NTT DATA Technology & Innovation
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理NTT DATA Technology & Innovation
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 

What's hot (20)

Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Ceph アーキテクチャ概説
Ceph アーキテクチャ概説Ceph アーキテクチャ概説
Ceph アーキテクチャ概説
 
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 

Viewers also liked

インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門Masahito Zembutsu
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらいNaoki Nagazumi
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようmookjp
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Masahito Zembutsu
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paiza
 
Dockerのネットワークについて
DockerのネットワークについてDockerのネットワークについて
DockerのネットワークについてNobuyuki Matsui
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらインターネット株式会社
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Masahito Zembutsu
 
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションDocker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションMasahito Zembutsu
 
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~Kunihiro TANAKA
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版Kamon Nobuchika
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Emma Haruka Iwao
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月VirtualTech Japan Inc.
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Masahito Zembutsu
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜Shuji Yamada
 
Dockerの基本的な話
Dockerの基本的な話Dockerの基本的な話
Dockerの基本的な話gree_tech
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Etsuji Nakai
 

Viewers also liked (20)

インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらい
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺
 
Dockerのネットワークについて
DockerのネットワークについてDockerのネットワークについて
Dockerのネットワークについて
 
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
 
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーションDocker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
 
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
OSC 2014 Tokyo/Spring さくらの社長が語る!「さくらのクラウド」でのウェブサービスかんたん運用術~Dockerをつかってみた~
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
 
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
2015-07-27 Docker Introduction 〜Dockerの基礎とユースケースに関する考察〜
 
Dockerの基本的な話
Dockerの基本的な話Dockerの基本的な話
Dockerの基本的な話
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 

Similar to Dockerクイックツアー

OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックOpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックEtsuji Nakai
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコムTomoyaTakegoshi
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニックRed Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニックEtsuji Nakai
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方Kento Aoyama
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Microsoft Corporation
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解Masahito Zembutsu
 
Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンRyo Nakamaru
 

Similar to Dockerクイックツアー (20)

OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニックOpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニックRed Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
Red Hat Enterprise Linux OpenStack Platform環境でのDocker活用テクニック
 
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
第37回「Dockerのユースケースと将来」(2014/10/30 on しすなま!)
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Jenkins with Docker
Jenkins with DockerJenkins with Docker
Jenkins with Docker
 
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解鯨物語~Dockerコンテナとオーケストレーションの理解
鯨物語~Dockerコンテナとオーケストレーションの理解
 
Docker handson
Docker handsonDocker handson
Docker handson
 
Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
 

More from Etsuji Nakai

「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考えるEtsuji Nakai
 
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Etsuji Nakai
 
Introducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowIntroducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowEtsuji Nakai
 
Googleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスGoogleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスEtsuji Nakai
 
Spannerに関する技術メモ
Spannerに関する技術メモSpannerに関する技術メモ
Spannerに関する技術メモEtsuji Nakai
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsEtsuji Nakai
 
A Brief History of My English Learning
A Brief History of My English LearningA Brief History of My English Learning
A Brief History of My English LearningEtsuji Nakai
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎Etsuji Nakai
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門Etsuji Nakai
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineEtsuji Nakai
 
Lecture note on PRML 8.2
Lecture note on PRML 8.2Lecture note on PRML 8.2
Lecture note on PRML 8.2Etsuji Nakai
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersMachine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersEtsuji Nakai
 
Your first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterYour first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterEtsuji Nakai
 
Deep Q-Network for beginners
Deep Q-Network for beginnersDeep Q-Network for beginners
Deep Q-Network for beginnersEtsuji Nakai
 
TensorFlowで学ぶDQN
TensorFlowで学ぶDQNTensorFlowで学ぶDQN
TensorFlowで学ぶDQNEtsuji Nakai
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかEtsuji Nakai
 
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜Etsuji Nakai
 

More from Etsuji Nakai (20)

PRML11.2-11.3
PRML11.2-11.3PRML11.2-11.3
PRML11.2-11.3
 
「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える
 
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
 
Introducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowIntroducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlow
 
Googleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスGoogleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービス
 
Spannerに関する技術メモ
Spannerに関する技術メモSpannerに関する技術メモ
Spannerに関する技術メモ
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 
A Brief History of My English Learning
A Brief History of My English LearningA Brief History of My English Learning
A Brief History of My English Learning
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
Lecture note on PRML 8.2
Lecture note on PRML 8.2Lecture note on PRML 8.2
Lecture note on PRML 8.2
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersMachine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application Developers
 
Your first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterYour first TensorFlow programming with Jupyter
Your first TensorFlow programming with Jupyter
 
Deep Q-Network for beginners
Deep Q-Network for beginnersDeep Q-Network for beginners
Deep Q-Network for beginners
 
Life with jupyter
Life with jupyterLife with jupyter
Life with jupyter
 
TensorFlowで学ぶDQN
TensorFlowで学ぶDQNTensorFlowで学ぶDQN
TensorFlowで学ぶDQN
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきか
 
PRML7.2
PRML7.2PRML7.2
PRML7.2
 
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

Dockerクイックツアー

  • 2. Open Cloud Campus 2 Dockerクイックツアー 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 「Linux独習書の新定番」 書きました! 読者の声より ―― 「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく   なっているのは不幸なことだと思う。そんな中、この本はすごくいい」 「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。  脳みそに染みこんで来ます」
  • 3. 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
  • 5. Open Cloud Campus 5 Dockerクイックツアー 一般的なサーバ仮想化の分類 物理マシン 物理マシン ホスト OS ハイパーバイザ (カーネルモジュール) 仮想 マシン ゲスト OS VMware vSphere, Xen など Linux KVM ハードウェアによる仮想化 (物理マシンにハイパーバイザを内蔵) ソフトウェアによる仮想化 (物理マシン上にハイパーバイザを導入) ソフトウェアによる仮想化 (ホスト OS にハイパーバイザ機能を追加) 物理マシン OS 非仮想化環境 基本的には「物理マシン」と同等の「仮想マシン」を複数 作り出す技術です。 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS ハイパーバイザ(ソフトウェア) 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 仮想 マシン ゲスト OS 物理マシン ハイパーバイザ(ファームウェア)
  • 6. Open Cloud Campus 6 Dockerクイックツアー  「Linuxコンテナ」は、Linux標準のコンテナ型仮想化技術です。Linuxカーネルの機能によ り、ユーザプロセスの実行環境(ユーザ空間)を独立した「コンテナ」に閉じ込めます。  コンテナごとに独立したリソースを割り当てることで、アプリケーションの実行環境を分離 します。「カーネル共有型」の軽量な仮想化機能と言えます。 – コンテナごとに異なるファイルシステムを割り当て – コンテナごとに異なるネットワーク設定(仮想NIC)を割り当て – コンテナごとにCPU、メモリーの割り当て量を制限  クラウド上のLinux仮想マシンの上で、コンテナを利用することも可能です。 カーネル空間 ユーザプロセス ・・・ 物理マシン 物理マシン OS コンテナ型仮想化 非仮想化環境 ユーザプロセス ユーザプロセス ユーザ空間 カーネル空間 ユーザプロセス ユーザプロセス ユーザ空間 ユーザプロセス ユーザプロセス ユーザ空間 ・・・ コンテナ コンテナ型の仮想化とは?
  • 7. 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/
  • 8. Open Cloud Campus 8 Dockerクイックツアー Dockerの特徴  独自の「イメージ管理機能」により、コンテナに割り当てるファイルシステムの内容をイ メージ化して管理することができます。 • 既存のイメージを編集して、新たなイメージとして登録可能。 • 作成したイメージを「レジストリ」に登録して共有可能 – 「AppStore」からアプリケーションをダウンロードする感覚で、「レジストリ」からア プリケーション導入済みイメージをダウンロードして、すぐにコンテナで実行すること ができます。 • Webサーバ(nginx)が入ったコンテナイメージをダウンロードして起動する例: – アプリケーションの新たな配信/実行基盤としての活用が期待されています。 # docker search nginx # docker pull dockerfile/nginx # docker run -d dockerfile/nginx 公開レジストリ内のイメージを検索 イメージをダウンロード イメージからコンテナを起動 アプリケーションの詰まった コンテナイメージを持ち運んで 好きなところで実行可能に!
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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」が選択されます。
  • 14. 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
  • 15. 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
  • 17. 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
  • 18. 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": {} }, ... イメージの詳細設定を確認する 裏ワザ(?)のコマンド コンテナ起動時に実行するコマンド ホストからポート転送可能にするポート ホストのディレクトリをコンテナから共有可能 にする「コンテナ側」のマウントポイント
  • 19. 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 ...
  • 20. 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"
  • 21. 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のグループ名
  • 23. Open Cloud Campus 23 Dockerクイックツアー アプリケーション導入済みイメージを自分で作成  最初のCentOS6のイメージでやったように、手動でコンテナ内にアプリケーションをイン ストールしてイメージを保存することもできます。  ただし、一般には、「Dockerfile」を利用する方が便利です。 – インストール作業が自動化されるので、イメージの修正・再作成の手間がかかりません。 – コンテナ起動時に実行するコマンド、外部に公開するポート番号、ホストのディレクトリをコンテ ナ内にマウント可能にする、などの追加設定も行えます。
  • 24. 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で公開するコンテンツディレクトリ
  • 25. 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!
  • 26. 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
  • 27. 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
  • 28. Dockerクイックツアー 参考:Dockerが無いとき ( ´ー`)551が~ あるとき~(´ー` ) ( ´ - `)ないとき~(´ - ` ) ( ´ー`)あるとき~(´ー` ) ( ´ - `)ないとき~(´ - ` ) ( ´ー`)あるとき~(´ー` ) ( ´ - `)ないとき~(´ - ` )
  • 29. 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
  • 30. 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
  • 31. 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 シャットオフ
  • 32. 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
  • 33. 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>
  • 34. 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 は強制停止されました
  • 36. Open Cloud Campus 36 Dockerクイックツアー 参考資料  Dockerfile tutorial – https://www.docker.io/learn/dockerfile/