SlideShare a Scribd company logo
1 of 182
Docker入門-基礎編
い ま か ら 始 め る D o c k e r 管 理 v 2 . 0 0
JAWS-UG コンテナ支部 Docker 入門 #2
2015年10月30日(金)
@zembutsu
Technology Evangelist; Creationline, Inc.
Introduction to docker, basic management and operations
背景画像CREDIT:スフィア / PIXTA(ピクスタ)
2
本スライドで得られる知識
Docker入門-基礎編 いまから始めるDocker
‣ Docker概要と環境構築
なぜ Docker なのか? 速さと利便性。そして、Docker はコンテナではなくプラットフォーム。
‣ Dockerの基本操作コマンドの理解
コンテナのイメージ管理、起動、情報取得、ログ参照、Dockerfile、ボリューム操作
‣ Dockerとコンテナを取り巻く状況
DockerCon 2015 前後、Dockerのオーケストレーション Docker Machine, Swarm, Compose
This slide is an introduction of the basic concept and command of Docker. Because the main purpose uses Docker as a
tool. This is a Japanese document for community of the JAWS-UG Container Branch, in Tokyo on Oct 30.
Are you interested in this English version? Please comment me or mention @zembutsu . Thank you.
これからDockerを知る方のため
コンテナ概要から、環境構築、
ツールを使ったコンテナの操作や
管理方法を整理したものです。
2015年秋現在の状況にあわせ、
内容を大幅に改訂しました。
3
重要なポイント
Docker入門-基礎編 いまから始めるDocker
‣ Dockerコンテナはプロセスレベルの隔離技術
Control Groups(cgroups) と Namespaces という Linux カーネル機能
Docker イメージ(ファイルシステム、各種設定等)を使って、Docker コンテナを起動する
‣ Dockerはクライアント・サーバ型
Docker デーモンに対して、クライアントからアクセスする
‣ 複数の環境を管理するオーケストレーション
コンテナを扱う環境を、より簡単にする、Docker Machine、 Docker Swarm、 Docker Compose
今回は特に、そもそもコンテナや
Dockerとは何だっけ?との説明を
追加しています。
4
今日の内容
Docker入門-基礎編 いまから始めるDocker
‣ 1. コンテナとは何か? なぜDockerなのか?
‣ 2. Docker概要と環境構築
‣ 3. 基本操作コマンドの理解
‣ 4. Dockerのオーケストレーション
‣ 5. Amazon ECS (EC2 Container Service)
JAWS-UG コンテナ支部による
Docker入門 #2 の発表資料。
10月30日(金)にドリコムさんの
会場をお借りして開催。
私・個人としては、基本的に、
無理にコンテナを導入したり
コンテナ環境に移行しようとし
ても、導入目的や目標が定まら
なければ・・・・
コンテナの残骸だけしか残され
ないことに…と思っています。
コンテナとは何か?
なぜDockerなのか?
1 ■□□□□□
Introduction – What is Docker?
 Docker登場前後
 Dockerは何を解決するのか
 コンテナを取り巻く業界動向
物理サーバ・ネットワーク環境の全盛時代
開 発 用 端 末
社 内 サ ー バ デ ー タ セ ン タ
かつてプログラムや
データを送るには
物理サーバ・ネットワーク環境の全盛時代
開 発 用 端 末
社 内 サ ー バ デ ー タ セ ン タ
ftp, rsync, scp
FTP等で別々の環境に
転送するのが大前提
環境の構築は大変
環境をデプロイするのも大変
壊れた後の復旧も大変
ですが、そもそも…
突然の死
サーバ障害があれば…
再構築の悪夢
復旧作業が大変でした
仮想化・クラウド時代
開 発 用 端 末
社 内 サ ー バ ク ラ ウ ド 環 境
VirtualBox VirtualBox VirtualBox
Virtual
Machine
Virtual
Machine
Virtual
Machine
Virtual
Machine
Virtual
Machine
新しい技術の登場で
仮想化・クラウド時代
開 発 用 端 末
社 内 サ ー バ ク ラ ウ ド 環 境
VirtualBox VirtualBox VirtualBox
Virtual
Machine
Virtual
Machine
Virtual
Machine
Virtual
Machine
Machine
Image
Virtual
Machine
Machine
Image
開 発 用 C I ス テ ー ジ ン グ 本 番
Virtual
Machine
Virtual
Machine
Virtual
Machine
構成管理ツール
(Chef, Puppet, Ansible, Itamae… etc.)
デプロイ支援ツール
(Capistrano, Vagrant, Packer,
Terraform, AWS CLI … etc.)
異なる環境をつなぐ
技術が拡がりました
インフラ別の環境構築は面倒
環境によってOSが違う
開発・リモートどちらも同じにしたい
そして新しい課題が
開発の各段階から運用に至る流れを
より効率的に!より速く!確実に!
Docker誕生
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
The future of Linux Containers - YouTube
https://www.youtube.com/watch?v=wW9CAH9nSLs
‣ 2013年3月13日
‣ PyCon US 2013
‣ Solomon Hyke 氏
Dockerが世の中に登場してから、まだ
3年も経っていません。初めての公開は
Pythonカンファレンスの、たった5分の
ライトニングトークでした。
The future of Linux Containers - YouTube
https://www.youtube.com/watch?v=wW9CAH9nSLs
‣ dotCloud
‣ どこにでも運ぶ
‣ プロセスの分離
"Software you can deliver from your
laptop to EC2,to BareMetal, giant
server, run the same way. Because
isolated with process level. And it's
has own file system"
発表したのはdotCoud社の創設者。皆は
ソフトをどこでも動かせるのを求めている
コンテナ化
それを実現するのは、コンテナ化という
プロセスを隔離・分離(isolate)する技術
Linux kernel
Control Groups
Namespaces
基盤となっているのは、Linuxカーネルに
搭載されている2つの機能
サーバ
OS のカーネル空間
ユーザ空間
OS …
通常の環境
通常のLinuxは、1つのOSの中に複数の
プロセスがいくつも稼働しています。
サーバ
OS のカーネル空間
Docker
Docker環境
ユーザ空間 ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
Dockerの場合は、Linuxカーネルの名前
空間を使って、プロセス毎にユーザ空間
を分離して、Cgroupsでリソースを設定。
このプロセス環境をコンテナと呼びます。
しかも、それぞれの環境はお互い分離し
ています。それぞれがファイルシステム
やホスト名・ドメイン名、ネットワーク、
UID・GIDを持ち、プロセス毎に独立して
ます。コンテナからホストは見えません。
chrootやfork・execに近いものです。
一方ホスト側からは、あくまでも普通に
プロセスが起動しているように見えます。
(例えるとマジックミラーのようなもの)
OS
サーバ
OS のカーネル空間
ユーザ空間
OS …
通常の環境
サーバ
OS のカーネル空間
Docker
Docker環境
ユーザ空間 ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
コンテナやLinuxカーネルの機能に関しては、
次のスライドがとても参考になります。
• Dockerを支える技術 ( @enakai00 さん )
http://www.slideshare.net/enakai/docker-34668707
• LinuxコンテナとLXC入門 (2015-09-13) ( @ten_forward さん )
https://speakerdeck.com/tenforward/1st-kistudy
The future of Linux Containers - YouTube
https://www.youtube.com/watch?v=wW9CAH9nSLs
‣ docker ps
‣ docker images
‣ docker run
さて、これらLinuxカーネルの技術を使い、
コンテナ環境を操作するのが「docker」
コマンド。デモで使われたのがプロセス
確認、イメージ一覧、"hello world"を
表示する、これら3つのコマンドでした。
なお、dotCloud社は後にDocker社に名
前を変え、事業主体をDockerに絞ります。
プラットフォーム
このようにDockerはコンテナを操作する
ためのツールであり、また、コンテナを
管理するためのプラットフォームの役割を
もっているものです。
サーバ・クライアント型
Docker Hub
オープンソース
コンテナ管理の仕組みだけでなく、共有
するためのGitHub風の環境。そして、
オープンな開発体制がDockerの特長。
サーバ
OS のカーネル空間
Docker
Docker サーバ
ユーザ空間 ユーザ空間
$ docker run -ti ubuntu /bin/bash
https://hub.docker.com/
Docker Hub (レジストリ)
Docker クライアント
DockerHubの役割について説明します。
これは「docker run」コマンドでコンテナ
を実行する時の流れです。「ubuntu」イ
メージを使い、「/bin/bash」プロセスを
実行しようとしています。
サーバ
OS のカーネル空間
Docker
Docker サーバ
ユーザ空間 ユーザ空間
$ docker run -ti ubuntu /bin/bash
https://hub.docker.com/
Docker Hub (レジストリ)
Docker クライアント
ubuntu:latest
?
しかし、ローカル環境に「ubuntu」の
Dockerイメージ(ファイルシステムや
各種設定が1ファイルになったもの)が
ローカルにありません。その場合自動で
Docker Hubからイメージを取得します。
サーバ
OS のカーネル空間
Docker
Docker サーバ
ユーザ空間 ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
$ docker run -ti ubuntu /bin/bash
https://hub.docker.com/
Docker Hub (レジストリ)
Docker クライアント
ubuntu:latest
ubuntu:latest
イメージを取得したあと、「/bin/bash」
のプロセスをLinuxカーネル技術を使い
起動します。これこそがコンテナ化した
プロセスを起動した状態です。
zem@dev:~$ docker run -ti ubuntu /bin/bash
root@bdf6207621c7:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 01:11 ? 00:00:00 /bin/bash
root 16 1 0 01:11 ? 00:00:00 ps -ef
root@bdf6207621c7:/#
zem@dev:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 27987 1 0 Oct07 ? 00:13:58 /usr/bin/docker
root 22881 27987 0 21:11 pts/5 00:00:00 /bin/bash
PID TTY STAT TIME COMMAND
27987 ? Ssl 13:58 /usr/bin/docker daemon -H tcp://...
22881 pts/5 Ss+ 0:00 ¥_ /bin/bash
コ ン テ ナ 内 の P I D
コ ン テ ナ の プ ロ セ ス
そのため、コンテナ化された環境内では
bashのプロセスIDは「1」です。
しかしホスト側では、dockerのプロセス
ツリー下にあり、別のPIDを持っています。
開 発 用 端 末
社 内 サ ー バ ク ラ ウ ド 環 境
VirtualBox VirtualBox VirtualBox
Virtual
Machine
Virtual
Machine
Virtual
Machine
Virtual
Machine
Machine
Image
Virtual
Machine
Machine
Image
開 発 用 C I ス テ ー ジ ン グ 本 番
Virtual
Machine
Virtual
Machine
Virtual
Machine
構成管理ツール
(Chef, Puppet, Ansible, Itamae… etc.)
デプロイ支援ツール
(Capistrano, Vagrant, Packer,
Terraform, AWS CLI … etc.)
この技術があれば、先ほどの課題に対し
開 発 用 端 末
社 内 サ ー バ ク ラ ウ ド 環 境
VirtualBox VirtualBox VirtualBox
Virtual
Machine
Virtual
Machine
Virtual
Machine
Virtual
Machine
Machine
Image
Virtual
Machine
Machine
Image
開 発 用 C I ス テ ー ジ ン グ 本 番
Virtual
Machine
Virtual
Machine
Virtual
Machine
構成管理ツール
(Chef, Puppet, Ansible, Itamae… etc.)
デプロイ支援ツール
(Capistrano, Vagrant, Packer,
Terraform, AWS CLI … etc.)
D o k c e r H u b
autobiuld
webhook
Dockerを使うことにより、
開 発 用 端 末
社 内 サ ー バ ク ラ ウ ド 環 境
VirtualBox VirtualBox VirtualBox
Virtual
Machine
Virtual
Machine
Virtual
Machine
Virtual
Machine
Machine
Image
Virtual
Machine
Machine
Image
開 発 用 C I ス テ ー ジ ン グ 本 番
Virtual
Machine
Virtual
Machine
Virtual
Machine
構成管理ツール
(Chef, Puppet, Ansible, Itamae… etc.)
デプロイ支援ツール
(Capistrano, Vagrant, Packer,
Terraform, AWS CLI … etc.)
D o k c e r H u b
autobiuld
webhook
コンテナ化されたプロセス、
そしてDockerHubやDocker
イメージを活用することが、
問題解決につながるのでは?
これがDockerの役割です。
Z氏の場合
Munin 3.0.0b1
l o c a l P C
sudo apt-get update
sudo apt-get install git
git clone git://github.com/munin-monitoring/munin
cd munin
perl Build.PL
sudo apt-get install gcc pkg-config libssl-dev build-essential
sudo apt-get install expat libexpat1 libexpat1-dev libexpat1-dev
sudo apt-get install libxml2-dev libxml-libxml-perl libcairo-gobject-perl libglib2.0-dev libglib-perl
sudo apt-get install libcairo-perl libcairo-gobject-perl libgraphics-primitive-driver-cairo-perl
sudo apt-get install libcairo2-dev libpango1.0-dev
sudo cpan -i XML::Parser XML::Dumper
sudo cpan -i Alien::RRDtool
sudo cpan -i Test::Class Test::MockModule Test::MockObject Test::LongString Test::Differences
sudo cpan -i File::Slurp
sudo ./Build installdeps
./Build test
sudo ./Build installe
cd /usr/local/etc/munin/
sudo mkdir /usr/local/etc/munin/plugins
sudo cp munin.conf.sample munin.conf
sudo cp munin-node.conf.sample munin-node.conf
sudo munin-node-configure --shell --families=contrib,auto | sh -x
リ モ ー ト の サ ー バ
もう少し具体的な例をみていきます。
Muninは多くの依存関係がありますが
最新ベータはバイナリがありません。
なので、リモート環境上で使うには、
手動で環境の再構築が必要です。
Z氏の場合
Munin 3.0.0b1
l o c a l P C
sudo apt-get update
sudo apt-get install git
git clone git://github.com/munin-monitoring/munin
cd munin
perl Build.PL
sudo apt-get install gcc pkg-config libssl-dev build-essential
sudo apt-get install expat libexpat1 libexpat1-dev libexpat1-dev
sudo apt-get install libxml2-dev libxml-libxml-perl libcairo-gobject-perl libglib2.0-dev libglib-perl
sudo apt-get install libcairo-perl libcairo-gobject-perl libgraphics-primitive-driver-cairo-perl
sudo apt-get install libcairo2-dev libpango1.0-dev
sudo cpan -i XML::Parser XML::Dumper
sudo cpan -i Alien::RRDtool
sudo cpan -i Test::Class Test::MockModule Test::MockObject Test::LongString Test::Differences
sudo cpan -i File::Slurp
sudo ./Build installdeps
./Build test
sudo ./Build installe
cd /usr/local/etc/munin/
sudo mkdir /usr/local/etc/munin/plugins
sudo cp munin.conf.sample munin.conf
sudo cp munin-node.conf.sample munin-node.conf
sudo munin-node-configure --shell --families=contrib,auto | sh -x
zembutsu/muinin3
Dockerfile
docker commit
docker bulid
でも、もしそこにDockerを使っていれば、
Muninの環境をDockerイメージ化してお
くことができます。これを使い、
Z氏の場合
Munin 3.0.0b1
l o c a l P C
sudo apt-get update
sudo apt-get install git
git clone git://github.com/munin-monitoring/munin
cd munin
perl Build.PL
sudo apt-get install gcc pkg-config libssl-dev build-essential
sudo apt-get install expat libexpat1 libexpat1-dev libexpat1-dev
sudo apt-get install libxml2-dev libxml-libxml-perl libcairo-gobject-perl libglib2.0-dev libglib-perl
sudo apt-get install libcairo-perl libcairo-gobject-perl libgraphics-primitive-driver-cairo-perl
sudo apt-get install libcairo2-dev libpango1.0-dev
sudo cpan -i XML::Parser XML::Dumper
sudo cpan -i Alien::RRDtool
sudo cpan -i Test::Class Test::MockModule Test::MockObject Test::LongString Test::Differences
sudo cpan -i File::Slurp
sudo ./Build installdeps
./Build test
sudo ./Build installe
cd /usr/local/etc/munin/
sudo mkdir /usr/local/etc/munin/plugins
sudo cp munin.conf.sample munin.conf
sudo cp munin-node.conf.sample munin-node.conf
sudo munin-node-configure --shell --families=contrib,auto | sh -x
zembutsu/muinin3
Dockerfile
D o c k e r H u b
docker push
zembutsu/muinin3
docker commit
docker bulid
DockerHubにDockerイメージを
アップロードしておけば、
Z氏の場合
Munin 3.0.0b1
l o c a l P C
sudo apt-get update
sudo apt-get install git
git clone git://github.com/munin-monitoring/munin
cd munin
perl Build.PL
sudo apt-get install gcc pkg-config libssl-dev build-essential
sudo apt-get install expat libexpat1 libexpat1-dev libexpat1-dev
sudo apt-get install libxml2-dev libxml-libxml-perl libcairo-gobject-perl libglib2.0-dev libglib-perl
sudo apt-get install libcairo-perl libcairo-gobject-perl libgraphics-primitive-driver-cairo-perl
sudo apt-get install libcairo2-dev libpango1.0-dev
sudo cpan -i XML::Parser XML::Dumper
sudo cpan -i Alien::RRDtool
sudo cpan -i Test::Class Test::MockModule Test::MockObject Test::LongString Test::Differences
sudo cpan -i File::Slurp
sudo ./Build installdeps
./Build test
sudo ./Build installe
cd /usr/local/etc/munin/
sudo mkdir /usr/local/etc/munin/plugins
sudo cp munin.conf.sample munin.conf
sudo cp munin-node.conf.sample munin-node.conf
sudo munin-node-configure --shell --families=contrib,auto | sh -x
リ モ ー ト の サ ー バ
zembutsu/muinin3
Dockerfile
D o c k e r H u b
docker push
zembutsu/muinin3
docker pull
zembutsu/muinin3
docker run
docker commit
docker bulid
環境を再構築する必要なく、
すぐに環境を実行できるように。
l o c a l P C
l o c a l P C
l o c a l P C
G i t H u b D o c k e r H u b
B i t B u c k e t
git add …
git push origin master
autobuild
webhook
共同開発環境に向けて、DockerHubには
GitHubと連携してpushするとDocker
イメージを自動構築する機能があります。
l o c a l P C
l o c a l P C
l o c a l P C
G i t H u b D o c k e r H u b
B i t B u c k e t
git add …
git push origin master
autobuild
webhook
また、webhook
でフックさせるこ
とにより、いわゆ
るCIやCDツール
との連携も可能
になります。
l o c a l P C
l o c a l P C
l o c a l P C
G i t H u b D o c k e r H u b
B i t B u c k e t
git add …
git push origin master
autobuild
webhook
更に、様々なシステムと連携し、デプロイまでも。
その中心にいるのがDockerなのです。
Open Container Initiative Open Container Project (runC)
https://www.opencontainers.org/ http://runc.io/
コンテナ規格の標準化団体 標準ランタイム策定プロジェクト
コンテナをとりまく業界は、2014年当時
は混沌としていましたが、2015年には標
準化団体やプロジェクトが始まりました。
単にDocker社だけの取り組みというより
業界全体を大きく動かし始めています。
なんとなく、こんな雰囲気もありますが
そうではありません。
だが
ちょっと待って欲しい
48
なぜコンテナ化するのか?
‣ 開発から運用に至る流れを
より速く、正確に、効率的に行う手段の1つ
‣ Docker を入れたから、コンテナを使うから
速く・正確・効率的になる訳ではない
‣ 理想的な開発・運用にDockerが適している(かも)
例えば、私はVOCALOID大好きですが、
VOCALOIDのソフトを購入しただけで
だれもが自由に歌い手になれるわけでは
決してありません。それと同じです。
引用 https://www.docker.com/what-docker
そもそも仮想化・クラウドとは技術が異な
るので、単純にインフラとしての比較は
意味が無いのではないでしょうか。
50Introduction to Docker Basic Course
ここまでのまとめ
‣ Docker は Linux カーネルの機能で
プロセスレベルの「隔離」を行う=コンテナ化
Control Groups ( cgroups )
Namespaces
‣ Dockerは Linux コンテナを扱うプラットフォーム
‣ オープンソースで配布、オープンな開発体制
Docker概要と
環境構築
2 ■■□□□□
How to use Docker?
 Dockerアーキテクチャ
 Dockerイメージとコンテナ
 環境構築方法
サーバ
OS のカーネル空間
Docker サーバ
ユーザ空間 ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
https://hub.docker.com/
Docker Hub
(レジストリ)
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
Ubuntu
レポジトリ
MySQL
レポジトリ
tag:latest
tag:14.04
…
tag:latest
tag:5.7
…docker run …
Dockerが「コンテナ」と
「イメージ」扱う流れを
詳しく見ていきます。
サーバ
OS のカーネル空間
Docker サーバ
ユ
ー
ザ
プ
ロ
セ
ス
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
https://hub.docker.com/
Docker Hub
(レジストリ)
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
Ubuntu
レポジトリ
MySQL
レポジトリ
tag:latest
tag:14.04
…
tag:latest
tag:5.7
…docker run …
Docker
コンテナ
そもそも「Dockerコンテナ」とは?
サーバ
OS のカーネル空間
Docker サーバ
ユーザ空間 ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
https://hub.docker.com/
Docker Hub
(レジストリ)
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
Ubuntu
レポジトリ
MySQL
レポジトリ
tag:latest
tag:14.04
…
tag:latest
tag:5.7
…docker run …
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
DockerはLinuxカーネルの機能を使って
プロセスを隔離。この環境がコンテナ。
zem@dev:~$ docker run -ti ubuntu /bin/bash
root@bdf6207621c7:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 01:11 ? 00:00:00 /bin/bash
root 16 1 0 01:11 ? 00:00:00 ps -ef
root@bdf6207621c7:/#
コ ン テ ナ 内 の プ ロ セ ス
コンテナの中のプロセスは、自分自身が
PIDが1として存在して見えます。
root@bdf6207621c7:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@bdf6207621c7:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 20511356 12952564 6493836 67% /
none 20511356 12952564 6493836 67% /
tmpfs 250896 0 250896 0% /dev
shm 65536 0 65536 0% /dev/shm
tmpfs 250896 0 250896 0% /sys/fs/cgroup
/dev/disk/by-label/DOROOT 20511356 12952564 6493836 67% /etc/hosts
tmpfs 250896 0 250896 0% /proc/kcore
tmpfs 250896 0 250896 0% /proc/latency_stats
tmpfs 250896 0 250896 0% /proc/timer_stats
コ ン テ ナ 内 の フ ァ イ ル シ ス テ ム それだけでなく、コンテナ内だけで独自
のファイルシステムを持ちます。
root@bdf6207621c7:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
361: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
group default
link/ether 02:42:ac:11:00:25 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.37/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:25/64 scope link
valid_lft forever preferred_lft forever
root@bdf6207621c7:/# ip route
default via 172.17.42.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.37
コ ン テ ナ 内 の ネ ッ ト ワ ー ク
さらに、独自でネットワークを持ちます。
これはホスト側(eth0等)とは異なったイ
ンターフェースを持ちます。正確には
dokcer0というブリッジを通しています。
またルーティングにはiptablesも自動的
に使用しています。
root@bdf6207621c7:/# free
total used free shared buffers cached
Mem: 501792 485128 16664 460 127028 164560
-/+ buffers/cache: 193540 308252
Swap: 0 0 0
コ ン テ ナ 内 の メ モ リ
メモリのリソースは、ホスト側と共有なの
で(コンテナ内で上限は設定できます
が)、このようにホスト側のメモリ量が
そのまま表示されます。
root@bdf6207621c7:/# exit
zem@dev:~$ docker stop bdf6207621c7
コ ン テ ナ の 終 了
なお、コンテナは「プロセス」なので、
bashであれば"exit"で終了したらプロセ
ス終了=コンテナ終了です。
あるいはdocker stopやkillコマンドでも
停止可能です。
サーバ
OS のカーネル空間
Docker サーバ
ユ
ー
ザ
プ
ロ
セ
ス
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
コンテナ
https://hub.docker.com/
Docker Hub
(レジストリ)
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
Ubuntu
レポジトリ
MySQL
レポジトリ
tag:latest
tag:14.04
…
tag:latest
tag:5.7
…docker run …
Docker
イメージ
もう1つ重要な「Dockerイメージ」とは。
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
Dockerイメージの実体は、単なる
バイナリ(Tar)です。中にはいくつ
もの「イメージ層」を持っています。
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
一番下に「ベース・イメージ」という
Docker社が配布している各ディス
トリビューションのイメージがありま
す。ここは自分で独自に作ることも
できます。
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
その上に、コマンドを実行する毎に
イメージ層が積み重なります。
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
これらの集合体がDockerイメージ
です。この仕組みがあるので共通
部分をキャッシュとして使い高速に
イメージを構築したり、イメージ間
で共用するので容量を節約すると
いった利点があります。
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
これらの集合体がDockerイメージ
です。この仕組みがあるので共通
部分をキャッシュとして使い高速に
イメージを構築したり、イメージ間
で共用するので容量を節約すると
いった利点があります。
Nginx イメージの構造
具体的なDockerイメージの例を見
てみましょう。各イメージは、それ
ぞれ「イメージID」をもって持って
います。先ほど見たように、実体
は複数のイメージの積み重ねです。
もちろん、それぞれのイメージ層
ごとにイメージIDが存在します。
Nginx イメージの構造
902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB
一番下にあるのは、このファイルを
追加するというコマンドを実行した
イメージID 902b87aaaec9 という
ものです。
Nginx イメージの構造
902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB
9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
その上に…
Nginx イメージの構造
902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB
9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B
いくつもの
Nginx イメージの構造
902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB
9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B
5dd2638d10a1 3 months ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 1.997 kB
イメージ層が
Nginx イメージの構造
902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB
9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B
5dd2638d10a1 3 months ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 1.997 kB
97df1ddba09e 3 months ago /bin/sh -c echo "deb http://nginx.org/package 221 B
e7e7a55e9264 10 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.9.4-1~j 0 B
72b67c8ad0ca 10 weeks ago /bin/sh -c apt-get update && apt-get inst 7.695 MB
9108e25be489 10 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 11 B
6dda3f3a8c05 10 weeks ago /bin/sh -c ln -sf /dev/stderr /var/log/nginx/ 11 B
42d2189f6cbe 10 weeks ago /bin/sh -c #(nop) VOLUME [/var/cache/nginx] 0 B
3cb7f49c6bc4 10 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B
a486da044a3f 10 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon o 0 B
$ docker history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
積み重なっています。上の方には
Nginxのデーモンとしてのオプション
や公開ポート等の情報もあります。
Nginx イメージの構造
902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB
9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B
5dd2638d10a1 3 months ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 1.997 kB
97df1ddba09e 3 months ago /bin/sh -c echo "deb http://nginx.org/package 221 B
e7e7a55e9264 10 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.9.4-1~j 0 B
72b67c8ad0ca 10 weeks ago /bin/sh -c apt-get update && apt-get inst 7.695 MB
9108e25be489 10 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 11 B
6dda3f3a8c05 10 weeks ago /bin/sh -c ln -sf /dev/stderr /var/log/nginx/ 11 B
42d2189f6cbe 10 weeks ago /bin/sh -c #(nop) VOLUME [/var/cache/nginx] 0 B
3cb7f49c6bc4 10 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B
a486da044a3f 10 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon o 0 B
$ docker history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
docker history <image id/name>
これがNginxイメージの実体です。どのイメー
ジも、「docker history」コマンドでイメージ
作成の経緯を辿ることが可能です。
ベース・イメージ
(公式)
イメージ層
Docker コンテナを起動するとは
読み込み専用
(Read Only)
docker run <opts> <image:tag>
もう1つ、このイメージを
使いコンテナを起動する時
何が起こっているのか?
ベース・イメージ
(公式)
イメージ層
Docker コンテナを起動するとは
読み込み専用
(Read Only)
・新しいイメージ・レイヤの
自動的な割り当て
・隔離されたプロセスの起動
(コンテナ化の状態)
docker run <opts> <image:tag>
イメージを使ってコンテナを
実行すると、新しくイメージ
が割り当てられています。
だから、実行するたびに
環境が作り直されているよう
に見えますが、実際には
都度イメージが作り直されて
いるのです。
サーバ
OS のカーネル空間
Docker サーバ
ユ
ー
ザ
プ
ロ
セ
ス
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
Dockerコンテナ
https://hub.docker.com/
Docker Hub
(レジストリ)
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
Ubuntu
レポジトリ
MySQL
レポジトリ
tag:latest
tag:14.04
…
tag:latest
tag:5.7
…docker run …
Dockerイメージ
以上が「コンテナ」と
「イメージ」の関係です。
Docker動作環境の構築
ローカルで構築 リモートで構築 クラウドサービスの利用
Docker Machine
(旧boot2docker)
Docker社による
バイナリ・パッケージ
Amazon EC2
Container Service
(ECS)
IBM Bluemix
Microsoft Azure
Google Container
Engine
VirtualBox
Windows or Mac OSX Virtual or Physical Linux Machine
コミュニティによる
バイナリ・パッケージ
商用サポート版
ソースコードからビルド
+
Docker Toolbox
コンテナを動かすためには様々な
選択肢があります。
81Introduction to Docker Basic Course
‣ 様々なツールのパッケージ
• Docker Client
• Docker Machine
• Docker Compose
• Docker Kitematic
• VirtualBox
‣ 標準セットアップ手法
• かつての boot2docker に置き換わる位置付け
Docker Toolbox PC上の開発環境向けには、Docker
Toolbox(道具箱)というインス
トーラーが提供されています。
82Introduction to Docker Basic Course
‣ オーケストレーション強化の目的
• Docker Machine, Swarm, Compose それぞれ v0.4.0 リリース
• 以前のバージョンに比べ、お互いが連携
• まだベータ版の扱い
Docker Toolbox Dockerはサーバ・クライアント型の
システムですが、Docker単体で足
りない機能を、これらのツール群が
補っています。
Docker
コンテナ実行エンジン
Docker Machine
環境構築
Docker Swarm
クラスタ管理
Docker Compose
複数コンテナの管理と運用
83Introduction to Docker Basic Course
‣ 方法1:インストール用の汎用スクリプトを使用
wget -qO- https://get.docker.com/ | sh
service docker start
※ Ubuntu や Debian などは、こちらで Docker 社が提供する最新安定版をダウンロード可能
※ RHEL/CentOS の場合は、後述の個別パッケージをセットアップ
‣ 方法2:各ディストリビューション向けパッケージ
‣ 方法3:Docker Toolboxを使う
※ Windows と Mac OS X は、VirtualBox 上の仮想サーバを使用
Dockerのセットアップ方法
その時点の最新版が使えます。
ディストリビューションや
バージョンで、パッケージの
名前が異なる場合があります。
84Introduction to Docker Basic Course
‣ Linux
Linux Kernel の機能を使うので、
インストールスクリプトかパッケージをセットアップすることで
すぐに使えます。
‣ Windows・Mac OS
Docker Toolbox (VirtualBox)で Linux 環境を仮想マシン上に作り、
そこに Docker の動く環境をセットアップします。
クライアントは、PC上のコマンドライン(ターミナル)で動作します。
OSごとに違いが?
85Introduction to Docker Basic Course
‣ Windows or Mac OS 環境
Dokcer Toolbox をセットアップする
コマンドラインのクライアントを通して、
VirtualBox 仮想マシン上の docker に接続
‣ セットアップ
インストーラーを使う
• https://www.docker.com/docker-toolbox
– ”Download (Mac)” または "Download (Win)" をクリック
PC 環境で Docker を使うには?
86Introduction to Docker Basic Course
‣ 方法1:Docker版 v1.8(最新版)docker-engine
sudo yum update
yum install docker-engine
‣ 方法2: EPEL版 v1.6 パッケージ doker-io
curl -s https://get.docker.com | sudo sh
※参考 http://docs.docker.com/installation/centos/
RHEL/CentOS 7
$ cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
87Introduction to Docker Basic Course
‣ 動作条件
RHEL/CentOS 6.5 以上かつ、Linux kernel 2.6.32-431 以上
※ Kernel のバグに起因する問題がある可能性のため、CentOS 7 の利用が推奨されています。
‣ 手順 ( EPEL 版 v1.5 )
sudo yum install epel-release
sudo yum install docker-io
sudo service docker start
※参考 http://docs.docker.com/installation/centos/
RHEL/CentOS 6.5
88Introduction to Docker Basic Course
‣ sudo docker version
‣ sudo docker run hello-world
動作確認
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(Assuming it was not already locally available.)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
For more examples and ideas, visit:
http://docs.docker.com/userguide/
「hello-world」コンテナは
テストで使われるものです。
89Introduction to Docker Basic Course
‣ sudo を使わず docker コマンドを使う設定
docker グループに対象ユーザを追加する
– $ sudo usermod –aG docker <ユーザ名>
※注意:docker クライアントは /var/run/docker.sock にアクセスします。docker.sock の所有者は root、
グループが docker のためです。以下の方法は、グループに所属するユーザが事実上の root 権限を持つため
セキュリティには十分配慮ください。
docker グループについて
90Introduction to Docker Basic Course
ここまでのまとめ
‣ Docker コンテナは Docker イメージを使う
• 新しいイメージ・レイヤの自動的な割り当て
• 隔離されたプロセスの起動
‣ Docker イメージは、イメージ層の積み重ね
• ベース・イメージは Docker 社が提供
• コンテナ起動時に、自動的に書き込み可能なイメージを追加
‣ セットアップ方法
• クライアント PC は Docker Toolbox ( Docker Machine )
• Linux サーバはスクリプトで、またはバイナリのセットアップが簡単
基本操作コマンドの
理解
3 ■■■□□□
How to management?
 イメージ操作
 コンテナ起動・停止
 主要なオプション設定
92
Docker基本コマンド
docker run
コンテナ実行
docker stop
コンテナ停止
docker commit
コンテナイメージ化
docker pull
イメージの取得
docker build
イメージの自動構築
docker attach
コンテナにアタッチ
docker logs
標準出力の表示
docker inspect
詳細情報の表示
docker rm
イメージ削除
docker images
イメージ一覧表示
diff | history
差分・履歴表示
コンテナのライフサイクルを通して、
主要なコマンドを覚えていきます。
サーバ
OS のカーネル空間
Docker サーバ
ユーザ空間 ユーザ空間
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
Dockerコンテナ
https://hub.docker.com/
Docker Hub
(レジストリ)
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
Ubuntu
レポジトリ
MySQL
レポジトリ
tag:latest
tag:14.04
…
tag:latest
tag:5.7
…docker run …
Dockerイメージ
まずはじめは、Docker
イメージ管理用の
コマンドからです。
docker pull
docker images
docker search
よく使うのが、この3つのコマンドです。
書式:docker pull <image名:タグ>
$ docker pull ubuntu:latest
$ docker pull zembutsu/serf
$ docker pull localhost:5000/localuser/foo:bar
コ ン テ ナ イ メ ー ジ の 取 得
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
zembutsu/perl_test latest 689c2a8b0b52 25 hours ago 187.9 MB
test1 latest f0b80600cf79 25 hours ago 187.9 MB
ubuntu 14.04 a5a467fddcb8 7 days ago 187.9 MB
rocketchat/rocket.chat latest d2a9f69c1426 2 weeks ago 409.9 MB
mongo latest 5e53867deb23 3 weeks ago 261.3 MB
mynginx latest 197fa3a74539 3 weeks ago 360.6 MB
ロ ー カ ル 上 の イ メ ー ジ 一 覧
書式:docker search <name>
コ ン テ ナ イ メ ー ジ の 検 索
96Introduction to Docker Basic Course
‣ https://hub.docker.com/
Docker Hub
# docker search wordpress
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
wordpress The WordPress rich content management syst... 358 [OK]
tutum/wordpress Wordpress Docker image - listens in port 8... 44 [OK]
tutum/wordpress-stackable Wordpress Docker image - listens in port 8... 23 [OK]
centurylink/wordpress Wordpress image with MySQL removed. 7
.
.
.
ブラウザ上で公式イメージを
含む様々な検索が可能です。
97Introduction to Docker Basic Course
‣ 公式レポジトリは Docker 社の認証・精査済み
‣ 様々なベンダから提供されている
NGINX, WordPress, Ubuntu, Red Hat, Redis, MySQL, Mariadb 等々
‣ 実際は、様々なイメージの合成
ベースイメージ:Linux の各ディストリビューション公式のもの
その上に、プログラミング言語、開発ツール、アプリケーション
公式レポジトリ
OS部分だけでなく、アプリや
ミドルウェア、データベース
など100の公式イメージや、
45,000件のイメージが公開・
配布されています。
98Introduction to Docker Basic Course
‣ 「docker images」の実行で、コンテナ一覧表示
コンテナ実行時には、ローカルにイメージがあるかどうか確認。無ければレポジトリからダウンロード。
‣ イメージは「レポジトリ名:タグ」の形式で管理
タグ省略時は latest (最新)が標準で適用
• Ubuntu 省略時は「ubuntu:latest」
• タグ「14.04」を指定するイメージは「ubuntu:14.04」
• CentOS 省略時は「centos:latest」
• タグ「6」を指定するイメージは「centos:6」
ローカルのイメージの表示
docker images
イメージ一覧表示
99Introduction to Docker Basic Course
‣ 「docker pull」でイメージを取得
docker pull は、ローカルにイメージを保存
docker run 時、ローカルに無ければ自動取得
‣ 例:
CentOS 最新版「docker pull centos」=「centos:7」
CentOS 6 を指定するには「docker pull centos:6」
イメージの取得
docker pull
イメージの取得
docker run
docker ps
docker attach
docker logs
次はコンテナの実行関連。
書式:docker run [オプション] <image名:タグ> [コマンド] [引数]
$ docker run –ti ubuntu /bin/bash
$ docker run –d –P nginx
コ ン テ ナ の 起 動
$ docker ps [オプション]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
bdf6207621c7 ubuntu "/bin/bash" 6 hours ago Up 6 hours
thirsty_almeida
$ docker ps –a ←すべて(all)
$ docker ps –l ←最新(last)
コ ン テ ナ 一 覧 の 表 示
ベース・イメージ
(公式)
イメージ層
Docker コンテナを起動するとは
読み込み専用
(Read Only)
・新しいイメージ・レイヤの
自動的な割り当て
・隔離されたプロセスの起動
(コンテナ化された状態)
docker run <opts> <image:tag>
先ほど見たように、要らない
コンテナ用のイメージ層や
コンテナイメージが残り続け
ます。これを消すには
docker rm
docker rmi
書式:docker rm <コンテナID>
$ docker rm bdf6207621c7
bdf6207621c7
コ ン テ ナ ( が 使 っ た イ メ ー ジ レ イ ヤ ) の 削 除
書式:docker rmi <イメージID>
$ docker rmi f0b80600cf79
f0b80600cf79
D o c k e r イ メ ー ジ の 削 除
rm はコンテナが使ったイメージ層を削除
します。再利用する場合は、事前に
commitしたりpushやexportを使えます。
対してこちらは「Dockerイメージ」の削除
です。"docker images"コマンドで表示さ
れるローカルのイメージ・タグが対象です。
docker commit
docker tag
docker push
ベース・イメージ
(公式)
イメージ層読み込み専用
(Read Only)
docker commit <image:tag>
操作したコンテナの内容を、イメージ
IDとして確定する「docker commit」
コマンド。そのとき、イメージ名称や
タグ(:の右側の文字列)を指定可能。
その他のコマンド
オプション
いろいろ
108Introduction to Docker Basic Course
‣ docker run コマンド
指定したイメージを使ったコンテナを作成
コンテナの実行
‣ 構文
docker run [オプション] [イメージ名] [コマンド] [引数]
• 例:docker run ubuntu:14.04 echo “Hey World!”
• 例:docker run Ubuntu:14.04 ps ax
コンテナの作成と実行
docker run
コンテナ実行
109Introduction to Docker Basic Course
‣ docker ps
– CONTAINER ID … コンテナ ID と呼ばれる、コンテナ毎にユニーク
– IMAGE … コンテナ・イメージの名称
– COMMAND … コンテナ内で PID 1 で実行中のコマンド
– CREATED … 作成時間
– STATUS … ステータス
– PORT … ポートマッピングの状態
– NAMES … コンテナの名前
‣ docker ps –l
– 直近(latest)のコンテナの情報を表示
コンテナの確認
コンテナID確認用に使います。
こちらも非常に使います。
110Introduction to Docker Basic Course
‣ docker ps –a
– 停止しているコンテナを含めて全て(all)表示
‣ docker -ps –q
– ショートID のみで表示
コンテナの確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
d6a33b8c0147 amazon/amazon-ecs-agent:latest "/agent" 38 minutes ago Up 38 minutes
127.0.0.1:51678->51678/tcp ecs-agent
c89b318326c9 centos "ps ax" 4 minutes ago Exited (0) 4 minutes ago
kickass_banach
c0963adcc32e centos "echo 'hello world'" 4 minutes ago Exited (0) 4 minutes ago
distracted_sammet
111Introduction to Docker Basic Course
‣ 2つのオプション
-i 標準入力(standard input)を有効化
-t 疑似ターミナル(pseudo-terminal)
• bash を実行するには、docker run –i –t ubuntu:latest bash
‣ ターミナルの終了
CTRL + P + Q を押す ※ exit はコンテナを終了するので注意
‣ 別プロセスで接続する方法
”docker exec <image> /bin/bash”
コンテナのターミナル
「-it」や「-ti」も使えます。
112Introduction to Docker Basic Course
‣ ロング ID とショート ID
ショート ID は省略されたもの
コンテナ1つ1つにユニーク
‣ docker ps –q
docker ps –l, -aq ,-lq
--filter でフィルタも可能です
コンテナID
$ docker ps -aq
9f0bf0d6ad01
コンテナを操作するとき、ロ
ングID全てを入力する必要は
ありません。ショートIDか、
それより短かな部分一致する
文字列でも構いません。
例:IDが9f0bf0d6ad01…であ
れば、「docker attach 9f」
のように指定できます(部分
一致の適用)。IDの重複がな
ければ「docker attach 9」
のような指定もできますが、
被ることが多いので、2・3
桁なら間違いなさそうです。
113Introduction to Docker Basic Course
‣ 「-d」フラグでデタッチ指定
docker run –d centos:7 ping 127.0.0.1 –c 50
‣ コマンドラインからのアタッチ
docker attach <コンテナID>
再度デタッチするには CTRL+Q+P なので注意!
デタッチ・モードで起動
docker attach
コンテナにアタッチ
「デタッチ」detach とは、
コンテナに接続していない
状態を指定します。一般的に
デーモンとしての起動時に
多く見られます。
デタッチされたコンテナには
アタッチすることができます。
114Introduction to Docker Basic Course
‣ ポート・マッピング
docker run –d –P tomcat:7
docker run –d –P nginx
docker run –d –p 8080:80 nginx
‣ docker exec でコマンド実行
docker exec –i –t [コンテナID] bash
その他のコマンド
対象コンテナでデフォルトの
ポートマッピングが自動的に
適用されます。あるいは、
小文字の「-p」オプションで
指定します。
注意点としては、コンテナの
起動時に指定します。
115Introduction to Docker Basic Course
‣ 標準出力の内容をコンテナ外から確認
docker logs [コンテナID]
docker logs –f [コンテナID]
docker logs –tail 10 [コンテナID]
docker logs –tail -10 –f [コンテナID]
ログの参照
docker logs
標準出力の表示
ログファイルの確認ではなく、
あくまでコンテナ上での状況
確認に使います。
116Introduction to Docker Basic Course
‣ docker stop
SIGTERM シグナルで停止
‣ docker kill
SIGKILL シグナルで停止
‣ docker start –a [コンテナID]
コンテナの停止
docker stop
コンテナ停止
デタッチモード(-d)で動作中
コンテナの停止に使います。
117Introduction to Docker Basic Course
‣ docker inspect
JSON 形式の出力
‣ --format オプションでフィルタ
コンテナの詳細確認
$ docker inspect $CONTAINER
[
{
"Id":
"7bc2a8876520d19c08d2f71641eacaf643910ebac2cfa79870e4a7ef50dc6815",
"Created": "2015-07-06T03:43:46.882917122Z",
"Path": "ping",
"Args": [
"127.0.0.1",
"-c",
"120"
],
"State": {
"Running": false,
"Paused": false,
...
docker inspect
詳細情報の表示
118Introduction to Docker Basic Course
‣ docker ps –aq でコンテナID把握
‣ docker rm <コンテナID> で削除
‣ docker rm $(docker ps –aq)
exit のものだけを一括指定
• docker rm $(docker ps -aq --filter='status=exited')
コンテナの停止と削除
docker rm
イメージ削除
コンテナを停止後もコンテナ
が使用していたイメージは、
ファイルとして残り続けます。
不要な場合「docker rm」で
削除が必要です。
便利な一括削除コマンドも
紹介します。
119Introduction to Docker Basic Course
‣ 既存のイメージに対する変更をコミットする
開発段階で多く用いられると思います。
‣ Dockerfile から作成する
別のマシン環境で環境を再現するときに便利な方法です。
‣ tar 形式のファイルからイメージを読み込む
環境移行時や、バックアップしているイメージの再利用に活用します。
イメージを構築するには
目的により、この3つの方法
を使い分けています。方法は
違いますが、イメージ作成と
いう意味では、共通です。
120Introduction to Docker Basic Course
‣ docker diff
‣ docker history
差分と履歴の確認
$ docker diff <コンテナID>
A /hello.txt
C /root
A /root/.bash_history
$ docker history $IMEGEID
IMAGE CREATED CREATED BY SIZE
COMMENT
1b07ddefe341 2 minutes ago bash 66 B
6d4946999d4f 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
9fd3c8c9af32 3 weeks ago /bin/sh -c sed -i 's/^#¥s*¥(deb.*universe¥)$/ 1.895 kB
435050075b3f 3 weeks ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
428b411c28f0 3 weeks ago /bin/sh -c #(nop) ADD file:b3447f4503091bb6bb 188.1 MB
diff | history
差分・履歴表示
121Introduction to Docker Basic Course
‣ docker commit コマンド
docker commit [オプション] [コンテナID] [レポジトリ名:タグ]
コミットして変更内容を確定
$ docker commit $CONTAINER ecsdocker/myapp:1.0
1b07ddefe341abdae8f497a4dea24b2fef46a2a32621a0998fb0e7e8c2fbf666
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ecsdocker/myapp 1.0 1b07ddefe341 17 seconds ago 188.3 M
docker commit
コンテナイメージ化
122Introduction to Docker Basic Course
‣ ルート(公式レポジトリ)
Ubuntu:14.04
nginx
‣ ユーザやグループ
zembutsu/testapp
‣ ローカルのレジストリ
registry.zem.jp:5000/zem-image
レポジトリ(イメージ)の名前空間
3つの使い方があります。
複数の利用者が居る場合は、
名前で分けるようにした方が
混同しなくてオススメです。
123Introduction to Docker Basic Course
‣ Dockerfile の役割
どのようなイメージにするか指示
• どのベース・イメージを使うのか?
• 何のプログラムをインストールするのか?
• どのようなコマンドを実行するのか
‣ docker build コマンドで構築
docker build –t <レポジトリ:タグ> <Dockerfileのパス>
Dockerfile
docker build
イメージの自動構築
設定を自動的に行うための
命令をファイルに記述します。
内容はテキスト形式ファイル
なのでエディタで編集します。
124Introduction to Docker Basic Course
‣ FROM
ベースイメージの指定
• 例:FROM Ubuntu
• 例:FROM nginx
‣ RUN
コマンドの実行
• 例:RUN yum –y install nginx
Dockerfileの基本命令
FORMは必須です。
125Introduction to Docker Basic Course
‣ CMD または ENTRYPOINTで実行コマンド指定
ENTRYPOINT使用時は、
• CMDで指定した項目がオプション適用
• コンテナ実行時にオプションがあれば、CMD指定よりも優先
‣ ADD でファイル/URL/ZIP からコンテナへ追加
‣ MAINTAINER で管理者の情報を追記
様々な命令
126Introduction to Docker Basic Course
Dockerfileの例
FROM ubuntu:14.04
RUN apt-get install -y wget
CMD /usr/bin/wget
FROM nginx
ADD ./contents /usr/share/nginx/html
どれもシンプルです。
「docker build」コマンドで
環境を構築(ビルド)します。
127Introduction to Docker Basic Course
‣ -p オプションで、ポートマッピング
例:-p 8080:80
• ホスト側の port 8080 をコンテナの port 80 へ
‣ -P (大文字) はデフォルト
ポートの指定
$ docker run -d -p 80:80 ecsdocker/web
010a5fbd22acbfab818541e3f07055b5338f9fa010ee9a26899423dd5944938c
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
010a5fbd22ac ecsdocker/web "nginx -g 'daemon of 3 seconds ago Up 2
seconds 0.0.0.0:80->80/tcp, 443/tcp determined_albattani
128Introduction to Docker Basic Course
‣ -v オプションは、領域をホストとコンテナで共有
例:-v /home/web:/usr/share/nginx/html
• ホスト側の「/home/web」をコンテナの「/usr/share/nginx/html」へ
ボリュームの設定
129
Docker基本コマンド
docker run
コンテナ実行
docker stop
コンテナ停止
docker commit
コンテナイメージ化
docker pull
イメージの取得
docker build
イメージの自動構築
docker attach
コンテナにアタッチ
docker logs
標準出力の表示
docker inspect
詳細情報の表示
docker rm
イメージ削除
docker images
イメージ一覧表示
diff | history
差分・履歴表示
Dockerと
オーケストレーション
4 ■■■■□□
Docker Orchestration
 Dockerコンテナの課題
 Machine, Swarm, Compose
開 発 用 端 末
社 内 サ ー バ ク ラ ウ ド 環 境
VirtualBox VirtualBox VirtualBox
Virtual
Machine
Virtual
Machine
Virtual
Machine
Virtual
Machine
Machine
Image
Virtual
Machine
Machine
Image
開 発 用 C I ス テ ー ジ ン グ 本 番
Virtual
Machine
Virtual
Machine
Virtual
Machine
構成管理ツール
(Chef, Puppet, Ansible, Itamae… etc.)
デプロイ支援ツール
(Capistrano, Vagrant, Packer,
Terraform, AWS CLI … etc.)
D o k c e r H u b
autobiuld
webhook
さて、Dockerエンジンは
基本的に1つの環境しか
管理できません。
この環境管理が課題です。
複数環境の管理
これら複数のDocker環境の管理と運用を
自動化(オーケストレーション)するツー
ル群がDocker社によって開発・提供され
ています。
Docker Engine
コンテナ実行用
プラットフォーム
Docker Machine
Docker実行環境の
自動構築
Docker Swarm
クラスタ管理と
スケジューリング
Docker Compose
複数コンテナ管理と
運用ツール
135Introduction to Docker Basic Course
‣ Docker 動作環境の自動作成
仮想サーバの起動と Docker のプロビジョニングを自動的に行う
‣ コマンドラインで使うツール
docker-machine –d <ドライバ> [option] マシン名 …のように、コマンドで操作
‣ Linux, Windows, Mac OS X に対応
‣ VirtualBox だけでなく、多くのクラウドに対応
Amazon Web Services, DigitalOcean, exoscale, Google Compute Engine, SoftLayer, Azure, Hyper-V,
OpenStack, RackSpace, VMwareFusion, VMwarea vCloud Air, VMware vSphere, SSH 可能なリモートホスト
Docker Machine 複数のDocker環境を簡単に使う
ためのツールがMachineです。
136Introduction to Docker Basic Course
Docker Machine の入手と実行
‣ 方法1:バイナリのダウンロード
• https://github.com/docker/machine/releases/
$ curl -L https://github.com/docker/machine/releases/download/v0.4.1/docker-machine_linux-amd64 > ¥
/usr/local/bin/docker-machine
$ sudo chmod +x /usr/local/bin/docker-machine
‣ 方法2:Docker Toolbox
かつてはboot2dockerという、
VirtualBoxと連携するツールが
ありました。
Docker
Toolbox
・Machine
・Compose
・VirtualBox
・Kitematic
複数の環境を一括管理できます。
$ docker-machine create --driver=amazonec2 ¥
--amazonec2-access-key=<アクセス・キー> ¥
--amazonec2-secret-key=<シークレット・キー> ¥
--amazonec2-vpc-id=<VPC ID> ¥
ec2docker
$ docker-machine env ec2docker
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://54.152.12.116:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/ec2docker"
export DOCKER_MACHINE_NAME="ec2docker"
# Run this command to configure your shell:
# eval "$(docker-machine env ec2docker)“
$ docker-machine ssh ec2docker
EC2上であれば、Docker環境を
準備しなくても、「docker-
machine」コマンドを実行する
と、自動的にDockerが入った
インスタンスを起動します。
環境変数を有効化すると、リ
モートのDokcerを操作できます。
SSHでログインもできます。
このように、コンソールにアク
セスしなくても、自動的に環境
が作られています。もちろん削
除もコマンドライン上から可能。
$ docker-machine create --driver= digitalocean ¥
--digitalocean-access-token <token> ¥
ec2docker
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
b2d virtualbox Stopped
default virtualbox Stopped
dev virtualbox Stopped
do03 digitalocean Error tcp://104.131.113.166:2376
rancheros virtualbox Stopped
rancheros2 virtualbox Stopped
sl3 * softlayer
softlayer-docker01 * softlayer
softlayer-docker02 * softlayer
test2 virtualbox Stopped
testhost1 virtualbox Stopped
testhost21 virtualbox Stopped
testhost22 virtualbox Stopped
DigitalOceanの環境でも同様に
環境を構築することができます。
違いは「--driver」の指定です。
環境一覧を「ls」オプションで
見られます。
142Introduction to Docker Basic Course
Docker Machine 主要オプション
• create … 作成
• rm … 削除
• ls … 一覧表示
• ssh … SSH 接続
• scp … ファイル転送
• start … 起動
• stop … 停止
• restart … 再起動
• ip … パブリック IP アドレスの確認
• inspect … 詳細表示
リモートも、ローカルも、
複数の仮想マシン環境を
自由に切り替えられるように
なりました(v0.3.0~)。
scpを使った転送も可能です。
Docker Machine上の名前をつ
かってやりとりできます。
※正確には、データはすべて
docker-machineコマンド実行
環境を経由します(v0.3.0+)。
http://qiita.com/zembutsu/items/9d189da5d2c7708717a3
146Introduction to Docker Basic Course
Docker Swarm
‣ 役割
"Dockerホスト群をクラスタ化し、
どのホストでコンテナを起動するのか
コンテナをスケジュールするためのツール"
クラスタ全体を1つのリソース・プールとして扱う
Docker の API と互換性を持つ
• docker ps や run 等のコマンドを
Swarm 全体に対して適用できる
• どこにコンテナを置く(スケジュール)方針がアフィニティとフィルタ
次にSwarm(スウォーム)です。
複数OS上のDocker環境を1つの
リソースプールとして扱えます。
詳しくは次章で紹介します。
docker engine
(docker daemon)
machine
docker client
$ docker run
コンテナ コンテナ
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
TCP:2375
TCP:2376
DOCKER_OPTS="-H tcp://0.0.0.0:2376
--tlsverify
--tlscacert=/etc/docker/ca.pem
--tlscert=/etc/docker/server-cert.pem
--tlskey=/etc/docker/server-key.pem”
DOCKER_OPTS=“-H tcp://0.0.0.0:2375
–H unix:///var/run/docker.sock”
1台のDocker環境の操作なら
まだしも…
docker engine
(docker daemon)
machine
docker client
$ docker run
コンテナ コンテナ
docker engine
(docker daemon)
machine
コンテナ コンテナ
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
コンテナ コンテナ コンテナ
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
TCP:2375
TCP:2376
DOCKER_OPTS="-H tcp://0.0.0.0:2376
--tlsverify
--tlscacert=/etc/docker/ca.pem
--tlscert=/etc/docker/server-cert.pem
--tlskey=/etc/docker/server-key.pem”
DOCKER_OPTS=“-H tcp://0.0.0.0:2375
–H unix:///var/run/docker.sock”
通常、複数Docker環境の操作は
環境変数の切り替えが都度行う
必要があります。面倒です。
Swarm Manager
machine
docker client
$ docker run
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
コンテナの配置を
スケジューリング
対してSwarmは、まずmanager
(マネージャ)を準備します。
Dockerデーモンに代わり、同じ
インターフェースで操作します。
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド 例;DockerHub
次にDocker Machineを使うか、
あるいは手動でDocker動作環境
を構築します。
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド 例;DockerHub
ディスカバリ・バックエンドに
自分のノード情報の登録(join)
します。正確にはSwarmという
エージェントを起動します。
join join join join
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド 例;DockerHub
登録された情報は、マネージャ
に送信され、マネージャが各
ノードを管理できるようになり、
Swarmはバックエンド監視対象
となります。
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
Docker互換 API
リソース・プール
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド
複数のノードが、1つの環境
(リソース・プール)として
見えるようになります。
Swarm Manager
machine
docker client
$ docker run
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
machine
コンテナ
$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://104.131.113.166:2376"
export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
$ docker run –d –P swarm manage ¥
token://<token>
docker engine
(docker daemon)
コンテナ コンテナ コンテナ コンテナ
Docker互換 API
リソース・プール
ストラテジ フィルタ
• spread
• binpack
• random
• constraint
• affinity
• port
• dependency
• health
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド
あとはストラテジとフィルタで
コンテナをスケジュールします。
http://qiita.com/zembutsu/items/a1f0a89581d1d5832e2e
Docker Swarm入門
http://www.slideshare.net/zembutsu/introduction-to-docker-swarm
157Introduction to Docker Basic Course
‣ 複数コンテナのアプリケーション自動設定
Dockerfile を複数のコンテナに拡張したようなイメージ
‣ コマンドラインで操作
docker-compose docker-compose.yml
‣ Linux, Windows, Mac OS X に対応
‣ 構成情報を YAML 形式のファイルで定義
Docker Compose そしてもう1つ、コードで
Dockerの環境を管理するもの。
docker-compose.yml
web:
build: .
command: php -S 0.0.0.0:8000 -t /wordpress
ports:
- "8000:8000"
links:
- db
volumes:
- .:/wordpress
db:
image: orchardup/mysql
environment:
MYSQL_DATABASE: wordpress
Dockerfile
FROM orchardup/php5
ADD . /wordpress
Dockerfileは単一のコンテナを
定義するのに対し、Composeは
複数のコンテナを定義します。
他にも、docker-compose ps で
複数のコンテナの状態を確認し
たり、スケールアップ・スケー
ルダウンしたり、運用時におけ
るコンテナ管理機能も提供して
います。
http://qiita.com/zembutsu/items/c277830c469d7a25ba15
160Introduction to Docker Basic Course
ここまでのまとめ
‣ Docker Machine は環境の自動構築
• ローカル環境 ( VirtualBox 等 )
• リモートのクラウド環境 ( AWS, DigitalOcean 等々 )
‣ Docker Swarm はスケジューラ
• 複数サーバ上に、どのようにコンテナを起動するか一元管理
‣ Docker Compose は複数コンテナの環境管理
• YAML 設定ファイルを使い、起動・停止・管理を担う
Amazon EC2
Container Service
5 ■■■■■□
Amazon ECS
 Amazon ECS
 ECS CLI
さて、運用において避けら
れないのが…
突然の死
Amazon EC2 Container Service (ECS)
• EC2 上にクラスタを構築
• スケジューリング
• タスク定義
• ELB や自動復旧
• AWS によるサポート
• Docker 互換の CLI
製品の詳細 - Amazon EC2 Container Service (高いスケーラビリティとパフォーマンスを備えたコンテナ管理サービス)
| アマゾン ウェブ サービス(AWS 日本語)
https://aws.amazon.com/jp/ecs/details/
E
E
Amazon ECS CLI の場合
Docker Machine / Compose の場合
$ ecs-cli compose up
$ docker-compose up
YAML
YAML
$ ecs-cli up
EC2 instance EC2 instance
ap-northeast-1b ap-northeast-1c
EC2 instance EC2 instance
コンテナ コンテナ コンテナ
$ docker-machine up
VM VM
amazon-ecs-agent amazon-ecs-agent
Docker Daemon Docker Daemon
Docker Daemon Docker Daemon
Docker Daemon Docker Daemon
VM
Docker Daemon
VM
Docker Daemon
$ docker-compose up
YAML
Amazon
ECS
コンテナ コンテナ
$ docker-machine up
ECS CLIを使うと、先ほどの
Docker Machineのように、自動
的にEC2インスタンスを起動し
ます。
$ sudo curl -o /usr/local/bin/ecs-cli ¥
https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest
$ ecs-cli configure ¥
--region ap-northeast-1 ¥
--access-key $AWS_ACCESS_KEY_ID ¥
--secret-key $AWS_SECRET_ACCESS_KEY ¥
--cluster ecs-cli-demo
$ ecs-cli up --keypair <キーペア名> --capability-iam --size 2 ¥
--instance-type t2.medium
セットアップも、このバイナリ
1個をダウンロードし、初回設
定用のコマンドを実行するだけ
です。
あとは自動的にEC2インスタン
スの起動だけでなく、クラスタ
設定も自動的に行われます。
さらに、このクラスタ上でコン
テナを実行することが可能に。
Rocket.Chat たとえば、Slack風のオープン
ソースのチャットツールがあり
ます。対応したDockerイメージ
がDocker Hubを通して配布され
ています。
rocketchat:
image: "rocketchat/rocket.chat"
cpu_shares: 100
mem_limit: 262144000
ports:
- "80:80"
links:
- mongodb
environment:
- ROOT_URL=http://localhost:80
- MONGO_URL=mongodb://mongodb/rocketchat
mongodb:
image: mongo
cpu_shares: 100
mem_limit: 262144000
ports:
- 27017
これが Docker Compose または
ECS CLI で利用可能なYAML形式
のファイルです。これを使い
「rocketchat」と「mongodb」
という2つのコンテナを管理で
きます。
$ ecs-cli compose -f rocket-chat.yml up
INFO[0000] Using ECS task definition TaskDefinition=ecscompose-ecs:3
INFO[0000] Starting container... container=7d3c638c-add9-462c-84d2-8a74f3401a12/rocketchat
INFO[0000] Starting container... container=7d3c638c-add9-462c-84d2-8a74f3401a12/mongodb
.
.
$ ecs-cli ps
Name State Ports TaskDefinition
7d3c638c-add9-462c-84d2-8a74f3401a12/mongodb RUNNING 54.64.171.210:32768->27017/tcp ecscompose-ecs:3
7d3c638c-add9-462c-84d2-8a74f3401a12/rocketchat RUNNING 54.64.171.210:80->80/tcp ecscompose-ecs:3
コマンド「ecs-cli」にファイ
ル名と「up」を指定すると、自
動的にコンテナの起動とIPアド
レスが割り当てられます。
Amazon ECS CLI を使い Rocket.Chat 環境を compose するには | Pocketstudio.jp log3
http://pocketstudio.jp/log3/2015/10/14/amazon-ecs-cli-compose-rocket-chat/
もし興味がありましたら、私の
記事ですが、参考にどうぞ。
このように ECS CLI を使えば、
EC2 環境を意識せずに環境を簡
単に構築・運用できます。
まとめ
6 ■■■■■■
Wrap up
 復習
 質疑応答
 Docker 都市伝説
174
今日の内容
Docker入門-基礎編 いまから始めるDocker
‣ 1. コンテナとは何か? なぜDockerなのか?
‣ 2. Docker概要と環境構築
‣ 3. 基本操作コマンドの理解
‣ 4. Dockerのオーケストレーション
‣ 5. Amazon ECS (EC2 Container Service)
175
重要ポイント
Docker入門-基礎編 いまから始めるDocker
‣ Dockerコンテナはプロセスレベルの隔離技術
Control Groups(cgroups) と Namespaces という Linux カーネル機能
Docker イメージ(ファイルシステム、各種設定等)を使って、Docker コンテナを起動する
‣ Dockerはクライアント・サーバ型
Docker デーモンに対して、クライアントからアクセスする
‣ 複数の環境を管理するオーケストレーション
コンテナを扱う環境を、より簡単にする、Docker Machine、 Docker Swarm、 Docker Compose
176
何か気になることはありますか?
177
‣ Docker ドキュメント
http://docs.docker.com/
‣ Docker Machine
https://docs.docker.com/machine/
‣ docker-machine - Docker Machine ドキュメント参考日本語訳 - Qiita
http://qiita.com/zembutsu/items/9d189da5d2c7708717a3
‣ Docker Swarm
https://docs.docker.com/swarm/
‣ DockerSwarm - Docker Swarm ドキュメント参考日本語訳 目次 - Qiita
http://qiita.com/zembutsu/items/a1f0a89581d1d5832e2e
‣ Docker Compose
https://docs.docker.com/compose/
‣ docker-compose - Docker Compose ドキュメント参考日本語訳 概要・目次 - Qiita
http://qiita.com/zembutsu/items/c277830c469d7a25ba15
参考情報
References
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
背景画像CREDIT:rvika/ PIXTA(ピクスタ)
https://pixta.jp/@prof261092
背景画像CREDIT:rvika/ PIXTA(ピクスタ)
https://pixta.jp/@prof261092
1. 今すぐ始めなくてはいけない
2. すべての環境をコンテナにしなくてはいけない
3. 仮想化システムは不要になる
4. 構成管理ツール(Chef,Puppet,Ansible等)は不要になる
5. クラウド環境は不要になる
6. Dockerやコンテナが全てを解決してくれる
7. Dockerは難しい
8. 本番環境では使えない
9. セキュリティや信頼性に問題がある
10. Dockerは冗長化できない
背景画像CREDIT:rvika/ PIXTA(ピクスタ)
https://pixta.jp/@prof261092
11. ネットワークが貧弱だ
12. よく落ちる
13. 商用サポートを受けられない
14. Docker ではなく CoreOS を使うべきだ
15. データの可用性が貧弱
16. Docker があればコスト削減できる
17. Docker は kubernetes がないと意味が無い
18. Docker やコンテナを使うとベンダーロックインされる
19. Docker であれば業務効率化できる
20. そもそも、Docker を使う意味が無い

More Related Content

What's hot

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
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
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術Etsuji Nakai
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と DockerのキホンNaoki Nagazumi
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Masahito Zembutsu
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
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 発表資料)
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 

Viewers also liked

Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらいNaoki Nagazumi
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門Masahito Zembutsu
 
はじめてのdocker
はじめてのdockerはじめてのdocker
はじめてのdockerat grandpa
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Masahito Zembutsu
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようmookjp
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Kazuyuki Mori
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
DockerクイックツアーEtsuji Nakai
 
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudyJenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudyKazuhito Miura
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座Masahito Zembutsu
 
神奈川Ruby会議の会場係 だけが知る密かな危機の話
神奈川Ruby会議の会場係だけが知る密かな危機の話神奈川Ruby会議の会場係だけが知る密かな危機の話
神奈川Ruby会議の会場係 だけが知る密かな危機の話Naoki Nagazumi
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Etsuji Nakai
 
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解するEtsuji Nakai
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Etsuji Nakai
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paiza
 
さくらの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インフラ時代...さくらインターネット株式会社
 
8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版Kamon Nobuchika
 
Docker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionDocker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionCreationline,inc.
 

Viewers also liked (20)

Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらい
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門
 
はじめてのdocker
はじめてのdockerはじめてのdocker
はじめてのdocker
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要Docker基礎+docker0.9, 0.10概要
Docker基礎+docker0.9, 0.10概要
 
Dockerクイックツアー
DockerクイックツアーDockerクイックツアー
Dockerクイックツアー
 
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudyJenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
神奈川Ruby会議の会場係 だけが知る密かな危機の話
神奈川Ruby会議の会場係だけが知る密かな危機の話神奈川Ruby会議の会場係だけが知る密かな危機の話
神奈川Ruby会議の会場係 だけが知る密かな危機の話
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
 
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
"Docker is NOT Container." ~ Dockerとコンテナ技術、PaaSの関係を理解する
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支える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インフラ時代...
 
8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版8a1#19[はじめてのdocker] 公開版
8a1#19[はじめてのdocker] 公開版
 
Docker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise EditionDocker Community Edition & Enterprise Edition
Docker Community Edition & Enterprise Edition
 

Similar to Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSnpsg
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker雄哉 吉田
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料teruyaono1
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門hiro nemu
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?Masahito Zembutsu
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門Tsukasa Kato
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修Suguru Yazawa
 
コンテナの基本 ~Docker実践~
コンテナの基本 ~Docker実践~コンテナの基本 ~Docker実践~
コンテナの基本 ~Docker実践~Ryosuke Uchiyama
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいzaru sakuraba
 

Similar to Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】 (20)

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
捕鯨!詳解docker
捕鯨!詳解docker捕鯨!詳解docker
捕鯨!詳解docker
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Docker Machineを始めるには?
Docker Machineを始めるには?Docker Machineを始めるには?
Docker Machineを始めるには?
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Newcomer2020 Docker研修
Newcomer2020 Docker研修Newcomer2020 Docker研修
Newcomer2020 Docker研修
 
コンテナの基本 ~Docker実践~
コンテナの基本 ~Docker実践~コンテナの基本 ~Docker実践~
コンテナの基本 ~Docker実践~
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 

More from Masahito Zembutsu

CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討Masahito Zembutsu
 
さくらインターネットのコミュニティ with COVID-19
さくらインターネットのコミュニティ with COVID-19さくらインターネットのコミュニティ with COVID-19
さくらインターネットのコミュニティ with COVID-19Masahito Zembutsu
 
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」Masahito Zembutsu
 
インターネットでウェブサイトを表示している裏側の話
インターネットでウェブサイトを表示している裏側の話インターネットでウェブサイトを表示している裏側の話
インターネットでウェブサイトを表示している裏側の話Masahito Zembutsu
 
3分で分かる「プログラミング教育・情報教育」
3分で分かる「プログラミング教育・情報教育」3分で分かる「プログラミング教育・情報教育」
3分で分かる「プログラミング教育・情報教育」Masahito Zembutsu
 
ようこそオンラインの展示会場へ
ようこそオンラインの展示会場へようこそオンラインの展示会場へ
ようこそオンラインの展示会場へMasahito Zembutsu
 
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020Masahito Zembutsu
 
オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編Masahito Zembutsu
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Masahito Zembutsu
 
クリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしようクリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしようMasahito Zembutsu
 
2020年から始まる小学校プログラミング教育の話 #osc19os
2020年から始まる小学校プログラミング教育の話 #osc19os2020年から始まる小学校プログラミング教育の話 #osc19os
2020年から始まる小学校プログラミング教育の話 #osc19osMasahito Zembutsu
 
CNCF Updates 2019 Winter version and Knative
CNCF Updates 2019  Winter version and KnativeCNCF Updates 2019  Winter version and Knative
CNCF Updates 2019 Winter version and KnativeMasahito Zembutsu
 
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)Masahito Zembutsu
 
CNCFアップデート情報~2018年のCNCFを振り返る
CNCFアップデート情報~2018年のCNCFを振り返るCNCFアップデート情報~2018年のCNCFを振り返る
CNCFアップデート情報~2018年のCNCFを振り返るMasahito Zembutsu
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Masahito Zembutsu
 
コンテナ導入概要資料2018
コンテナ導入概要資料2018コンテナ導入概要資料2018
コンテナ導入概要資料2018Masahito Zembutsu
 
DockerConの歩き方~海外カンファレンスに参加するには~
DockerConの歩き方~海外カンファレンスに参加するには~DockerConの歩き方~海外カンファレンスに参加するには~
DockerConの歩き方~海外カンファレンスに参加するには~Masahito Zembutsu
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーションMasahito Zembutsu
 

More from Masahito Zembutsu (20)

CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
さくらインターネットのコミュニティ with COVID-19
さくらインターネットのコミュニティ with COVID-19さくらインターネットのコミュニティ with COVID-19
さくらインターネットのコミュニティ with COVID-19
 
Docker Chronicle 2021.09
Docker Chronicle  2021.09Docker Chronicle  2021.09
Docker Chronicle 2021.09
 
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
ブックトーク@CROSS ~SF編~ 発表資料「攻殻機動隊」「導きの星」
 
インターネットでウェブサイトを表示している裏側の話
インターネットでウェブサイトを表示している裏側の話インターネットでウェブサイトを表示している裏側の話
インターネットでウェブサイトを表示している裏側の話
 
3分で分かる「プログラミング教育・情報教育」
3分で分かる「プログラミング教育・情報教育」3分で分かる「プログラミング教育・情報教育」
3分で分かる「プログラミング教育・情報教育」
 
ようこそオンラインの展示会場へ
ようこそオンラインの展示会場へようこそオンラインの展示会場へ
ようこそオンラインの展示会場へ
 
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
小学校プログラミング教育に対する企業の取り組みと課題 #KOF2020
 
オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編
 
Jitsi Meetとは?
Jitsi Meetとは?Jitsi Meetとは?
Jitsi Meetとは?
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技
 
クリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしようクリスマスに工場(Factorio)を作るゲームをしよう
クリスマスに工場(Factorio)を作るゲームをしよう
 
2020年から始まる小学校プログラミング教育の話 #osc19os
2020年から始まる小学校プログラミング教育の話 #osc19os2020年から始まる小学校プログラミング教育の話 #osc19os
2020年から始まる小学校プログラミング教育の話 #osc19os
 
CNCF Updates 2019 Winter version and Knative
CNCF Updates 2019  Winter version and KnativeCNCF Updates 2019  Winter version and Knative
CNCF Updates 2019 Winter version and Knative
 
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
[1C5] Docker Comose & Swarm mode Orchestration (Japan Container Days - Day1)
 
CNCFアップデート情報~2018年のCNCFを振り返る
CNCFアップデート情報~2018年のCNCFを振り返るCNCFアップデート情報~2018年のCNCFを振り返る
CNCFアップデート情報~2018年のCNCFを振り返る
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
 
コンテナ導入概要資料2018
コンテナ導入概要資料2018コンテナ導入概要資料2018
コンテナ導入概要資料2018
 
DockerConの歩き方~海外カンファレンスに参加するには~
DockerConの歩き方~海外カンファレンスに参加するには~DockerConの歩き方~海外カンファレンスに参加するには~
DockerConの歩き方~海外カンファレンスに参加するには~
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 

Recently uploaded

AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。iPride Co., Ltd.
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りiPride Co., Ltd.
 
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdfIGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdfIGDA Japan SIG-Audio
 
バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析sugiuralab
 
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」IGDA Japan SIG-Audio
 
これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024Hideki Saito
 
チームで開発するための環境を整える
チームで開発するための環境を整えるチームで開発するための環境を整える
チームで開発するための環境を整えるonozaty
 
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜Naomi Yamasaki
 
The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))yoshidakids7
 
00001_test_automation_portfolio_20240313
00001_test_automation_portfolio_2024031300001_test_automation_portfolio_20240313
00001_test_automation_portfolio_20240313ssuserf8ea02
 
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~honeshabri
 
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版Takayuki Nakayama
 

Recently uploaded (12)

AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作り
 
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdfIGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
 
バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析
 
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
 
これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024
 
チームで開発するための環境を整える
チームで開発するための環境を整えるチームで開発するための環境を整える
チームで開発するための環境を整える
 
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
 
The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))
 
00001_test_automation_portfolio_20240313
00001_test_automation_portfolio_2024031300001_test_automation_portfolio_20240313
00001_test_automation_portfolio_20240313
 
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
 
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
 

Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】

  • 1. Docker入門-基礎編 い ま か ら 始 め る D o c k e r 管 理 v 2 . 0 0 JAWS-UG コンテナ支部 Docker 入門 #2 2015年10月30日(金) @zembutsu Technology Evangelist; Creationline, Inc. Introduction to docker, basic management and operations 背景画像CREDIT:スフィア / PIXTA(ピクスタ)
  • 2. 2 本スライドで得られる知識 Docker入門-基礎編 いまから始めるDocker ‣ Docker概要と環境構築 なぜ Docker なのか? 速さと利便性。そして、Docker はコンテナではなくプラットフォーム。 ‣ Dockerの基本操作コマンドの理解 コンテナのイメージ管理、起動、情報取得、ログ参照、Dockerfile、ボリューム操作 ‣ Dockerとコンテナを取り巻く状況 DockerCon 2015 前後、Dockerのオーケストレーション Docker Machine, Swarm, Compose This slide is an introduction of the basic concept and command of Docker. Because the main purpose uses Docker as a tool. This is a Japanese document for community of the JAWS-UG Container Branch, in Tokyo on Oct 30. Are you interested in this English version? Please comment me or mention @zembutsu . Thank you. これからDockerを知る方のため コンテナ概要から、環境構築、 ツールを使ったコンテナの操作や 管理方法を整理したものです。 2015年秋現在の状況にあわせ、 内容を大幅に改訂しました。
  • 3. 3 重要なポイント Docker入門-基礎編 いまから始めるDocker ‣ Dockerコンテナはプロセスレベルの隔離技術 Control Groups(cgroups) と Namespaces という Linux カーネル機能 Docker イメージ(ファイルシステム、各種設定等)を使って、Docker コンテナを起動する ‣ Dockerはクライアント・サーバ型 Docker デーモンに対して、クライアントからアクセスする ‣ 複数の環境を管理するオーケストレーション コンテナを扱う環境を、より簡単にする、Docker Machine、 Docker Swarm、 Docker Compose 今回は特に、そもそもコンテナや Dockerとは何だっけ?との説明を 追加しています。
  • 4. 4 今日の内容 Docker入門-基礎編 いまから始めるDocker ‣ 1. コンテナとは何か? なぜDockerなのか? ‣ 2. Docker概要と環境構築 ‣ 3. 基本操作コマンドの理解 ‣ 4. Dockerのオーケストレーション ‣ 5. Amazon ECS (EC2 Container Service) JAWS-UG コンテナ支部による Docker入門 #2 の発表資料。 10月30日(金)にドリコムさんの 会場をお借りして開催。
  • 7. コンテナとは何か? なぜDockerなのか? 1 ■□□□□□ Introduction – What is Docker?  Docker登場前後  Dockerは何を解決するのか  コンテナを取り巻く業界動向
  • 8. 物理サーバ・ネットワーク環境の全盛時代 開 発 用 端 末 社 内 サ ー バ デ ー タ セ ン タ かつてプログラムや データを送るには
  • 9. 物理サーバ・ネットワーク環境の全盛時代 開 発 用 端 末 社 内 サ ー バ デ ー タ セ ン タ ftp, rsync, scp FTP等で別々の環境に 転送するのが大前提
  • 13. 仮想化・クラウド時代 開 発 用 端 末 社 内 サ ー バ ク ラ ウ ド 環 境 VirtualBox VirtualBox VirtualBox Virtual Machine Virtual Machine Virtual Machine Virtual Machine Virtual Machine 新しい技術の登場で
  • 14. 仮想化・クラウド時代 開 発 用 端 末 社 内 サ ー バ ク ラ ウ ド 環 境 VirtualBox VirtualBox VirtualBox Virtual Machine Virtual Machine Virtual Machine Virtual Machine Machine Image Virtual Machine Machine Image 開 発 用 C I ス テ ー ジ ン グ 本 番 Virtual Machine Virtual Machine Virtual Machine 構成管理ツール (Chef, Puppet, Ansible, Itamae… etc.) デプロイ支援ツール (Capistrano, Vagrant, Packer, Terraform, AWS CLI … etc.) 異なる環境をつなぐ 技術が拡がりました
  • 19. The future of Linux Containers - YouTube https://www.youtube.com/watch?v=wW9CAH9nSLs ‣ 2013年3月13日 ‣ PyCon US 2013 ‣ Solomon Hyke 氏 Dockerが世の中に登場してから、まだ 3年も経っていません。初めての公開は Pythonカンファレンスの、たった5分の ライトニングトークでした。
  • 20. The future of Linux Containers - YouTube https://www.youtube.com/watch?v=wW9CAH9nSLs ‣ dotCloud ‣ どこにでも運ぶ ‣ プロセスの分離 "Software you can deliver from your laptop to EC2,to BareMetal, giant server, run the same way. Because isolated with process level. And it's has own file system" 発表したのはdotCoud社の創設者。皆は ソフトをどこでも動かせるのを求めている
  • 24. サーバ OS のカーネル空間 Docker Docker環境 ユーザ空間 ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ Dockerの場合は、Linuxカーネルの名前 空間を使って、プロセス毎にユーザ空間 を分離して、Cgroupsでリソースを設定。 このプロセス環境をコンテナと呼びます。 しかも、それぞれの環境はお互い分離し ています。それぞれがファイルシステム やホスト名・ドメイン名、ネットワーク、 UID・GIDを持ち、プロセス毎に独立して ます。コンテナからホストは見えません。 chrootやfork・execに近いものです。 一方ホスト側からは、あくまでも普通に プロセスが起動しているように見えます。 (例えるとマジックミラーのようなもの) OS
  • 25. サーバ OS のカーネル空間 ユーザ空間 OS … 通常の環境 サーバ OS のカーネル空間 Docker Docker環境 ユーザ空間 ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ
  • 26. コンテナやLinuxカーネルの機能に関しては、 次のスライドがとても参考になります。 • Dockerを支える技術 ( @enakai00 さん ) http://www.slideshare.net/enakai/docker-34668707 • LinuxコンテナとLXC入門 (2015-09-13) ( @ten_forward さん ) https://speakerdeck.com/tenforward/1st-kistudy
  • 27. The future of Linux Containers - YouTube https://www.youtube.com/watch?v=wW9CAH9nSLs ‣ docker ps ‣ docker images ‣ docker run さて、これらLinuxカーネルの技術を使い、 コンテナ環境を操作するのが「docker」 コマンド。デモで使われたのがプロセス 確認、イメージ一覧、"hello world"を 表示する、これら3つのコマンドでした。 なお、dotCloud社は後にDocker社に名 前を変え、事業主体をDockerに絞ります。
  • 30. サーバ OS のカーネル空間 Docker Docker サーバ ユーザ空間 ユーザ空間 $ docker run -ti ubuntu /bin/bash https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント DockerHubの役割について説明します。 これは「docker run」コマンドでコンテナ を実行する時の流れです。「ubuntu」イ メージを使い、「/bin/bash」プロセスを 実行しようとしています。
  • 31. サーバ OS のカーネル空間 Docker Docker サーバ ユーザ空間 ユーザ空間 $ docker run -ti ubuntu /bin/bash https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント ubuntu:latest ? しかし、ローカル環境に「ubuntu」の Dockerイメージ(ファイルシステムや 各種設定が1ファイルになったもの)が ローカルにありません。その場合自動で Docker Hubからイメージを取得します。
  • 32. サーバ OS のカーネル空間 Docker Docker サーバ ユーザ空間 ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ $ docker run -ti ubuntu /bin/bash https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント ubuntu:latest ubuntu:latest イメージを取得したあと、「/bin/bash」 のプロセスをLinuxカーネル技術を使い 起動します。これこそがコンテナ化した プロセスを起動した状態です。
  • 33. zem@dev:~$ docker run -ti ubuntu /bin/bash root@bdf6207621c7:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 01:11 ? 00:00:00 /bin/bash root 16 1 0 01:11 ? 00:00:00 ps -ef root@bdf6207621c7:/# zem@dev:~$ ps -ef UID PID PPID C STIME TTY TIME CMD root 27987 1 0 Oct07 ? 00:13:58 /usr/bin/docker root 22881 27987 0 21:11 pts/5 00:00:00 /bin/bash PID TTY STAT TIME COMMAND 27987 ? Ssl 13:58 /usr/bin/docker daemon -H tcp://... 22881 pts/5 Ss+ 0:00 ¥_ /bin/bash コ ン テ ナ 内 の P I D コ ン テ ナ の プ ロ セ ス そのため、コンテナ化された環境内では bashのプロセスIDは「1」です。 しかしホスト側では、dockerのプロセス ツリー下にあり、別のPIDを持っています。
  • 34. 開 発 用 端 末 社 内 サ ー バ ク ラ ウ ド 環 境 VirtualBox VirtualBox VirtualBox Virtual Machine Virtual Machine Virtual Machine Virtual Machine Machine Image Virtual Machine Machine Image 開 発 用 C I ス テ ー ジ ン グ 本 番 Virtual Machine Virtual Machine Virtual Machine 構成管理ツール (Chef, Puppet, Ansible, Itamae… etc.) デプロイ支援ツール (Capistrano, Vagrant, Packer, Terraform, AWS CLI … etc.) この技術があれば、先ほどの課題に対し
  • 35. 開 発 用 端 末 社 内 サ ー バ ク ラ ウ ド 環 境 VirtualBox VirtualBox VirtualBox Virtual Machine Virtual Machine Virtual Machine Virtual Machine Machine Image Virtual Machine Machine Image 開 発 用 C I ス テ ー ジ ン グ 本 番 Virtual Machine Virtual Machine Virtual Machine 構成管理ツール (Chef, Puppet, Ansible, Itamae… etc.) デプロイ支援ツール (Capistrano, Vagrant, Packer, Terraform, AWS CLI … etc.) D o k c e r H u b autobiuld webhook Dockerを使うことにより、
  • 36. 開 発 用 端 末 社 内 サ ー バ ク ラ ウ ド 環 境 VirtualBox VirtualBox VirtualBox Virtual Machine Virtual Machine Virtual Machine Virtual Machine Machine Image Virtual Machine Machine Image 開 発 用 C I ス テ ー ジ ン グ 本 番 Virtual Machine Virtual Machine Virtual Machine 構成管理ツール (Chef, Puppet, Ansible, Itamae… etc.) デプロイ支援ツール (Capistrano, Vagrant, Packer, Terraform, AWS CLI … etc.) D o k c e r H u b autobiuld webhook コンテナ化されたプロセス、 そしてDockerHubやDocker イメージを活用することが、 問題解決につながるのでは? これがDockerの役割です。
  • 37. Z氏の場合 Munin 3.0.0b1 l o c a l P C sudo apt-get update sudo apt-get install git git clone git://github.com/munin-monitoring/munin cd munin perl Build.PL sudo apt-get install gcc pkg-config libssl-dev build-essential sudo apt-get install expat libexpat1 libexpat1-dev libexpat1-dev sudo apt-get install libxml2-dev libxml-libxml-perl libcairo-gobject-perl libglib2.0-dev libglib-perl sudo apt-get install libcairo-perl libcairo-gobject-perl libgraphics-primitive-driver-cairo-perl sudo apt-get install libcairo2-dev libpango1.0-dev sudo cpan -i XML::Parser XML::Dumper sudo cpan -i Alien::RRDtool sudo cpan -i Test::Class Test::MockModule Test::MockObject Test::LongString Test::Differences sudo cpan -i File::Slurp sudo ./Build installdeps ./Build test sudo ./Build installe cd /usr/local/etc/munin/ sudo mkdir /usr/local/etc/munin/plugins sudo cp munin.conf.sample munin.conf sudo cp munin-node.conf.sample munin-node.conf sudo munin-node-configure --shell --families=contrib,auto | sh -x リ モ ー ト の サ ー バ もう少し具体的な例をみていきます。 Muninは多くの依存関係がありますが 最新ベータはバイナリがありません。 なので、リモート環境上で使うには、 手動で環境の再構築が必要です。
  • 38. Z氏の場合 Munin 3.0.0b1 l o c a l P C sudo apt-get update sudo apt-get install git git clone git://github.com/munin-monitoring/munin cd munin perl Build.PL sudo apt-get install gcc pkg-config libssl-dev build-essential sudo apt-get install expat libexpat1 libexpat1-dev libexpat1-dev sudo apt-get install libxml2-dev libxml-libxml-perl libcairo-gobject-perl libglib2.0-dev libglib-perl sudo apt-get install libcairo-perl libcairo-gobject-perl libgraphics-primitive-driver-cairo-perl sudo apt-get install libcairo2-dev libpango1.0-dev sudo cpan -i XML::Parser XML::Dumper sudo cpan -i Alien::RRDtool sudo cpan -i Test::Class Test::MockModule Test::MockObject Test::LongString Test::Differences sudo cpan -i File::Slurp sudo ./Build installdeps ./Build test sudo ./Build installe cd /usr/local/etc/munin/ sudo mkdir /usr/local/etc/munin/plugins sudo cp munin.conf.sample munin.conf sudo cp munin-node.conf.sample munin-node.conf sudo munin-node-configure --shell --families=contrib,auto | sh -x zembutsu/muinin3 Dockerfile docker commit docker bulid でも、もしそこにDockerを使っていれば、 Muninの環境をDockerイメージ化してお くことができます。これを使い、
  • 39. Z氏の場合 Munin 3.0.0b1 l o c a l P C sudo apt-get update sudo apt-get install git git clone git://github.com/munin-monitoring/munin cd munin perl Build.PL sudo apt-get install gcc pkg-config libssl-dev build-essential sudo apt-get install expat libexpat1 libexpat1-dev libexpat1-dev sudo apt-get install libxml2-dev libxml-libxml-perl libcairo-gobject-perl libglib2.0-dev libglib-perl sudo apt-get install libcairo-perl libcairo-gobject-perl libgraphics-primitive-driver-cairo-perl sudo apt-get install libcairo2-dev libpango1.0-dev sudo cpan -i XML::Parser XML::Dumper sudo cpan -i Alien::RRDtool sudo cpan -i Test::Class Test::MockModule Test::MockObject Test::LongString Test::Differences sudo cpan -i File::Slurp sudo ./Build installdeps ./Build test sudo ./Build installe cd /usr/local/etc/munin/ sudo mkdir /usr/local/etc/munin/plugins sudo cp munin.conf.sample munin.conf sudo cp munin-node.conf.sample munin-node.conf sudo munin-node-configure --shell --families=contrib,auto | sh -x zembutsu/muinin3 Dockerfile D o c k e r H u b docker push zembutsu/muinin3 docker commit docker bulid DockerHubにDockerイメージを アップロードしておけば、
  • 40. Z氏の場合 Munin 3.0.0b1 l o c a l P C sudo apt-get update sudo apt-get install git git clone git://github.com/munin-monitoring/munin cd munin perl Build.PL sudo apt-get install gcc pkg-config libssl-dev build-essential sudo apt-get install expat libexpat1 libexpat1-dev libexpat1-dev sudo apt-get install libxml2-dev libxml-libxml-perl libcairo-gobject-perl libglib2.0-dev libglib-perl sudo apt-get install libcairo-perl libcairo-gobject-perl libgraphics-primitive-driver-cairo-perl sudo apt-get install libcairo2-dev libpango1.0-dev sudo cpan -i XML::Parser XML::Dumper sudo cpan -i Alien::RRDtool sudo cpan -i Test::Class Test::MockModule Test::MockObject Test::LongString Test::Differences sudo cpan -i File::Slurp sudo ./Build installdeps ./Build test sudo ./Build installe cd /usr/local/etc/munin/ sudo mkdir /usr/local/etc/munin/plugins sudo cp munin.conf.sample munin.conf sudo cp munin-node.conf.sample munin-node.conf sudo munin-node-configure --shell --families=contrib,auto | sh -x リ モ ー ト の サ ー バ zembutsu/muinin3 Dockerfile D o c k e r H u b docker push zembutsu/muinin3 docker pull zembutsu/muinin3 docker run docker commit docker bulid 環境を再構築する必要なく、 すぐに環境を実行できるように。
  • 41. l o c a l P C l o c a l P C l o c a l P C G i t H u b D o c k e r H u b B i t B u c k e t git add … git push origin master autobuild webhook 共同開発環境に向けて、DockerHubには GitHubと連携してpushするとDocker イメージを自動構築する機能があります。
  • 42. l o c a l P C l o c a l P C l o c a l P C G i t H u b D o c k e r H u b B i t B u c k e t git add … git push origin master autobuild webhook また、webhook でフックさせるこ とにより、いわゆ るCIやCDツール との連携も可能 になります。
  • 43. l o c a l P C l o c a l P C l o c a l P C G i t H u b D o c k e r H u b B i t B u c k e t git add … git push origin master autobuild webhook 更に、様々なシステムと連携し、デプロイまでも。 その中心にいるのがDockerなのです。
  • 44. Open Container Initiative Open Container Project (runC) https://www.opencontainers.org/ http://runc.io/ コンテナ規格の標準化団体 標準ランタイム策定プロジェクト コンテナをとりまく業界は、2014年当時 は混沌としていましたが、2015年には標 準化団体やプロジェクトが始まりました。 単にDocker社だけの取り組みというより 業界全体を大きく動かし始めています。
  • 48. 48 なぜコンテナ化するのか? ‣ 開発から運用に至る流れを より速く、正確に、効率的に行う手段の1つ ‣ Docker を入れたから、コンテナを使うから 速く・正確・効率的になる訳ではない ‣ 理想的な開発・運用にDockerが適している(かも) 例えば、私はVOCALOID大好きですが、 VOCALOIDのソフトを購入しただけで だれもが自由に歌い手になれるわけでは 決してありません。それと同じです。
  • 50. 50Introduction to Docker Basic Course ここまでのまとめ ‣ Docker は Linux カーネルの機能で プロセスレベルの「隔離」を行う=コンテナ化 Control Groups ( cgroups ) Namespaces ‣ Dockerは Linux コンテナを扱うプラットフォーム ‣ オープンソースで配布、オープンな開発体制
  • 51. Docker概要と 環境構築 2 ■■□□□□ How to use Docker?  Dockerアーキテクチャ  Dockerイメージとコンテナ  環境構築方法
  • 52. サーバ OS のカーネル空間 Docker サーバ ユーザ空間 ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket Ubuntu レポジトリ MySQL レポジトリ tag:latest tag:14.04 … tag:latest tag:5.7 …docker run … Dockerが「コンテナ」と 「イメージ」扱う流れを 詳しく見ていきます。
  • 53. サーバ OS のカーネル空間 Docker サーバ ユ ー ザ プ ロ セ ス ユ ー ザ プ ロ セ ス ユーザ空間 ユ ー ザ プ ロ セ ス ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket Ubuntu レポジトリ MySQL レポジトリ tag:latest tag:14.04 … tag:latest tag:5.7 …docker run … Docker コンテナ そもそも「Dockerコンテナ」とは?
  • 54. サーバ OS のカーネル空間 Docker サーバ ユーザ空間 ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket Ubuntu レポジトリ MySQL レポジトリ tag:latest tag:14.04 … tag:latest tag:5.7 …docker run …
  • 55. • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User DockerはLinuxカーネルの機能を使って プロセスを隔離。この環境がコンテナ。
  • 56. zem@dev:~$ docker run -ti ubuntu /bin/bash root@bdf6207621c7:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 01:11 ? 00:00:00 /bin/bash root 16 1 0 01:11 ? 00:00:00 ps -ef root@bdf6207621c7:/# コ ン テ ナ 内 の プ ロ セ ス コンテナの中のプロセスは、自分自身が PIDが1として存在して見えます。
  • 57. root@bdf6207621c7:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@bdf6207621c7:/# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 20511356 12952564 6493836 67% / none 20511356 12952564 6493836 67% / tmpfs 250896 0 250896 0% /dev shm 65536 0 65536 0% /dev/shm tmpfs 250896 0 250896 0% /sys/fs/cgroup /dev/disk/by-label/DOROOT 20511356 12952564 6493836 67% /etc/hosts tmpfs 250896 0 250896 0% /proc/kcore tmpfs 250896 0 250896 0% /proc/latency_stats tmpfs 250896 0 250896 0% /proc/timer_stats コ ン テ ナ 内 の フ ァ イ ル シ ス テ ム それだけでなく、コンテナ内だけで独自 のファイルシステムを持ちます。
  • 58. root@bdf6207621c7:/# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 361: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:25 brd ff:ff:ff:ff:ff:ff inet 172.17.0.37/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe11:25/64 scope link valid_lft forever preferred_lft forever root@bdf6207621c7:/# ip route default via 172.17.42.1 dev eth0 172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.37 コ ン テ ナ 内 の ネ ッ ト ワ ー ク さらに、独自でネットワークを持ちます。 これはホスト側(eth0等)とは異なったイ ンターフェースを持ちます。正確には dokcer0というブリッジを通しています。 またルーティングにはiptablesも自動的 に使用しています。
  • 59. root@bdf6207621c7:/# free total used free shared buffers cached Mem: 501792 485128 16664 460 127028 164560 -/+ buffers/cache: 193540 308252 Swap: 0 0 0 コ ン テ ナ 内 の メ モ リ メモリのリソースは、ホスト側と共有なの で(コンテナ内で上限は設定できます が)、このようにホスト側のメモリ量が そのまま表示されます。
  • 60. root@bdf6207621c7:/# exit zem@dev:~$ docker stop bdf6207621c7 コ ン テ ナ の 終 了 なお、コンテナは「プロセス」なので、 bashであれば"exit"で終了したらプロセ ス終了=コンテナ終了です。 あるいはdocker stopやkillコマンドでも 停止可能です。
  • 61. サーバ OS のカーネル空間 Docker サーバ ユ ー ザ プ ロ セ ス ユ ー ザ プ ロ セ ス ユーザ空間 ユ ー ザ プ ロ セ ス ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User コンテナ https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket Ubuntu レポジトリ MySQL レポジトリ tag:latest tag:14.04 … tag:latest tag:5.7 …docker run … Docker イメージ もう1つ重要な「Dockerイメージ」とは。
  • 63. ベース・イメージ (公式) Ubuntu, CentOS等 イメージ層 コマンドごとに記録 Docker イメージの構造 読み込み専用 (Read Only) Dockerイメージの実体は、単なる バイナリ(Tar)です。中にはいくつ もの「イメージ層」を持っています。
  • 64. ベース・イメージ (公式) Ubuntu, CentOS等 イメージ層 コマンドごとに記録 Docker イメージの構造 読み込み専用 (Read Only) 一番下に「ベース・イメージ」という Docker社が配布している各ディス トリビューションのイメージがありま す。ここは自分で独自に作ることも できます。
  • 65. ベース・イメージ (公式) Ubuntu, CentOS等 イメージ層 コマンドごとに記録 Docker イメージの構造 読み込み専用 (Read Only) その上に、コマンドを実行する毎に イメージ層が積み重なります。
  • 68. ベース・イメージ (公式) Ubuntu, CentOS等 イメージ層 コマンドごとに記録 Docker イメージの構造 読み込み専用 (Read Only) これらの集合体がDockerイメージ です。この仕組みがあるので共通 部分をキャッシュとして使い高速に イメージを構築したり、イメージ間 で共用するので容量を節約すると いった利点があります。
  • 69. ベース・イメージ (公式) Ubuntu, CentOS等 イメージ層 コマンドごとに記録 Docker イメージの構造 読み込み専用 (Read Only) これらの集合体がDockerイメージ です。この仕組みがあるので共通 部分をキャッシュとして使い高速に イメージを構築したり、イメージ間 で共用するので容量を節約すると いった利点があります。
  • 71. Nginx イメージの構造 902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB 一番下にあるのは、このファイルを 追加するというコマンドを実行した イメージID 902b87aaaec9 という ものです。
  • 72. Nginx イメージの構造 902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB 9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B その上に…
  • 73. Nginx イメージの構造 902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB 9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B いくつもの
  • 74. Nginx イメージの構造 902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB 9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B 5dd2638d10a1 3 months ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 1.997 kB イメージ層が
  • 75. Nginx イメージの構造 902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB 9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B 5dd2638d10a1 3 months ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 1.997 kB 97df1ddba09e 3 months ago /bin/sh -c echo "deb http://nginx.org/package 221 B e7e7a55e9264 10 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.9.4-1~j 0 B 72b67c8ad0ca 10 weeks ago /bin/sh -c apt-get update && apt-get inst 7.695 MB 9108e25be489 10 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 11 B 6dda3f3a8c05 10 weeks ago /bin/sh -c ln -sf /dev/stderr /var/log/nginx/ 11 B 42d2189f6cbe 10 weeks ago /bin/sh -c #(nop) VOLUME [/var/cache/nginx] 0 B 3cb7f49c6bc4 10 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B a486da044a3f 10 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon o 0 B $ docker history nginx IMAGE CREATED CREATED BY SIZE COMMENT 積み重なっています。上の方には Nginxのデーモンとしてのオプション や公開ポート等の情報もあります。
  • 76. Nginx イメージの構造 902b87aaaec9 3 months ago /bin/sh -c #(nop) ADD file:e1dd18493a216ecd0c 125.2 MB 9a61b6b1315e 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B aface2a79f55 3 months ago /bin/sh -c #(nop) MAINTAINER NGINX Docker Mai 0 B 5dd2638d10a1 3 months ago /bin/sh -c apt-key adv --keyserver hkp://pgp. 1.997 kB 97df1ddba09e 3 months ago /bin/sh -c echo "deb http://nginx.org/package 221 B e7e7a55e9264 10 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.9.4-1~j 0 B 72b67c8ad0ca 10 weeks ago /bin/sh -c apt-get update && apt-get inst 7.695 MB 9108e25be489 10 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx/ 11 B 6dda3f3a8c05 10 weeks ago /bin/sh -c ln -sf /dev/stderr /var/log/nginx/ 11 B 42d2189f6cbe 10 weeks ago /bin/sh -c #(nop) VOLUME [/var/cache/nginx] 0 B 3cb7f49c6bc4 10 weeks ago /bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp 0 B a486da044a3f 10 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon o 0 B $ docker history nginx IMAGE CREATED CREATED BY SIZE COMMENT docker history <image id/name> これがNginxイメージの実体です。どのイメー ジも、「docker history」コマンドでイメージ 作成の経緯を辿ることが可能です。
  • 77. ベース・イメージ (公式) イメージ層 Docker コンテナを起動するとは 読み込み専用 (Read Only) docker run <opts> <image:tag> もう1つ、このイメージを 使いコンテナを起動する時 何が起こっているのか?
  • 78. ベース・イメージ (公式) イメージ層 Docker コンテナを起動するとは 読み込み専用 (Read Only) ・新しいイメージ・レイヤの 自動的な割り当て ・隔離されたプロセスの起動 (コンテナ化の状態) docker run <opts> <image:tag> イメージを使ってコンテナを 実行すると、新しくイメージ が割り当てられています。 だから、実行するたびに 環境が作り直されているよう に見えますが、実際には 都度イメージが作り直されて いるのです。
  • 79. サーバ OS のカーネル空間 Docker サーバ ユ ー ザ プ ロ セ ス ユ ー ザ プ ロ セ ス ユーザ空間 ユ ー ザ プ ロ セ ス ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User Dockerコンテナ https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket Ubuntu レポジトリ MySQL レポジトリ tag:latest tag:14.04 … tag:latest tag:5.7 …docker run … Dockerイメージ 以上が「コンテナ」と 「イメージ」の関係です。
  • 80. Docker動作環境の構築 ローカルで構築 リモートで構築 クラウドサービスの利用 Docker Machine (旧boot2docker) Docker社による バイナリ・パッケージ Amazon EC2 Container Service (ECS) IBM Bluemix Microsoft Azure Google Container Engine VirtualBox Windows or Mac OSX Virtual or Physical Linux Machine コミュニティによる バイナリ・パッケージ 商用サポート版 ソースコードからビルド + Docker Toolbox コンテナを動かすためには様々な 選択肢があります。
  • 81. 81Introduction to Docker Basic Course ‣ 様々なツールのパッケージ • Docker Client • Docker Machine • Docker Compose • Docker Kitematic • VirtualBox ‣ 標準セットアップ手法 • かつての boot2docker に置き換わる位置付け Docker Toolbox PC上の開発環境向けには、Docker Toolbox(道具箱)というインス トーラーが提供されています。
  • 82. 82Introduction to Docker Basic Course ‣ オーケストレーション強化の目的 • Docker Machine, Swarm, Compose それぞれ v0.4.0 リリース • 以前のバージョンに比べ、お互いが連携 • まだベータ版の扱い Docker Toolbox Dockerはサーバ・クライアント型の システムですが、Docker単体で足 りない機能を、これらのツール群が 補っています。 Docker コンテナ実行エンジン Docker Machine 環境構築 Docker Swarm クラスタ管理 Docker Compose 複数コンテナの管理と運用
  • 83. 83Introduction to Docker Basic Course ‣ 方法1:インストール用の汎用スクリプトを使用 wget -qO- https://get.docker.com/ | sh service docker start ※ Ubuntu や Debian などは、こちらで Docker 社が提供する最新安定版をダウンロード可能 ※ RHEL/CentOS の場合は、後述の個別パッケージをセットアップ ‣ 方法2:各ディストリビューション向けパッケージ ‣ 方法3:Docker Toolboxを使う ※ Windows と Mac OS X は、VirtualBox 上の仮想サーバを使用 Dockerのセットアップ方法 その時点の最新版が使えます。 ディストリビューションや バージョンで、パッケージの 名前が異なる場合があります。
  • 84. 84Introduction to Docker Basic Course ‣ Linux Linux Kernel の機能を使うので、 インストールスクリプトかパッケージをセットアップすることで すぐに使えます。 ‣ Windows・Mac OS Docker Toolbox (VirtualBox)で Linux 環境を仮想マシン上に作り、 そこに Docker の動く環境をセットアップします。 クライアントは、PC上のコマンドライン(ターミナル)で動作します。 OSごとに違いが?
  • 85. 85Introduction to Docker Basic Course ‣ Windows or Mac OS 環境 Dokcer Toolbox をセットアップする コマンドラインのクライアントを通して、 VirtualBox 仮想マシン上の docker に接続 ‣ セットアップ インストーラーを使う • https://www.docker.com/docker-toolbox – ”Download (Mac)” または "Download (Win)" をクリック PC 環境で Docker を使うには?
  • 86. 86Introduction to Docker Basic Course ‣ 方法1:Docker版 v1.8(最新版)docker-engine sudo yum update yum install docker-engine ‣ 方法2: EPEL版 v1.6 パッケージ doker-io curl -s https://get.docker.com | sudo sh ※参考 http://docs.docker.com/installation/centos/ RHEL/CentOS 7 $ cat >/etc/yum.repos.d/docker.repo <<-EOF [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
  • 87. 87Introduction to Docker Basic Course ‣ 動作条件 RHEL/CentOS 6.5 以上かつ、Linux kernel 2.6.32-431 以上 ※ Kernel のバグに起因する問題がある可能性のため、CentOS 7 の利用が推奨されています。 ‣ 手順 ( EPEL 版 v1.5 ) sudo yum install epel-release sudo yum install docker-io sudo service docker start ※参考 http://docs.docker.com/installation/centos/ RHEL/CentOS 6.5
  • 88. 88Introduction to Docker Basic Course ‣ sudo docker version ‣ sudo docker run hello-world 動作確認 Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (Assuming it was not already locally available.) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash For more examples and ideas, visit: http://docs.docker.com/userguide/ 「hello-world」コンテナは テストで使われるものです。
  • 89. 89Introduction to Docker Basic Course ‣ sudo を使わず docker コマンドを使う設定 docker グループに対象ユーザを追加する – $ sudo usermod –aG docker <ユーザ名> ※注意:docker クライアントは /var/run/docker.sock にアクセスします。docker.sock の所有者は root、 グループが docker のためです。以下の方法は、グループに所属するユーザが事実上の root 権限を持つため セキュリティには十分配慮ください。 docker グループについて
  • 90. 90Introduction to Docker Basic Course ここまでのまとめ ‣ Docker コンテナは Docker イメージを使う • 新しいイメージ・レイヤの自動的な割り当て • 隔離されたプロセスの起動 ‣ Docker イメージは、イメージ層の積み重ね • ベース・イメージは Docker 社が提供 • コンテナ起動時に、自動的に書き込み可能なイメージを追加 ‣ セットアップ方法 • クライアント PC は Docker Toolbox ( Docker Machine ) • Linux サーバはスクリプトで、またはバイナリのセットアップが簡単
  • 91. 基本操作コマンドの 理解 3 ■■■□□□ How to management?  イメージ操作  コンテナ起動・停止  主要なオプション設定
  • 92. 92 Docker基本コマンド docker run コンテナ実行 docker stop コンテナ停止 docker commit コンテナイメージ化 docker pull イメージの取得 docker build イメージの自動構築 docker attach コンテナにアタッチ docker logs 標準出力の表示 docker inspect 詳細情報の表示 docker rm イメージ削除 docker images イメージ一覧表示 diff | history 差分・履歴表示 コンテナのライフサイクルを通して、 主要なコマンドを覚えていきます。
  • 93. サーバ OS のカーネル空間 Docker サーバ ユーザ空間 ユーザ空間 • Cgroups • Namespaces  mount  UTS  IPC  PID  Network  User Dockerコンテナ https://hub.docker.com/ Docker Hub (レジストリ) Docker クライアント "docker" デーモン TCP:2375,TCP:2376(TSL),UnixSocket Ubuntu レポジトリ MySQL レポジトリ tag:latest tag:14.04 … tag:latest tag:5.7 …docker run … Dockerイメージ まずはじめは、Docker イメージ管理用の コマンドからです。
  • 94. docker pull docker images docker search よく使うのが、この3つのコマンドです。
  • 95. 書式:docker pull <image名:タグ> $ docker pull ubuntu:latest $ docker pull zembutsu/serf $ docker pull localhost:5000/localuser/foo:bar コ ン テ ナ イ メ ー ジ の 取 得 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE zembutsu/perl_test latest 689c2a8b0b52 25 hours ago 187.9 MB test1 latest f0b80600cf79 25 hours ago 187.9 MB ubuntu 14.04 a5a467fddcb8 7 days ago 187.9 MB rocketchat/rocket.chat latest d2a9f69c1426 2 weeks ago 409.9 MB mongo latest 5e53867deb23 3 weeks ago 261.3 MB mynginx latest 197fa3a74539 3 weeks ago 360.6 MB ロ ー カ ル 上 の イ メ ー ジ 一 覧 書式:docker search <name> コ ン テ ナ イ メ ー ジ の 検 索
  • 96. 96Introduction to Docker Basic Course ‣ https://hub.docker.com/ Docker Hub # docker search wordpress NAME DESCRIPTION STARS OFFICIAL AUTOMATED wordpress The WordPress rich content management syst... 358 [OK] tutum/wordpress Wordpress Docker image - listens in port 8... 44 [OK] tutum/wordpress-stackable Wordpress Docker image - listens in port 8... 23 [OK] centurylink/wordpress Wordpress image with MySQL removed. 7 . . . ブラウザ上で公式イメージを 含む様々な検索が可能です。
  • 97. 97Introduction to Docker Basic Course ‣ 公式レポジトリは Docker 社の認証・精査済み ‣ 様々なベンダから提供されている NGINX, WordPress, Ubuntu, Red Hat, Redis, MySQL, Mariadb 等々 ‣ 実際は、様々なイメージの合成 ベースイメージ:Linux の各ディストリビューション公式のもの その上に、プログラミング言語、開発ツール、アプリケーション 公式レポジトリ OS部分だけでなく、アプリや ミドルウェア、データベース など100の公式イメージや、 45,000件のイメージが公開・ 配布されています。
  • 98. 98Introduction to Docker Basic Course ‣ 「docker images」の実行で、コンテナ一覧表示 コンテナ実行時には、ローカルにイメージがあるかどうか確認。無ければレポジトリからダウンロード。 ‣ イメージは「レポジトリ名:タグ」の形式で管理 タグ省略時は latest (最新)が標準で適用 • Ubuntu 省略時は「ubuntu:latest」 • タグ「14.04」を指定するイメージは「ubuntu:14.04」 • CentOS 省略時は「centos:latest」 • タグ「6」を指定するイメージは「centos:6」 ローカルのイメージの表示 docker images イメージ一覧表示
  • 99. 99Introduction to Docker Basic Course ‣ 「docker pull」でイメージを取得 docker pull は、ローカルにイメージを保存 docker run 時、ローカルに無ければ自動取得 ‣ 例: CentOS 最新版「docker pull centos」=「centos:7」 CentOS 6 を指定するには「docker pull centos:6」 イメージの取得 docker pull イメージの取得
  • 100. docker run docker ps docker attach docker logs 次はコンテナの実行関連。
  • 101. 書式:docker run [オプション] <image名:タグ> [コマンド] [引数] $ docker run –ti ubuntu /bin/bash $ docker run –d –P nginx コ ン テ ナ の 起 動 $ docker ps [オプション] CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bdf6207621c7 ubuntu "/bin/bash" 6 hours ago Up 6 hours thirsty_almeida $ docker ps –a ←すべて(all) $ docker ps –l ←最新(last) コ ン テ ナ 一 覧 の 表 示
  • 104. 書式:docker rm <コンテナID> $ docker rm bdf6207621c7 bdf6207621c7 コ ン テ ナ ( が 使 っ た イ メ ー ジ レ イ ヤ ) の 削 除 書式:docker rmi <イメージID> $ docker rmi f0b80600cf79 f0b80600cf79 D o c k e r イ メ ー ジ の 削 除 rm はコンテナが使ったイメージ層を削除 します。再利用する場合は、事前に commitしたりpushやexportを使えます。 対してこちらは「Dockerイメージ」の削除 です。"docker images"コマンドで表示さ れるローカルのイメージ・タグが対象です。
  • 106. ベース・イメージ (公式) イメージ層読み込み専用 (Read Only) docker commit <image:tag> 操作したコンテナの内容を、イメージ IDとして確定する「docker commit」 コマンド。そのとき、イメージ名称や タグ(:の右側の文字列)を指定可能。
  • 108. 108Introduction to Docker Basic Course ‣ docker run コマンド 指定したイメージを使ったコンテナを作成 コンテナの実行 ‣ 構文 docker run [オプション] [イメージ名] [コマンド] [引数] • 例:docker run ubuntu:14.04 echo “Hey World!” • 例:docker run Ubuntu:14.04 ps ax コンテナの作成と実行 docker run コンテナ実行
  • 109. 109Introduction to Docker Basic Course ‣ docker ps – CONTAINER ID … コンテナ ID と呼ばれる、コンテナ毎にユニーク – IMAGE … コンテナ・イメージの名称 – COMMAND … コンテナ内で PID 1 で実行中のコマンド – CREATED … 作成時間 – STATUS … ステータス – PORT … ポートマッピングの状態 – NAMES … コンテナの名前 ‣ docker ps –l – 直近(latest)のコンテナの情報を表示 コンテナの確認 コンテナID確認用に使います。 こちらも非常に使います。
  • 110. 110Introduction to Docker Basic Course ‣ docker ps –a – 停止しているコンテナを含めて全て(all)表示 ‣ docker -ps –q – ショートID のみで表示 コンテナの確認 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d6a33b8c0147 amazon/amazon-ecs-agent:latest "/agent" 38 minutes ago Up 38 minutes 127.0.0.1:51678->51678/tcp ecs-agent c89b318326c9 centos "ps ax" 4 minutes ago Exited (0) 4 minutes ago kickass_banach c0963adcc32e centos "echo 'hello world'" 4 minutes ago Exited (0) 4 minutes ago distracted_sammet
  • 111. 111Introduction to Docker Basic Course ‣ 2つのオプション -i 標準入力(standard input)を有効化 -t 疑似ターミナル(pseudo-terminal) • bash を実行するには、docker run –i –t ubuntu:latest bash ‣ ターミナルの終了 CTRL + P + Q を押す ※ exit はコンテナを終了するので注意 ‣ 別プロセスで接続する方法 ”docker exec <image> /bin/bash” コンテナのターミナル 「-it」や「-ti」も使えます。
  • 112. 112Introduction to Docker Basic Course ‣ ロング ID とショート ID ショート ID は省略されたもの コンテナ1つ1つにユニーク ‣ docker ps –q docker ps –l, -aq ,-lq --filter でフィルタも可能です コンテナID $ docker ps -aq 9f0bf0d6ad01 コンテナを操作するとき、ロ ングID全てを入力する必要は ありません。ショートIDか、 それより短かな部分一致する 文字列でも構いません。 例:IDが9f0bf0d6ad01…であ れば、「docker attach 9f」 のように指定できます(部分 一致の適用)。IDの重複がな ければ「docker attach 9」 のような指定もできますが、 被ることが多いので、2・3 桁なら間違いなさそうです。
  • 113. 113Introduction to Docker Basic Course ‣ 「-d」フラグでデタッチ指定 docker run –d centos:7 ping 127.0.0.1 –c 50 ‣ コマンドラインからのアタッチ docker attach <コンテナID> 再度デタッチするには CTRL+Q+P なので注意! デタッチ・モードで起動 docker attach コンテナにアタッチ 「デタッチ」detach とは、 コンテナに接続していない 状態を指定します。一般的に デーモンとしての起動時に 多く見られます。 デタッチされたコンテナには アタッチすることができます。
  • 114. 114Introduction to Docker Basic Course ‣ ポート・マッピング docker run –d –P tomcat:7 docker run –d –P nginx docker run –d –p 8080:80 nginx ‣ docker exec でコマンド実行 docker exec –i –t [コンテナID] bash その他のコマンド 対象コンテナでデフォルトの ポートマッピングが自動的に 適用されます。あるいは、 小文字の「-p」オプションで 指定します。 注意点としては、コンテナの 起動時に指定します。
  • 115. 115Introduction to Docker Basic Course ‣ 標準出力の内容をコンテナ外から確認 docker logs [コンテナID] docker logs –f [コンテナID] docker logs –tail 10 [コンテナID] docker logs –tail -10 –f [コンテナID] ログの参照 docker logs 標準出力の表示 ログファイルの確認ではなく、 あくまでコンテナ上での状況 確認に使います。
  • 116. 116Introduction to Docker Basic Course ‣ docker stop SIGTERM シグナルで停止 ‣ docker kill SIGKILL シグナルで停止 ‣ docker start –a [コンテナID] コンテナの停止 docker stop コンテナ停止 デタッチモード(-d)で動作中 コンテナの停止に使います。
  • 117. 117Introduction to Docker Basic Course ‣ docker inspect JSON 形式の出力 ‣ --format オプションでフィルタ コンテナの詳細確認 $ docker inspect $CONTAINER [ { "Id": "7bc2a8876520d19c08d2f71641eacaf643910ebac2cfa79870e4a7ef50dc6815", "Created": "2015-07-06T03:43:46.882917122Z", "Path": "ping", "Args": [ "127.0.0.1", "-c", "120" ], "State": { "Running": false, "Paused": false, ... docker inspect 詳細情報の表示
  • 118. 118Introduction to Docker Basic Course ‣ docker ps –aq でコンテナID把握 ‣ docker rm <コンテナID> で削除 ‣ docker rm $(docker ps –aq) exit のものだけを一括指定 • docker rm $(docker ps -aq --filter='status=exited') コンテナの停止と削除 docker rm イメージ削除 コンテナを停止後もコンテナ が使用していたイメージは、 ファイルとして残り続けます。 不要な場合「docker rm」で 削除が必要です。 便利な一括削除コマンドも 紹介します。
  • 119. 119Introduction to Docker Basic Course ‣ 既存のイメージに対する変更をコミットする 開発段階で多く用いられると思います。 ‣ Dockerfile から作成する 別のマシン環境で環境を再現するときに便利な方法です。 ‣ tar 形式のファイルからイメージを読み込む 環境移行時や、バックアップしているイメージの再利用に活用します。 イメージを構築するには 目的により、この3つの方法 を使い分けています。方法は 違いますが、イメージ作成と いう意味では、共通です。
  • 120. 120Introduction to Docker Basic Course ‣ docker diff ‣ docker history 差分と履歴の確認 $ docker diff <コンテナID> A /hello.txt C /root A /root/.bash_history $ docker history $IMEGEID IMAGE CREATED CREATED BY SIZE COMMENT 1b07ddefe341 2 minutes ago bash 66 B 6d4946999d4f 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B 9fd3c8c9af32 3 weeks ago /bin/sh -c sed -i 's/^#¥s*¥(deb.*universe¥)$/ 1.895 kB 435050075b3f 3 weeks ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB 428b411c28f0 3 weeks ago /bin/sh -c #(nop) ADD file:b3447f4503091bb6bb 188.1 MB diff | history 差分・履歴表示
  • 121. 121Introduction to Docker Basic Course ‣ docker commit コマンド docker commit [オプション] [コンテナID] [レポジトリ名:タグ] コミットして変更内容を確定 $ docker commit $CONTAINER ecsdocker/myapp:1.0 1b07ddefe341abdae8f497a4dea24b2fef46a2a32621a0998fb0e7e8c2fbf666 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ecsdocker/myapp 1.0 1b07ddefe341 17 seconds ago 188.3 M docker commit コンテナイメージ化
  • 122. 122Introduction to Docker Basic Course ‣ ルート(公式レポジトリ) Ubuntu:14.04 nginx ‣ ユーザやグループ zembutsu/testapp ‣ ローカルのレジストリ registry.zem.jp:5000/zem-image レポジトリ(イメージ)の名前空間 3つの使い方があります。 複数の利用者が居る場合は、 名前で分けるようにした方が 混同しなくてオススメです。
  • 123. 123Introduction to Docker Basic Course ‣ Dockerfile の役割 どのようなイメージにするか指示 • どのベース・イメージを使うのか? • 何のプログラムをインストールするのか? • どのようなコマンドを実行するのか ‣ docker build コマンドで構築 docker build –t <レポジトリ:タグ> <Dockerfileのパス> Dockerfile docker build イメージの自動構築 設定を自動的に行うための 命令をファイルに記述します。 内容はテキスト形式ファイル なのでエディタで編集します。
  • 124. 124Introduction to Docker Basic Course ‣ FROM ベースイメージの指定 • 例:FROM Ubuntu • 例:FROM nginx ‣ RUN コマンドの実行 • 例:RUN yum –y install nginx Dockerfileの基本命令 FORMは必須です。
  • 125. 125Introduction to Docker Basic Course ‣ CMD または ENTRYPOINTで実行コマンド指定 ENTRYPOINT使用時は、 • CMDで指定した項目がオプション適用 • コンテナ実行時にオプションがあれば、CMD指定よりも優先 ‣ ADD でファイル/URL/ZIP からコンテナへ追加 ‣ MAINTAINER で管理者の情報を追記 様々な命令
  • 126. 126Introduction to Docker Basic Course Dockerfileの例 FROM ubuntu:14.04 RUN apt-get install -y wget CMD /usr/bin/wget FROM nginx ADD ./contents /usr/share/nginx/html どれもシンプルです。 「docker build」コマンドで 環境を構築(ビルド)します。
  • 127. 127Introduction to Docker Basic Course ‣ -p オプションで、ポートマッピング 例:-p 8080:80 • ホスト側の port 8080 をコンテナの port 80 へ ‣ -P (大文字) はデフォルト ポートの指定 $ docker run -d -p 80:80 ecsdocker/web 010a5fbd22acbfab818541e3f07055b5338f9fa010ee9a26899423dd5944938c $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 010a5fbd22ac ecsdocker/web "nginx -g 'daemon of 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, 443/tcp determined_albattani
  • 128. 128Introduction to Docker Basic Course ‣ -v オプションは、領域をホストとコンテナで共有 例:-v /home/web:/usr/share/nginx/html • ホスト側の「/home/web」をコンテナの「/usr/share/nginx/html」へ ボリュームの設定
  • 129. 129 Docker基本コマンド docker run コンテナ実行 docker stop コンテナ停止 docker commit コンテナイメージ化 docker pull イメージの取得 docker build イメージの自動構築 docker attach コンテナにアタッチ docker logs 標準出力の表示 docker inspect 詳細情報の表示 docker rm イメージ削除 docker images イメージ一覧表示 diff | history 差分・履歴表示
  • 130. Dockerと オーケストレーション 4 ■■■■□□ Docker Orchestration  Dockerコンテナの課題  Machine, Swarm, Compose
  • 131. 開 発 用 端 末 社 内 サ ー バ ク ラ ウ ド 環 境 VirtualBox VirtualBox VirtualBox Virtual Machine Virtual Machine Virtual Machine Virtual Machine Machine Image Virtual Machine Machine Image 開 発 用 C I ス テ ー ジ ン グ 本 番 Virtual Machine Virtual Machine Virtual Machine 構成管理ツール (Chef, Puppet, Ansible, Itamae… etc.) デプロイ支援ツール (Capistrano, Vagrant, Packer, Terraform, AWS CLI … etc.) D o k c e r H u b autobiuld webhook さて、Dockerエンジンは 基本的に1つの環境しか 管理できません。
  • 134. Docker Engine コンテナ実行用 プラットフォーム Docker Machine Docker実行環境の 自動構築 Docker Swarm クラスタ管理と スケジューリング Docker Compose 複数コンテナ管理と 運用ツール
  • 135. 135Introduction to Docker Basic Course ‣ Docker 動作環境の自動作成 仮想サーバの起動と Docker のプロビジョニングを自動的に行う ‣ コマンドラインで使うツール docker-machine –d <ドライバ> [option] マシン名 …のように、コマンドで操作 ‣ Linux, Windows, Mac OS X に対応 ‣ VirtualBox だけでなく、多くのクラウドに対応 Amazon Web Services, DigitalOcean, exoscale, Google Compute Engine, SoftLayer, Azure, Hyper-V, OpenStack, RackSpace, VMwareFusion, VMwarea vCloud Air, VMware vSphere, SSH 可能なリモートホスト Docker Machine 複数のDocker環境を簡単に使う ためのツールがMachineです。
  • 136. 136Introduction to Docker Basic Course Docker Machine の入手と実行 ‣ 方法1:バイナリのダウンロード • https://github.com/docker/machine/releases/ $ curl -L https://github.com/docker/machine/releases/download/v0.4.1/docker-machine_linux-amd64 > ¥ /usr/local/bin/docker-machine $ sudo chmod +x /usr/local/bin/docker-machine ‣ 方法2:Docker Toolbox
  • 139. $ docker-machine create --driver=amazonec2 ¥ --amazonec2-access-key=<アクセス・キー> ¥ --amazonec2-secret-key=<シークレット・キー> ¥ --amazonec2-vpc-id=<VPC ID> ¥ ec2docker $ docker-machine env ec2docker export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://54.152.12.116:2376" export DOCKER_CERT_PATH="/root/.docker/machine/machines/ec2docker" export DOCKER_MACHINE_NAME="ec2docker" # Run this command to configure your shell: # eval "$(docker-machine env ec2docker)“ $ docker-machine ssh ec2docker EC2上であれば、Docker環境を 準備しなくても、「docker- machine」コマンドを実行する と、自動的にDockerが入った インスタンスを起動します。 環境変数を有効化すると、リ モートのDokcerを操作できます。 SSHでログインもできます。
  • 141. $ docker-machine create --driver= digitalocean ¥ --digitalocean-access-token <token> ¥ ec2docker $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM b2d virtualbox Stopped default virtualbox Stopped dev virtualbox Stopped do03 digitalocean Error tcp://104.131.113.166:2376 rancheros virtualbox Stopped rancheros2 virtualbox Stopped sl3 * softlayer softlayer-docker01 * softlayer softlayer-docker02 * softlayer test2 virtualbox Stopped testhost1 virtualbox Stopped testhost21 virtualbox Stopped testhost22 virtualbox Stopped DigitalOceanの環境でも同様に 環境を構築することができます。 違いは「--driver」の指定です。 環境一覧を「ls」オプションで 見られます。
  • 142. 142Introduction to Docker Basic Course Docker Machine 主要オプション • create … 作成 • rm … 削除 • ls … 一覧表示 • ssh … SSH 接続 • scp … ファイル転送 • start … 起動 • stop … 停止 • restart … 再起動 • ip … パブリック IP アドレスの確認 • inspect … 詳細表示
  • 146. 146Introduction to Docker Basic Course Docker Swarm ‣ 役割 "Dockerホスト群をクラスタ化し、 どのホストでコンテナを起動するのか コンテナをスケジュールするためのツール" クラスタ全体を1つのリソース・プールとして扱う Docker の API と互換性を持つ • docker ps や run 等のコマンドを Swarm 全体に対して適用できる • どこにコンテナを置く(スケジュール)方針がアフィニティとフィルタ 次にSwarm(スウォーム)です。 複数OS上のDocker環境を1つの リソースプールとして扱えます。 詳しくは次章で紹介します。
  • 147. docker engine (docker daemon) machine docker client $ docker run コンテナ コンテナ $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" TCP:2375 TCP:2376 DOCKER_OPTS="-H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem” DOCKER_OPTS=“-H tcp://0.0.0.0:2375 –H unix:///var/run/docker.sock” 1台のDocker環境の操作なら まだしも…
  • 148. docker engine (docker daemon) machine docker client $ docker run コンテナ コンテナ docker engine (docker daemon) machine コンテナ コンテナ docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine コンテナ コンテナ コンテナ $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" TCP:2375 TCP:2376 DOCKER_OPTS="-H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem” DOCKER_OPTS=“-H tcp://0.0.0.0:2375 –H unix:///var/run/docker.sock” 通常、複数Docker環境の操作は 環境変数の切り替えが都度行う 必要があります。面倒です。
  • 149. Swarm Manager machine docker client $ docker run $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API コンテナの配置を スケジューリング 対してSwarmは、まずmanager (マネージャ)を準備します。 Dockerデーモンに代わり、同じ インターフェースで操作します。
  • 150. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド 例;DockerHub 次にDocker Machineを使うか、 あるいは手動でDocker動作環境 を構築します。
  • 151. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド 例;DockerHub ディスカバリ・バックエンドに 自分のノード情報の登録(join) します。正確にはSwarmという エージェントを起動します。 join join join join
  • 152. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド 例;DockerHub 登録された情報は、マネージャ に送信され、マネージャが各 ノードを管理できるようになり、 Swarmはバックエンド監視対象 となります。
  • 153. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) Docker互換 API リソース・プール コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド 複数のノードが、1つの環境 (リソース・プール)として 見えるようになります。
  • 154. Swarm Manager machine docker client $ docker run docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine docker engine (docker daemon) machine コンテナ $ docker-machine env docker01 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.131.113.166:2376" export DOCKER_CERT_PATH="/home/zem/.docker/machine/machines/docker01" export DOCKER_MACHINE_NAME="docker01" $ docker run –d –P swarm manage ¥ token://<token> docker engine (docker daemon) コンテナ コンテナ コンテナ コンテナ Docker互換 API リソース・プール ストラテジ フィルタ • spread • binpack • random • constraint • affinity • port • dependency • health コンテナの配置を スケジューリング docker machine でデプロイ/プロビジョニング ディスカバリ・バックエンド あとはストラテジとフィルタで コンテナをスケジュールします。
  • 157. 157Introduction to Docker Basic Course ‣ 複数コンテナのアプリケーション自動設定 Dockerfile を複数のコンテナに拡張したようなイメージ ‣ コマンドラインで操作 docker-compose docker-compose.yml ‣ Linux, Windows, Mac OS X に対応 ‣ 構成情報を YAML 形式のファイルで定義 Docker Compose そしてもう1つ、コードで Dockerの環境を管理するもの。
  • 158. docker-compose.yml web: build: . command: php -S 0.0.0.0:8000 -t /wordpress ports: - "8000:8000" links: - db volumes: - .:/wordpress db: image: orchardup/mysql environment: MYSQL_DATABASE: wordpress Dockerfile FROM orchardup/php5 ADD . /wordpress Dockerfileは単一のコンテナを 定義するのに対し、Composeは 複数のコンテナを定義します。 他にも、docker-compose ps で 複数のコンテナの状態を確認し たり、スケールアップ・スケー ルダウンしたり、運用時におけ るコンテナ管理機能も提供して います。
  • 160. 160Introduction to Docker Basic Course ここまでのまとめ ‣ Docker Machine は環境の自動構築 • ローカル環境 ( VirtualBox 等 ) • リモートのクラウド環境 ( AWS, DigitalOcean 等々 ) ‣ Docker Swarm はスケジューラ • 複数サーバ上に、どのようにコンテナを起動するか一元管理 ‣ Docker Compose は複数コンテナの環境管理 • YAML 設定ファイルを使い、起動・停止・管理を担う
  • 161. Amazon EC2 Container Service 5 ■■■■■□ Amazon ECS  Amazon ECS  ECS CLI
  • 164. Amazon EC2 Container Service (ECS) • EC2 上にクラスタを構築 • スケジューリング • タスク定義 • ELB や自動復旧 • AWS によるサポート • Docker 互換の CLI 製品の詳細 - Amazon EC2 Container Service (高いスケーラビリティとパフォーマンスを備えたコンテナ管理サービス) | アマゾン ウェブ サービス(AWS 日本語) https://aws.amazon.com/jp/ecs/details/
  • 165. E E Amazon ECS CLI の場合 Docker Machine / Compose の場合 $ ecs-cli compose up $ docker-compose up YAML YAML $ ecs-cli up EC2 instance EC2 instance ap-northeast-1b ap-northeast-1c EC2 instance EC2 instance コンテナ コンテナ コンテナ $ docker-machine up VM VM amazon-ecs-agent amazon-ecs-agent Docker Daemon Docker Daemon Docker Daemon Docker Daemon Docker Daemon Docker Daemon VM Docker Daemon VM Docker Daemon $ docker-compose up YAML Amazon ECS コンテナ コンテナ $ docker-machine up
  • 167. $ sudo curl -o /usr/local/bin/ecs-cli ¥ https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest $ ecs-cli configure ¥ --region ap-northeast-1 ¥ --access-key $AWS_ACCESS_KEY_ID ¥ --secret-key $AWS_SECRET_ACCESS_KEY ¥ --cluster ecs-cli-demo $ ecs-cli up --keypair <キーペア名> --capability-iam --size 2 ¥ --instance-type t2.medium セットアップも、このバイナリ 1個をダウンロードし、初回設 定用のコマンドを実行するだけ です。
  • 170. rocketchat: image: "rocketchat/rocket.chat" cpu_shares: 100 mem_limit: 262144000 ports: - "80:80" links: - mongodb environment: - ROOT_URL=http://localhost:80 - MONGO_URL=mongodb://mongodb/rocketchat mongodb: image: mongo cpu_shares: 100 mem_limit: 262144000 ports: - 27017 これが Docker Compose または ECS CLI で利用可能なYAML形式 のファイルです。これを使い 「rocketchat」と「mongodb」 という2つのコンテナを管理で きます。
  • 171. $ ecs-cli compose -f rocket-chat.yml up INFO[0000] Using ECS task definition TaskDefinition=ecscompose-ecs:3 INFO[0000] Starting container... container=7d3c638c-add9-462c-84d2-8a74f3401a12/rocketchat INFO[0000] Starting container... container=7d3c638c-add9-462c-84d2-8a74f3401a12/mongodb . . $ ecs-cli ps Name State Ports TaskDefinition 7d3c638c-add9-462c-84d2-8a74f3401a12/mongodb RUNNING 54.64.171.210:32768->27017/tcp ecscompose-ecs:3 7d3c638c-add9-462c-84d2-8a74f3401a12/rocketchat RUNNING 54.64.171.210:80->80/tcp ecscompose-ecs:3 コマンド「ecs-cli」にファイ ル名と「up」を指定すると、自 動的にコンテナの起動とIPアド レスが割り当てられます。
  • 172. Amazon ECS CLI を使い Rocket.Chat 環境を compose するには | Pocketstudio.jp log3 http://pocketstudio.jp/log3/2015/10/14/amazon-ecs-cli-compose-rocket-chat/ もし興味がありましたら、私の 記事ですが、参考にどうぞ。 このように ECS CLI を使えば、 EC2 環境を意識せずに環境を簡 単に構築・運用できます。
  • 173. まとめ 6 ■■■■■■ Wrap up  復習  質疑応答  Docker 都市伝説
  • 174. 174 今日の内容 Docker入門-基礎編 いまから始めるDocker ‣ 1. コンテナとは何か? なぜDockerなのか? ‣ 2. Docker概要と環境構築 ‣ 3. 基本操作コマンドの理解 ‣ 4. Dockerのオーケストレーション ‣ 5. Amazon ECS (EC2 Container Service)
  • 175. 175 重要ポイント Docker入門-基礎編 いまから始めるDocker ‣ Dockerコンテナはプロセスレベルの隔離技術 Control Groups(cgroups) と Namespaces という Linux カーネル機能 Docker イメージ(ファイルシステム、各種設定等)を使って、Docker コンテナを起動する ‣ Dockerはクライアント・サーバ型 Docker デーモンに対して、クライアントからアクセスする ‣ 複数の環境を管理するオーケストレーション コンテナを扱う環境を、より簡単にする、Docker Machine、 Docker Swarm、 Docker Compose
  • 177. 177 ‣ Docker ドキュメント http://docs.docker.com/ ‣ Docker Machine https://docs.docker.com/machine/ ‣ docker-machine - Docker Machine ドキュメント参考日本語訳 - Qiita http://qiita.com/zembutsu/items/9d189da5d2c7708717a3 ‣ Docker Swarm https://docs.docker.com/swarm/ ‣ DockerSwarm - Docker Swarm ドキュメント参考日本語訳 目次 - Qiita http://qiita.com/zembutsu/items/a1f0a89581d1d5832e2e ‣ Docker Compose https://docs.docker.com/compose/ ‣ docker-compose - Docker Compose ドキュメント参考日本語訳 概要・目次 - Qiita http://qiita.com/zembutsu/items/c277830c469d7a25ba15 参考情報 References
  • 181. 背景画像CREDIT:rvika/ PIXTA(ピクスタ) https://pixta.jp/@prof261092 1. 今すぐ始めなくてはいけない 2. すべての環境をコンテナにしなくてはいけない 3. 仮想化システムは不要になる 4. 構成管理ツール(Chef,Puppet,Ansible等)は不要になる 5. クラウド環境は不要になる 6. Dockerやコンテナが全てを解決してくれる 7. Dockerは難しい 8. 本番環境では使えない 9. セキュリティや信頼性に問題がある 10. Dockerは冗長化できない
  • 182. 背景画像CREDIT:rvika/ PIXTA(ピクスタ) https://pixta.jp/@prof261092 11. ネットワークが貧弱だ 12. よく落ちる 13. 商用サポートを受けられない 14. Docker ではなく CoreOS を使うべきだ 15. データの可用性が貧弱 16. Docker があればコスト削減できる 17. Docker は kubernetes がないと意味が無い 18. Docker やコンテナを使うとベンダーロックインされる 19. Docker であれば業務効率化できる 20. そもそも、Docker を使う意味が無い