-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Hoonmin Kim edited this page Nov 14, 2015
·
1 revision
- About Docker & Linux Container
- 기본 지식 전달
- 너무 길지는 않게. 운영자들이 와닿을 수 있는 장점 위주로.
- Docker As A Tool
- Docker As A Platform
- Tutorial based on Docker 1.9
- networking, swarm, compose, ...
- 사용법 예제(튜토리얼)는 1.9 버전을 기준으로 한다.
- networking 부분은 어려울 수 있으니 가능한한 쉽게 풀어준다. (사용법 위주로)
- compose+swarm+networking이 연동되는 구조를 설명한다.
- Basic Internals
- 도커를 사용해봤던 사용자들을 위한 약간의 내부 구조 설명.
- 도커 파일 시스템 간단 설명(aufs, overlayfs, ...)
- libnetwork 동작 방식 및 주요 플러그인들
- Orchestration
- 현재 많이 사용되고 있는 툴 위주로 설명한다.
- swarm, kubernetes, openshift 3, panamax
$ brew update; brew install Caskroom/cask/dockertoolbox
$ docker run swarm create
d9a8bec868295f81eb28b331c7d8ac8b
$ docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://d9a8bec868295f81eb28b331c7d8ac8b swarm-master
$ docker-machine create -d virtualbox --swarm --swarm-discovery token://d9a8bec868295f81eb28b331c7d8ac8b swarm-node-01
$ eval $(docker-machine env --swarm swarm-master)
$ docker info
Containers: 3
Images: 2
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
swarm-master: 192.168.99.101:2376
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.021 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.1.12-boot2docker, operatingsystem=Boot2Docker 1.9.0 (TCL 6.4); master : 16e4a2a - Tue Nov 3 19:49:22 UTC 2015, provider=virtualbox, storagedriver=aufs
swarm-node-01: 192.168.99.102:2376
└ Containers: 1
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.021 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.1.12-boot2docker, operatingsystem=Boot2Docker 1.9.0 (TCL 6.4); master : 16e4a2a - Tue Nov 3 19:49:22 UTC 2015, provider=virtualbox, storagedriver=aufs
CPUs: 2
Total Memory: 2.043 GiB
Name: 4e4df7e6e722
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41d8b035c87f swarm:latest "/swarm join --advert" 2 minutes ago Up 2 minutes 2375/tcp swarm-node-01/swarm-agent
f43f99ee724a swarm:latest "/swarm join --advert" 3 minutes ago Up 3 minutes 2375/tcp swarm-master/swarm-agent
4e4df7e6e722 swarm:latest "/swarm manage --tlsv" 3 minutes ago Up 3 minutes 192.168.99.101:3376->3376/tcp, 2375/tcp swarm-master/swarm-agent-master
https://blog.docker.com/2015/11/docker-multi-host-networking-ga/
- Prepare machines
#!/bin/bash
set -e
# Docker Machine Setup
docker-machine create \
-d virtualbox \
consul
docker $(docker-machine config consul) run -d \
-p "8500:8500" \
-h "consul" \
progrium/consul -server -bootstrap
docker-machine create \
-d virtualbox \
--virtualbox-disk-size 50000 \
--swarm \
--swarm-master \
--swarm-discovery="consul://$(docker-machine ip consul):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip consul):8500" \
--engine-opt="cluster-advertise=eth1:0" \
swarm-master
docker-machine create \
-d virtualbox \
--virtualbox-disk-size 50000 \
--swarm \
--swarm-discovery="consul://$(docker-machine ip consul):8500" \
--engine-opt="cluster-store=consul://$(docker-machine ip consul):8500" \
--engine-opt="cluster-advertise=eth1:0" \
swarm-node-01
- Overlay
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
consul - virtualbox Running tcp://192.168.99.100:2376
swarm-master * virtualbox Running tcp://192.168.99.101:2376 swarm-master (master)
swarm-node-01 - virtualbox Running tcp://192.168.99.102:2376 swarm-master
$ eval $(docker-machine env --swarm swarm-master)
$ docker network ls
NETWORK ID NAME DRIVER
3b009dc4d3ea swarm-master/bridge bridge
0417f40c6b3f swarm-master/none null
a123efc69b60 swarm-master/host host
9276217799fe swarm-node-01/host host
c0fa365c5866 swarm-node-01/bridge bridge
05c3aa7e6356 swarm-node-01/none null
$ docker network create -d overlay myapp
2779c94d4375ebd8037062c90dde44e72cc35a93568c7cc893be92ae326cf1f5
$ docker network ls
NETWORK ID NAME DRIVER
2779c94d4375 myapp overlay
a123efc69b60 swarm-master/host host
3b009dc4d3ea swarm-master/bridge bridge
0417f40c6b3f swarm-master/none null
c0fa365c5866 swarm-node-01/bridge bridge
05c3aa7e6356 swarm-node-01/none null
9276217799fe swarm-node-01/host host
$ docker run -d --name=web --net=myapp --env="constraint:node==swarm-master" nginx
$ docker run -it --rm --net=myapp --env="constraint:node==swarm-node-01" busybox wget -qO- http://web
- Compose
$ cat docker-compose.yml
web:
image: bfirsh/compose-mongodb-demo
environment:
- "MONGO_HOST=xecon2015dockerforoperators_mongo_1"
- "constraint:node==swarm-node-01"
ports:
- "80:5000"
mongo:
image: mongo
$ docker-compose --x-networking --x-network-driver overlay up -d
$ docker network ls
NETWORK ID NAME DRIVER
9afd19a2d40d swarm-master/docker_gwbridge bridge
9276217799fe swarm-node-01/host host
86c89335a85d xecon2015dockerforoperators overlay
a123efc69b60 swarm-master/host host
0417f40c6b3f swarm-master/none null
83c3fc47f6da swarm-node-01/docker_gwbridge bridge
c0fa365c5866 swarm-node-01/bridge bridge
05c3aa7e6356 swarm-node-01/none null
2779c94d4375 myapp overlay
3b009dc4d3ea swarm-master/bridge bridge
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b2504488855 mongo "/entrypoint.sh mongo" About a minute ago Up About a minute 27017/tcp swarm-node-01/xecon2015dockerforoperators_mongo_1
954225b92f5f bfirsh/compose-mongodb-demo "/bin/sh -c 'python a" About a minute ago Up About a minute 192.168.99.102:80->5000/tcp swarm-node-01/xecon2015dockerforoperators_web_1
$ curl http://`docker-machine ip swarm-node-01`
<h1>This page has been visited 1 times!</h1>
- Network Plugin: Calico
http://www.infoq.com/news/2015/08/project-calico-v1-released
http://www.slideshare.net/packethost/packet-calico-keynote-47122317
$ docker run -d -p 2379:2379 --env="constraint:node==swarm-master" --env="ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379" --env="ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379" --name etcd quay.io/coreos/etcd:v2.2.1
# 모든 장비에서 calico agent 설정
$ docker-machine ssh swarm-master
$ wget https://github.com/projectcalico/calico-docker/releases/download/v0.10.0/calicoctl
$ chmod +x calicoctl
$ sudo ETCD_AUTHORITY=192.168.99.101:2379 ./calicoctl node --libnetwork
- Docker In Production