Mais conteúdo relacionado Semelhante a 今だからこそ知りたい Docker Compose/Swarm 入門 (20) Mais de Masahito Zembutsu (20) 今だからこそ知りたい Docker Compose/Swarm 入門1. 今 だ か ら こ そ 知 り た い
Docker Compose/Swarm入門
2016年1月21日(金)
@zembutsu
Technology Evangelist; Creationline, Inc.
Introduction to Docker Compose and Swarm
背景画像CREDIT:スフィア / PIXTA(ピクスタ)
2. 2
スライドで得られる知識
今だから知りたい Docker Compose/Swarm 入門
‣ Docker Engine と Docker Compose の違い
• 管理対象のコンテナが1つか複数なのか
• ローカルの開発環境なのか、それともデプロイ先なのか
‣ Docker Swarm がスケジューリングを管理
• スケジューリングとは、コンテナをどこに配置するのかを管理
‣ Engine/Swarm/Composeは三位一体
11. サーバ
OS のカーネル空間
Docker サーバ
ユ
ー
ザ
プ
ロ
セ
ス
ユ
ー
ザ
プ
ロ
セ
ス
ユーザ空間
コンテナ
Docker
クライアント
"docker" デーモン
TCP:2375,TCP:2376(TSL),UnixSocket
docker run …
Dockerコンテナとはプロセスの
1つ1つを隔離して起動すること。
正確には「隔離」または「分離」
する(英語のisolate)のは、単に
プロセスだけではありません。
ファイルシステムを(chroot風に)
マウントし、ネットワークを持ち、
メモリやCPUリソースの上限を
設定できます。Linuxカーネルの
機能を使います。
あくまでもDockerのホスト側から
は単純にプロセスが起動してい
るだけですし、ファイルシステム
が見えるにすぎません。
もう1つ重要な概念が、Docker
イメージです。Dockerコンテナ
の実行とは、Dockerイメージ上
のプロセスを実行することでもあ
るのです。もしイメージが手許
になければ…?
12. サーバ
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コンテナとして
実行するものでした。
13. • Cgroups
• Namespaces
mount
UTS
IPC
PID
Network
User
そして、そのプロセスの実行を
コンテナを実行していると表現し、
プロセスが停止するとコンテナ
も停止しているものと扱います。
14. 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」として動作
します。
18. 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化できれば
19. 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
環境の再現が簡単。
イメージを複製するだけ。
20. 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と連携し
様々な自動処理の応用も。
25. 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の場合は…
28. OS ( Linux )
物理/仮想サーバ
Docker エンジン
( docker デーモン )
Linux kernel
コンテナ コンテナ コンテナ
リモート
API
docker
クライアント
・docker コマンド
・Kitematic (GUI)
29. 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. 30
ここまでのキーワード
‣ Docker Engine
• docker デーモン(サーバ)
‣ Docker コンテナ
‣ Docker イメージ
• Dockerfile
‣ Docker Machine
‣ Docker Toolbox
Docker(エンジン)とは、
環境をコンテナ化し、
移動・実行する仕組み
を提供。しかも簡単な
コマンドで操作できる。
34. 34
‣ Dockerfile の役割
どのようなイメージにするか指示
• どのベース・イメージを使うのか?
• 何のプログラムをインストールするのか?
• どのようなコマンドを実行するのか
‣ docker build コマンドで構築
docker build –t <レポジトリ:タグ> <Dockerfileのパス>
Dockerfile
docker build
イメージの自動構築
手動だと毎回大変ですし、ミス
も発生しがち。でもDockerfile
を使う自動構築であれば、だれ
でも同じ環境を再現できます。
35. 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のサンプルです。
書き方は簡単なものです。
41. Engine
$ docker run …
$ docker run …
$ docker run …
$ docker run …
毎回 docker run を実行するのは
面倒ですし、間違えそう…
46. 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
のコマンドは、非常に似ています。
48. 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つのコンテナを起
動しようとしています。
49. 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
コンテナの状況を確認
50. 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
を簡単に実行できます。
51. 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
(略)
コンテナの状況を確認
55. 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 クライアントで操作可能
58. $ docker run …
$ docker run …
$ docker run …
docker run をマシンごとに切り
替えて実行する必要があります。
59. $ docker run …
$ docker run …
$ docker run …
でも、Docker Swarmは複数の
Dockerとの通信を仲介できます。
61. $ docker run …
$ docker run …
$ docker run …
Swarmを通して、どのサーバで
どのコンテナを実行するか検討
し、Dockerにコンテナ起動を命
令します。これをコンテナのスケ
ジューリング、と呼び、Swarmを
スケジューラと呼びます。
62. サーバ
・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エンジンとコンテナの情報を一括管理します。
65. 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”
なので、複数台あったとしても
都度クライアントで設定を切り替
える必要はありません。
66. 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 でデプロイ/プロビジョニング
ディスカバリ・バックエンド
68. 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つ「ビンパック」という概
念があります。日本語で言うと
箱詰めの意味です。
69. 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アドレスとポート番
号を管理する仕組みのことを
「ディスカバリ・バックエンド」と
呼びます。複数あります。
78. 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
…
複数のブリッジを扱えるように
なりました。
79. 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名」で
動的な名前解決可能に
(リンク機能の代替)
コンテナ間を接続する「リンク機
能」がレガシー扱いになりました。
80. オーバレイ・ネットワーク
$ 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にも
対応しました。
81. 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 からネットワーク機能に
正式対応します。使い始めるな
ら今ではないでしょうか。
83. 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ファイルです。
これさえあれば…
84. 引用:Deploy and Manage Any Cluster Manager with Docker Swarm | Docker Blog
http://blog.docker.com/2015/11/deploy-manage-cluster-docker-swarm/
こんなクラスタ環境も簡単に構築
管理できるようになるでしょう。
環境構築に時間をとられません。
85. 85
まとめ
今だから知りたい Docker Compose/Swarm 入門
‣ Docker Engine と Docker Compose の違い
• 管理対象のコンテナが1つか複数なのか
• ローカルの開発環境なのか、それともデプロイ先なのか
‣ Docker Swarm がスケジューリングを管理
• スケジューリングとは、コンテナをどこに配置するのかを管理
‣ Engine/Swarm/Composeは三位一体
88. 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
93. 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. 閉じた環境では使えない・使う意味が無い
導入前の疑問
94. 18. 定番のOSが無い。どれを選ぶべきか分からない
19. よく落ちる
20. ネットワークが貧弱だ
21. データの可用性が貧弱
22. データベースが重い、使えない
23. データベースやキャッシュサーバの用途にDockerは向かない
24. Dockerはディスク容量を無駄に消費する
25. コンテナが止まるとログが記録されない
26. Dockerfileのビルドに毎回かなり時間がかかる
27. 複数のコンテナを立ち上げるのは大変だ
28. マシンを再起動すると、コンテナで動かしていたサービスをまた起動する必要があるので面倒
29. Docker Registryは不安定だ。使い物にならない。可用性が無い
30. 英語のドキュメントを読むのが大変だ。日本語の情報が古い
利用直後の困りどころ
95. 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には恨み辛みがある
運用面での疑問や課題
正否の解説は、またどっかで!