SlideShare a Scribd company logo
1 of 95
今 だ か ら こ そ 知 り た い
Docker Compose/Swarm入門
2016年1月21日(金)
@zembutsu
Technology Evangelist; Creationline, Inc.
Introduction to Docker Compose and Swarm
背景画像CREDIT:スフィア / PIXTA(ピクスタ)
2
スライドで得られる知識
今だから知りたい Docker Compose/Swarm 入門
‣ Docker Engine と Docker Compose の違い
• 管理対象のコンテナが1つか複数なのか
• ローカルの開発環境なのか、それともデプロイ先なのか
‣ Docker Swarm がスケジューリングを管理
• スケジューリングとは、コンテナをどこに配置するのかを管理
‣ Engine/Swarm/Composeは三位一体
「Docker Machine
環境構築(わかる)」
「Docker Swarm? Compose??」
という疑問を解決していきます。
2015年2月
v1.5.0 v0.1.0 v1.1.0v0.1.0
experimental experimental
Machine・Compose・Swarmは
オープンになってから、ようやく
1年を迎えようとしています。
役割が曖昧な印象でしたが…
Docker Engine Docker Machine Docker Swarm Docker Compose
2016年1月
v1.9.1 v0.5.6 v1.5.2v1.0.1
Docker Engine Docker Machine Docker Swarm Docker Compose
βバージョンも外れ、ようやく各
ツールの繋がりが見えてきました。
そもそも、なぜ Docker なのか?
どうして Compose が必要なのか?
Swarm?
Machine?
今だからこそ各ツールの役割を
あらためて整理してみましょう。
ツールは分かれています。でも
考えのヒントになるのが…
こんな関係性なのかな?とも。
答え合わせは、後ほど。
Dockerコンテナとイメージ入門
1■□□□ What is 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 サーバ
ユ
ー
ザ
プ
ロ
セ
ス
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
コンテナ
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
docker run …
Dockerコンテナとはプロセスの
1つ1つを隔離して起動すること。
正確には「隔離」または「分離」
する(英語のisolate)のは、単に
プロセスだけではありません。
ファイルシステムを(chroot風に)
マウントし、ネットワークを持ち、
メモリやCPUリソースの上限を
設定できます。Linuxカーネルの
機能を使います。
あくまでもDockerのホスト側から
は単純にプロセスが起動してい
るだけですし、ファイルシステム
が見えるにすぎません。
もう1つ重要な概念が、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 …
レジストリ(DockerHub等)から
イメージをダウンロードします。
そして、その中に含まれるプロ
セスを、Dockerコンテナとして
実行するものでした。
• Cgroups
• Namespaces
 mount
 UTS
 IPC
 PID
 Network
 User
そして、そのプロセスの実行を
コンテナを実行していると表現し、
プロセスが停止するとコンテナ
も停止しているものと扱います。
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:/#
コ ン テ ナ 内 の プ ロ セ ス
Dockerコンテナ内のプロセスは
PIDが「1」です。各々のコンテ
ナは、全てPID「1」として動作
します。
Dockerコンテナ内のプロセスは
PIDが「1」です。しかし、ホス
ト側からは、通常のPIDを持って
います。これはマジックミラーの
ようなものです。ホスト側から
は見えますが、コンテナABは
互いのことが見えません。
/sbin/init
PID 1
alice
PID 2
bob
PID 3
docker
PID 4
httpd
PID 1
コンテナA コンテナB
ruby
PID 1
chris.rb
PID 2
httpd
PID 5
chris.rb
PID 7
ruby
PID 6
(汗
どこで、どうやって Docker を使うのか?
次に使いどころ。開発環境コード
を社内共有サーバやクラウド環境
上で動かすには、コードをscpや
FTPで送るだけではありません。
ミドルウェアやライブラリを構築
するため、ChefやPuppetなどの
構成管理ツールを組みあわせる
のが効果的です。しかし、構築
には時間がかかりがちですし、
正確にデプロイされたかどうか、
確認する必要があります。
(汗
どこで、どうやって Docker を使うのか?
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
リ モ ー ト の サ ー バ
もしも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
リ モ ー ト の サ ー バ
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
さらに、GitHubと連携できるだ
けでなく、イメージを補完する
DockerHubのWebhookと連携し
様々な自動処理の応用も。
サーバ
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つ。重要なイメージの
概念についてお復習いします。
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
Dockerイメージの実体は、単純
にファイルやメタデータの集合。
ベース・イメージ
(公式)
Ubuntu, CentOS等
イメージ層
コマンドごとに記録
Docker イメージの構造
読み込み専用
(Read Only)
その中身は、イメージ・レイヤが
重なっています。
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 コンテナを起動するとは
読み込み専用
(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イメージ
OS ( Linux )
物理/仮想サーバ
Docker エンジン
( docker デーモン )
Linux kernel
コンテナ コンテナ コンテナ
リモート
API
docker
クライアント
・docker コマンド
・Kitematic (GUI)
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
30
ここまでのキーワード
‣ Docker Engine
• docker デーモン(サーバ)
‣ Docker コンテナ
‣ Docker イメージ
• Dockerfile
‣ Docker Machine
‣ Docker Toolbox
Docker(エンジン)とは、
環境をコンテナ化し、
移動・実行する仕組み
を提供。しかも簡単な
コマンドで操作できる。
Composeは複数環境を束ねる
2■■□□ Why we need to use Docker Engine and Docker Compose?
DockerHubから取得する
コンテナをコミットする
Dockerfileで構築する
Dockerイメージを構築するには、
3つの方法があります。
構築(build)とコミット(commit)
との違いは、イメージの作成を
手動で行うか自動で行うかです。
34
‣ Dockerfile の役割
どのようなイメージにするか指示
• どのベース・イメージを使うのか?
• 何のプログラムをインストールするのか?
• どのようなコマンドを実行するのか
‣ docker build コマンドで構築
docker build –t <レポジトリ:タグ> <Dockerfileのパス>
Dockerfile
docker build
イメージの自動構築
手動だと毎回大変ですし、ミス
も発生しがち。でもDockerfile
を使う自動構築であれば、だれ
でも同じ環境を再現できます。
FROM ubuntu:14.04
RUN apt-get install -y wget
CMD /usr/bin/wget
FROM nginx
ADD ./contents /usr/share/nginx/html
FROM centos:7
MAINTAINER <自分の名前>
RUN yum update -y
RUN yum install -y epel-release
RUN yum install -y nginx
ADD index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
ex1 ex2
ex3
Dockerfileのサンプルです。
書き方は簡単なものです。
楽々構築できるよね^^
でも、WebとDBが別々の
コンテナの場合は?^^;
きっと、こんな疑問が思い浮かぶ
のではないでしょうか。
Engine
$ docker run …
Dockerクライアントがエンジン
(dockerデーモン)に対して、コン
テナの実行を命令します。
Engine
$ docker run …
$ docker run …
Engine
$ docker run …
$ docker run …
$ docker run …
Engine
$ docker run …
$ docker run …
$ docker run …
$ docker run …
毎回 docker run を実行するのは
面倒ですし、間違えそう…
そこで、先ほどの写真を思い出
してください。こちらは楽譜です。
Composeは「作曲」という意味が
あります。楽譜は楽器のパート
が並んでいて、あたかもコンテ
ナの起動タイミングを指定してい
るような印象。
Engine
$ docker-compose up
そこで「Compose」の出番です。
Dockerエンジンと通信して、複
数のコンテナの一斉起動や管理
を行えます。コマンドライン上の
ツールであり、ある種のDocker
クライアントとも言えるでしょう。
Engine
$ docker-compose up
そこで「Compose」の出番です。
Dockerエンジンと通信して、複
数のコンテナの一斉起動や管理
を行えます。コマンドライン上の
ツールであり、ある種のDocker
クライアントとも言えるでしょう。
複数のコンテナをコードで管理
コンテナの同時起動・停止
コンテナのスケール
ネットワーク機能に対応(1.6~)
Engine
• docker run …
• docker run –d
• docker ps
• docker logs …
• docker stop …
• docker restart
• docker-compose up
• docker-compose up –d
• docker-compose ps
• docker-compose logs
• docker-compose stop
• docker-compose restart
どちらも docker をクライアントとして操作
dockerクライアントとCompose
のコマンドは、非常に似ています。
ライブデモ
@サクラクラウド
wordpress:
image: wordpress
links:
- db:mysql
ports:
- 8080:80
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: example
WordPress 用の docker-compose.yml 例
参照:https://hub.docker.com/_/wordpress/
Dockerイメージの自動構築には
「Dockerfile」を使いました。
Composeの場合は YAML 形式の
設定ファイルを使います。こちら
は WordPress の「wordpress」
「db」という2つのコンテナを起
動しようとしています。
ubuntu@docker:~/compose/wordpress$ docker-compose up -d
Creating wordpress_db_1
Creating wordpress_wordpress_1
コンテナの起動
ubuntu@docker:~/compose/wordpress$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
wordpress_db_1 /docker-entrypoint.sh mysqld Up 3306/tcp
wordpress_wordpress_1 /entrypoint.sh apache2-for ... Up 0.0.0.0:8080->80/tcp
ubuntu@docker:~/compose/wordpress$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
5434bd0d803b wordpress "/entrypoint.sh apach" 28 seconds ago Up 27
seconds 0.0.0.0:8080->80/tcp wordpress_wordpress_1
9eb92d43fb64 mariadb "/docker-entrypoint.s" 28 seconds ago Up 27
seconds 3306/tcp wordpress_db_1
コンテナの状況を確認
mongo:
image: mongo
command: mongod --smallfiles --oplogSize 128
rocketchat:
image: rocketchat/rocket.chat:latest
environment:
- PORT=3000
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
links:
- mongo:mongo
ports:
- 3000:3000
Rocket.Chat 用の docker-compose.yml 例
参照:https://github.com/RocketChat/Rocket.Chat/blob/master/docker-compose.yml
こちらはSlackのような環境を、
コマンド1つで実行できます。
チャット用のアプリと、MongoDB
を簡単に実行できます。
ubuntu@docker:~/compose/rocketchat$ docker-compose up -d
Creating rocketchat_mongo_1
Creating rocketchat_rocketchat_1
コンテナの起動
ubuntu@docker:~/compose/rocketchat$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------
rocketchat_mongo_1 /entrypoint.sh mongod --sm ... Up 27017/tcp
rocketchat_rocketchat_1 node main.js Up 0.0.0.0:3000->3000/tcp
ubuntu@docker:~/compose/rocketchat$ docker-compose logs
Attaching to rocketchat_rocketchat_1, rocketchat_mongo_1
rocketchat_1 | Updating process.env.MAIL_URL
rocketchat_1 | stop rendering 1625
rocketchat_1 | undefined
rocketchat_1 | undefined
(略)
コンテナの状況を確認
あとはブラウザからポート3000
を開くと、このようにチャット画
面が表示されます。アプリケー
ションの実行環境や、MongoDB
の自動構築だけでなく、Hubot
のセットアップも自動的に行えま
す。Docker Composeがあれば、
複数のコンテナの環境も、簡単
に準備できるのが分かるでしょう。
続きはウェブで…!
http://docs.docker.jp/compose
54
‣ Docker Composeは
複数のサービスを管理
• docker コマンドと互換性
‣ Compose ファイルで設定
• YAML形式
• docker-compose.yml 等
ここまでのまとめ まだ環境構築で
消耗してるの?
Engine
• docker run …
• docker run –d
• docker ps
• docker logs …
• docker stop …
• docker restart
• docker-compose up
• docker-compose up –d
• docker-compose ps
• docker-compose logs
• docker-compose stop
• docker-compose restart
どちらも docker クライアントで操作可能
複数のコンテナも
楽に管理できるね^^
あれ?
複数のサーバの場合は?^^;
ですよねー。。
$ docker run …
$ docker run …
$ docker run …
docker run をマシンごとに切り
替えて実行する必要があります。
$ docker run …
$ docker run …
$ docker run …
でも、Docker Swarmは複数の
Dockerとの通信を仲介できます。
Swarmはスケジューラ
3■■■□ Swarm is service scheduler.
$ docker run …
$ docker run …
$ docker run …
Swarmを通して、どのサーバで
どのコンテナを実行するか検討
し、Dockerにコンテナ起動を命
令します。これをコンテナのスケ
ジューリング、と呼び、Swarmを
スケジューラと呼びます。
サーバ
・Docker クライアント
(Swarm操作)
・Docker Machine
(環境構築)
Swarm Manager
サーバ
swarm-master
Dockerデーモン
サーバ
Swarm Agent
サーバ
swarm-node-01
Dockerデーモン
サーバ
Swarm Agent
サーバ
swarm-node-02
Dockerデーモン
リモート
操作
コンテナの
スケジュール
SwarmはDockerエンジンとAPIの互換性があります。
つまり、dockerやdocker-composeコマンドから操作
可能です。通信先がDockerデーモンではなく、
Swarmマネージャに変わります。そして、配下の
Dockerエンジンとコンテナの情報を一括管理します。
例えると、指揮者(Swarm)が適
切な奏者(エンジン)に特定の曲
(コンテナ)を処理させているよう
なものでしょうか。
コンテナのスケジューリング
Docker API と互換性
ディスカバリ・バックエンドと連携
ネットワーク機能に対応
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: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”
なので、複数台あったとしても
都度クライアントで設定を切り替
える必要はありません。
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
• randam
• constraint
• affinity
• port
• dependency
• health
コンテナの配置を
スケジューリング
docker machine でデプロイ/プロビジョニング
ディスカバリ・バックエンド
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ コンテナコンテナ コンテナコンテナ コンテナコンテナ コンテナ
Spread Strategy
幅広く処理を分散することができる
多くのノードがある場合に有用
ストラテジはコンテナを起動する
ための基本方針です。デフォル
トは、この「スプレッド」です。
1 3 5 7 2 4 6 8コンテナ
起動順番
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
コンテナ コンテナコンテナ コンテナコンテナ コンテナコンテナ コンテナ
binpack Strategy
リソースを有効活用することができる
使われないマシンは増えないが、ダウンすると影響が大きい
docker run –m 512MB
1 2 3 4 5 6 7 8コンテナ
起動順番
もう1つ「ビンパック」という概
念があります。日本語で言うと
箱詰めの意味です。
Swarm Manager
machine
docker engine
(docker daemon)
machine
docker engine
(docker daemon)
ディスカバリ・バックエンド
hosted ( Docker Hub )
docker run swarm create
docker run –d –P ¥
swarm manage token://<token>
token自動発行
docker run -d swam join ¥
--addr=<node ip>:<node port> ¥
token://<token>
1
2
3
4
5
ノード認識・manager認識
Swarmで独特の概念は、Docker
クラスタのIPアドレスとポート番
号を管理する仕組みのことを
「ディスカバリ・バックエンド」と
呼びます。複数あります。
70
ここまでのまとめ
‣ Docker Swarmとは
• コンテナの配置(スケジューリング)を行う
‣ dockerクライアントで操作可能
• docker 互換 API を持つ
• 環境変数で切り替え
‣ Docker Machineと連携が便利
続きはウェブで…!
http://docs.docker.jp/swarm
続きはウェブで…!
http://www.slideshare.net/zembutsu/introduction-to-docker-swarm
三位一体Docker環境
4■■■■ TRINITY
Docker Swarm
分散サーバ上の
コンテナ(サービス)を
スケジューリング
Docker Machine
Docker Engine動作環境や
仮想マシン環境・Swarmクラスタを
自動的に構築・一元管理
Docker Compose
複数のサービスを
一括して管理
Docker
Engine
技術的な捕捉
Dockerの動作ホスト
コンテナ コンテナ
docker0 bridge
eth0 eth0
IP: 172.17.0.2 IP: 172.17.0.2
IP: 172.17.0.1
Docker 1.8 以前のネットワーク
ネットワーク機能強化はDocker
エンジンだけでなく、Swarmや
Composeにも影響を与えます。
Dockerの動作ホスト
コンテナ コンテナ
docker0 bridge
eth0 eth0
IP: 172.17.0.2
IP: 172.18.0.10
IP: 172.17.0.2
IP: 172.18.0.11
IP: 172.17.0.1
任意 bridge
IP: 172.18.0.1
デフォルトのブリッジ・ホスト
ネットワーク
ユーザ定義
ネットワーク
Docker 1.9 からのブリッジ・ネットワーク
eth1eth1
…
複数のブリッジを扱えるように
なりました。
Dockerの動作ホスト
コンテナ コンテナ
docker0 bridge
eth0 eth0
IP: 172.17.0.2
IP: 172.18.0.10
IP: 172.17.0.2
IP: 172.18.0.11
IP: 172.17.0.1
任意 bridge
IP: 172.18.0.1
デフォルトのブリッジ・ホスト
ネットワーク
ユーザ定義
ネットワーク
Docker 1.9 からのブリッジ・ネットワーク
eth1eth1
…
「--link」機能は
docker 0 ブリッジ
のみ対応
「コンテナ名.net名」で
動的な名前解決可能に
(リンク機能の代替)
コンテナ間を接続する「リンク機
能」がレガシー扱いになりました。
オーバレイ・ネットワーク
$ docker network create --driver overlay internal
172.17.0.2 172.17.0.3 172.18.0.5
192.168.0.3192.168.0.1 192.168.0.2
そして複数のサーバ間で同一の
ネットワークを扱えるVXLANにも
対応しました。
swarm-kvs
swarm-node0
(master)
swarm-node1
$ docker …
$ docker-compose …
tcp://<ip>:2376 tcp://<ip>:2376tcp://<ip>:2376
$ docker-machine …
docker docker docker
KVS ( consul )
bridge overlaybridge(docker0) bridgeoverlay
swam
master
コンテナ コンテナ
コンテナ
tcp:8500
eth0: 172.17.0.2 eth0: 172.17.0.2
eth0: 172.17.0.2
eth0: 172.17.0.5
eth0:172.17.0.4
eth1:172.18.0.2 eth1:172.18.0.3
Machine・Swarm・Composeを
組みあわせる環境の下地がよう
やく整ってきました。Compose
も 1.6 からネットワーク機能に
正式対応します。使い始めるな
ら今ではないでしょうか。
Docker API
Swarm
Manager
ディスカバリ・バックエンド
リソース・プール
スケジューラ
fleet
他のスケジューラとの
連携も容易にします。
etcd:
image: gcr.io/google_containers/etcd:2.0.13
container_name: etcd
command: ['/usr/local/bin/etcd', '--bind-addr=0.0.0.0:4001', '--data-dir=/var/etcd/data']
apiserver:
image: gcr.io/google_containers/hyperkube:v1.0.7
container_name: apiserver
ports:
- "8080"
command: ["/hyperkube", "apiserver", "--service-cluster-ip-range=172.17.17.1/24", "--address=0.0.0.0", "--etcd_servers=http://etcd:4001", "--cluster_name=kubernetes", "--v=2"]
controller:
image: gcr.io/google_containers/hyperkube:v1.0.7
command: ["/hyperkube", "controller-manager", "--address=0.0.0.0", "--master=http://apiserver:8080", "--v=2"]
environment:
- "affinity:container==*apiserver*"
scheduler:
image: gcr.io/google_containers/hyperkube:v1.0.7
command: ["/hyperkube", "scheduler", "--address=0.0.0.0", "--master=http://apiserver:8080", "--v=2"]
environment:
- "affinity:container==*apiserver*"
kubelet:
image: gcr.io/google_containers/hyperkube:v1.0.7
command: ['/hyperkube', 'kubelet', '--containerized' , '--api_servers=http://apiserver:8080', '--v=2', '--address=0.0.0.0', '--enable_server']
volumes:
- /:/rootfs:ro
- /sys:/sys:ro
- /dev:/dev
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/:/var/lib/docker:ro
- /var/lib/kubelet/:/var/lib/kubelet:rw
- /var/run:/var/run:rw
privileged: true
# A kubelet shouldn't run alongside another kubelet - One privileged kubelet per node
environment:
- "affinity:container!=*kubelet*"
proxy:
image: gcr.io/google_containers/hyperkube:v1.0.7
command: ['/hyperkube', 'proxy', '--master=http://apiserver:8080', '--v=2']
privileged: true
# A proxy should run alongside another kubelet
environment:
- "affinity:container==*kubelet*"
たとえば、これはKubernetes用
のDocker Composeファイルです。
これさえあれば…
引用:Deploy and Manage Any Cluster Manager with Docker Swarm | Docker Blog
http://blog.docker.com/2015/11/deploy-manage-cluster-docker-swarm/
こんなクラスタ環境も簡単に構築
管理できるようになるでしょう。
環境構築に時間をとられません。
85
まとめ
今だから知りたい Docker Compose/Swarm 入門
‣ Docker Engine と Docker Compose の違い
• 管理対象のコンテナが1つか複数なのか
• ローカルの開発環境なのか、それともデプロイ先なのか
‣ Docker Swarm がスケジューリングを管理
• スケジューリングとは、コンテナをどこに配置するのかを管理
‣ Engine/Swarm/Composeは三位一体
86
Docker Swarm
分散サーバ上の
コンテナ(サービス)を
スケジューリング
Docker Machine
Docker Engine動作環境や
仮想マシン環境・Swarm
クラスタを自動的に構築・一元管理
Docker Compose
複数のサービスを
一括して管理
Docker
Engine
87
何か気になる所はありますか?
今だから知りたい Docker Compose/Swarm 入門
‣ 日本語ドキュメントはこちら
http://docs.docker.jp
88
‣ http://blog.docker.com
• DockerCon 2015 Videos: Day 1 and Day 2 of Keynotes
– http://blog.docker.com/2015/06/dockercon-2015-keynote-videos/
• Announcing Docker 1.7: Multi-host networking, plugins and orchestration updates
– https://blog.docker.com/2015/06/announcing-docker-1-7-multi-host-networking-plugins-and-
orchestration-updates/
• Extending Docker With Plugins
– http://blog.docker.com/2015/06/extending-docker-with-plugins/
• Docker and Broad Industry Coalition Unite to Create Open Container Project
– http://blog.docker.com/2015/06/open-container-project-foundation/
‣ http://docs.docker.jp (日本語ドキュメント)
参考情報
References
背景画像CREDIT:rvika/ PIXTA(ピクスタ)
https://pixta.jp/@prof261092
@zembutsu
Revision 2016.01
Dockerの誤解と疑問に答える
一問一答と技術Tips
最後にオマケ。
話の種にでも…
とし-でんせつ【都市伝説】
• 『友達の友達』など身近なようで実際には顔も名前も分からない人々に起きた出来事として
語られる奇妙な噂話(松山ひろし氏)
• 本当にあったとして語られる『実際には起きていない話』(宇佐話通氏)
• 都市を中心に伝播していく都市伝説には、いくつかの特徴が挙げられる。
1. 過去の事件、事故に由来する
2. 場所に由来する
3. 発祥が不確定、或いは特定しづらい
• 都市伝説の内容はいかにもありそうな話が殆どであり、
教訓めいた要素が盛り込まれている事も多い。
【参考】都市伝説 - Wikipedia
https://ja.wikipedia.org/wiki/都市伝説
"楽して地雷を避けたい"
"都市伝説化"
• 個人的な情報の伝達は「噂」
• 事実が確認されないままに情報が人々の間を伝達
【参考】「噂」も消費するパワーゾーン 渋谷「都市伝説」はこうして生まれる? - シブヤ経済新聞
http://www.shibukei.com/special/69/
1. 導入前の疑問
 Dockerは全てを解決しない(大前提)
2. 利用直後の困りどころ
 ドキュメントを読もう
3. 運用面の課題
 Docker以外の知見も必要
1. Dockerは難しい
2. 今すぐ始めなくてはいけない
3. すべての環境をコンテナにしなくてはいけない
4. 仮想化システムは不要になる
5. 構成管理ツール(Chef,Puppet,Ansible等)は不要になる
6. VagrantがあればDockerは不要だ
7. Dockerは構成管理ツールを使っていれば不要だ
8. クラウド環境は不要になる
9. クラウド上でなければDockerの価値は無い
10. Windows上でLinuxのコンテナが動く
11. Dockerやコンテナが全てを解決してくれる
12. Docker であれば業務効率化できる
13. Docker があればコスト削減できる
14. Docker やコンテナを使うとベンダーロックインされる
15. いまあるシステムを、Dockerで作り直さなくてはいけない
16. システム・インテグレータにはコンテナは向かない
17. 閉じた環境では使えない・使う意味が無い
導入前の疑問
18. 定番のOSが無い。どれを選ぶべきか分からない
19. よく落ちる
20. ネットワークが貧弱だ
21. データの可用性が貧弱
22. データベースが重い、使えない
23. データベースやキャッシュサーバの用途にDockerは向かない
24. Dockerはディスク容量を無駄に消費する
25. コンテナが止まるとログが記録されない
26. Dockerfileのビルドに毎回かなり時間がかかる
27. 複数のコンテナを立ち上げるのは大変だ
28. マシンを再起動すると、コンテナで動かしていたサービスをまた起動する必要があるので面倒
29. Docker Registryは不安定だ。使い物にならない。可用性が無い
30. 英語のドキュメントを読むのが大変だ。日本語の情報が古い
利用直後の困りどころ
31. 本番環境では使えない
32. DockerにはSLAが無いから使えない
33. Dockerは冗長化できない
34. Dockerは(運用チームにとって)学習コストが高い
35. 商用サポートを受けられない
36. 1サーバ1コンテナで運用すべきだ
37. Docker は kubernetes がないと意味が無い
38. kubernetesがあればDockerやDocker Swarmは不要だ
39. Kernelのチューニングができない
40. Dockerはオワコン、これからはrkt
41. Docker ではなく CoreOS を使うべきだ
42. Docker環境は監視ができない
43. Dockerの導入事例がない
44. セキュリティや信頼性に問題がある
45. そもそも、Docker を使う意味が無い
46. Dockerは生産性や効率性に寄与しない
47. 5年後10年後もDockerで大丈夫なのか?
48. Dockerには恨み辛みがある
運用面での疑問や課題
正否の解説は、またどっかで!

More Related Content

What's hot

What's hot (20)

BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
Java11へのマイグレーションガイド ~Apache Hadoopの事例~
Java11へのマイグレーションガイド ~Apache Hadoopの事例~Java11へのマイグレーションガイド ~Apache Hadoopの事例~
Java11へのマイグレーションガイド ~Apache Hadoopの事例~
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
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 発表資料)
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 

Viewers also liked

書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー
Masahiro Hidaka
 

Viewers also liked (7)

とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法とある制作会社の目次索引作成技法
とある制作会社の目次索引作成技法
 
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
書籍向け汎用マークアップのあり方―Re:VIEWの開発を通して
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー書籍制作でReVIEWを使う実践ワークフロー
書籍制作でReVIEWを使う実践ワークフロー
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
 
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 

Similar to 今だからこそ知りたい Docker Compose/Swarm 入門

Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化
hiroyuki nakajima
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
Kazuyuki Mori
 

Similar to 今だからこそ知りたい Docker Compose/Swarm 入門 (20)

【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
ラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaSラズパイ2で動く Docker PaaS
ラズパイ2で動く Docker PaaS
 
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
 
Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Docker handson
Docker handsonDocker handson
Docker handson
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
 
Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 

More from Masahito Zembutsu

More from Masahito Zembutsu (20)

忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
 
自由検証環境提供宣言+Docker Compose V2 GA
自由検証環境提供宣言+Docker Compose V2 GA自由検証環境提供宣言+Docker Compose V2 GA
自由検証環境提供宣言+Docker Compose V2 GA
 
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
 
オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編オンライン発表で気を付けているポイント~姿勢編
オンライン発表で気を付けているポイント~姿勢編
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 
Jitsi Meetとは?
Jitsi Meetとは?Jitsi Meetとは?
Jitsi Meetとは?
 
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
クリスマスに工場(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 Compose/Swarm 入門