SlideShare a Scribd company logo
confd, systemd, fleet을 이용한 
어플리케이션 배포 in CoreOS 
Docker Seoul Meetup #2 / Sep 26, 2014 
! 
by @subicura (김충섭)
service discovery 
haproxy 
load-balancer 
web1 
web application 
web2 
web application
Docker 구동에 최적화된 
가볍고 최소화된 모던 OS 
no package manager (apt/yum)
CoreOS 특징 
A Minimal Operating System Painless Updating 
Docker Containers Clustered By Default
CoreOS 구성 
etcd 
systemd 
fleet
etcd 
A highly-available key value store 
directory 
/services/web/web_1 172.17.8.101:49155 
key value
etcd 
A highly-available key value store 
cluster
Sidekick for service discovery 
APP ! haproxy 
APP ip/port 
set command etcdctl set key value 
etcdctl set /services/web/web_1  
172.17.8.101:49155 
etcdctl set /services/web/web_1  
172.17.8.101:49155  
--ttl 60 
*ttl : Time to live
service discovery 
APP ! haproxy 
APP ip/port 
get command etcdctl get key 
etcdctl get /services/web/web_1 
*recursive : 하위 디렉토리 포함 
watch command etcdctl watch key 
etcdctl watch /services/web  
--recursive
service discovery 
haproxy 
172.17.8.101:49155 
APP1 
APP2 
172.17.8.102:49155 
䡬 변화감지 
䡬 설정파일 수정 
䡬 프로그램 재시작 
= confd 
䡬 설정저장
confd 
lightweight configuration management tool 
䡬 written in Go 
䡬 etcd / Consul support 
䡬 template resource config (TOML) 
䡬 source template 
䡬 not stable (template syntax change) 
䡬 only support polling (not yet)
template resource config 
[template] 
src = "haproxy.conf.tmpl" 
dest = "/etc/haproxy/haproxy.conf" 
owner = "root" 
group = "root" 
mode = "0644" 
keys = [ 
“/services/web", 
] 
reload_cmd = "/usr/sbin/service haproxy restart" 
haproxy.toml
source template 
… 
! 
backend default 
balance {{ getv “/haproxy/balance" }} 
option httpclose 
option forwardfor 
{{ if ls "/services/web" }} 
{{ range gets "/services/web/*" }} 
server {{base .Key}} {{.Value}} check 
{{ end }} 
{{ end }} 
haproxy.cfg.tmpl 
https://github.com/kelseyhightower/confd/blob/0.6.x/docs/templates.md
DEMO
systemd 
System and Service Manager 
CoreOS default init system
sample.service 
[Unit] 
Description=My Service 1 
Requires=docker.service 
After=docker.service 
! 
[Service] 
ExecStart=/usr/bin/docker run --rm --name app1 busybox  
/bin/sh -c "while true; do echo Hello World; sleep 1; done" 
ExecStop=/usr/bin/docker kill app1
fleet 
distributed init system (systemd + etcd)
fleet 
[X-Fleet] fleet-specific Options 
䡬 MachineID - 해당하는 machine에서 실행 
䡬 MachineOf - 특정 서비스가 수행중인 machine에서 실행 
䡬 MachineMetadata - metadata를 가진 machine에서 실행 
䡬 Conflicts - 해당 서비스가 수행중인 machine을 피해서 실행 
*<= 0.8.0 : X-Condition prefix
sidekick pattern 
container를 실행하거나 
container를 중지할때 
container의 정보를 etcd에 저장하는 
sidekick용 service를 활용
sidekick pattern 
web 
application 
container 
web 
application 
sidekick 
service 
기존 컨테이너 수정없이 추가하여 사용가능 
(socket 통신시) 
etcd
/etc/environment 
COREOS_PUBLIC_IPV4=172.17.8.102 
COREOS_PRIVATE_IPV4=172.17.8.102
docker inspect 
"NetworkSettings": { 
"Bridge": "docker0", 
"Gateway": "10.1.42.1", 
"IPAddress": "10.1.0.16", 
"IPPrefixLen": 16, 
"PortMapping": null, 
"Ports": { 
"80/tcp": [ 
{ 
"HostIp": "0.0.0.0", 
"HostPort": "49167" 
} 
] 
} 
} 
docker inspect --format='{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' web1
web.service의 sidekick service 
[Unit] 
Description=Web1 Sidekick Container 
! 
After=web.1.service 
BindsTo=web.1.service 
! 
[Service] 
EnvironmentFile=/etc/environment 
! 
… 
! 
[X-Fleet] 
MachineOf=web.1.service 
! 
! 
! 
# 특정 서비스 실행 후 실행 
# 특정 서비스 종료 시 종료 
! 
! 
# CoreOS cloud 설정파일 
! 
! 
! 
! 
# 특정 서비스가 실행중인 
서버에서 실행
web.service의 sidekick service 
ExecStart=/bin/sh -c  
"SERVICE_PORT=$(docker inspect --format='{{(index 
(index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' web1) &&  
while true; do  
etcdctl set /services/web/web1  
”$COREOS_PRIVATE_IPV4:$SERVICE_PORT" --ttl 60;  
sleep 45;  
done" 
ExecStop=/usr/bin/etcdctl rm /services/web/web1 
ttl을 활용하자
DEMO - ver.1
더 나은 systemd service 파일 
1. %p %i 변수를 사용하자 
web@1.service 
%p %i
더 나은 systemd service 파일 
1. %p %i 변수를 사용하자 
[Unit] 
Description=My Service %i 
Requires=docker.service 
After=docker.service 
! 
[Service] 
ExecStart=/usr/bin/docker run --rm --name %p-%i busybox  
/bin/sh -c "while true; do echo Hello World; sleep 1; done" 
ExecStop=/usr/bin/docker kill %p-%i
더 나은 systemd service 파일 
2. TimeoutStartSec=0 옵션을 추가하자. 
[Service] 
TimeoutStartSec=0 
docker pull이 오래걸릴 경우 
timeout으로 실패하는 걸 방지
더 나은 systemd service 파일 
3. Restart=always 옵션을 추가하자. 
[Service] 
Restart=always 
RestartSec=10s 
실행이 종료될 경우 자동으로 재시작함
더 나은 systemd service 파일 
4. Environment 옵션을 활용하자. 
[Service] 
Environment="SERVICE_NAME=%p_run-%i" 
Environment=“SERVICE_ETCD_KEY=/services/web/%p-%i" 
Environment="SERVICE_IMAGE_URL=subicura/whoami" 
범용적으로 활용가능
더 나은 systemd service 파일 
5. ExecStartPre 옵션을 활용하자. 
[Service] 
ExecStartPre=-/usr/bin/docker kill $SERVICE_NAME 
ExecStartPre=-/usr/bin/docker rm $SERVICE_NAME 
ExecStartPre=/usr/bin/docker pull $SERVICE_IMAGE_URL 
ExecStart=/usr/bin/docker run --rm  
--name $SERVICE_NAME -P $SERVICE_IMAGE_URL 
ExecStop=/usr/bin/docker stop $SERVICE_NAME 
“-“ 옵션은 프로세스가 실패해도 다음을 진행함
DEMO - final
conclusion 
easy & flexible configuration 
type default docker etcd+confd 
방식 설정파일 환경변수 etcd 
특징 
위치를 찾기 어려움 
너무 많은 옵션 
문서화가 필수 
관리 어려움 
중요한 옵션 찾기 쉬움 
파일로 관리 
관리 쉬움 
모든 설정파일을 한곳 
에서 관리함 
동적 설정이 쉬움
conclusion 
service manage 
type default docker fleet 
방식 source repository container service file 
특징 
소스 컴파일 또는 소스 
저장소를 이용함 
관리 어려움 
Dockerfile을 이용함 
관리 쉬움 
중앙에서 관리 가능
THANK YOU 
! 
QUESTION?
code 
䡬 discovery sample - https://github.com/subicura/ 
discovery-fleetd-sample 
䡬 haproxy-confd - https://github.com/subicura/ 
haproxy-confd 
䡬 whoami - https://github.com/subicura/whoami

More Related Content

What's hot (20)

PDF
[1A6]Docker로 보는 서버 운영의 미래
NAVER D2
 
PPTX
Docker 사용가이드 public v0.1
Steve Shim
 
PDF
[1A7]Ansible의이해와활용
NAVER D2
 
PDF
RancherOS Introduction
Remotty
 
PDF
초심자를 위한 도커 소개 및 입문
Daniel Seo
 
PDF
Docker (Compose) 활용 - 개발 환경 구성하기
raccoony
 
PDF
Docker.소개.30 m
Wonchang Song
 
PDF
Devfair kubernetes 101
Daegwon Kim
 
PDF
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XpressEngine
 
PDF
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
PDF
도커 학습과 Boot2Docker
pyrasis
 
PDF
Puppet과 자동화된 시스템 관리
Keon Ahn
 
PDF
Open stack의 vm개념을 통한 docker의 활용
Tae Young Lee
 
PDF
docker-based remote desktop
Hyeong-Kyu Lee
 
PDF
Docker 기반 개발환경 구축 - XE Open seminar #2
XpressEngine
 
PDF
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
KTH, 케이티하이텔
 
PDF
도커 없이 컨테이너 만들기 2편
Sam Kim
 
PDF
DevOps with Docker
Sangcheol Hwang
 
PDF
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XpressEngine
 
PDF
What is chef - korean
SangUk Park
 
[1A6]Docker로 보는 서버 운영의 미래
NAVER D2
 
Docker 사용가이드 public v0.1
Steve Shim
 
[1A7]Ansible의이해와활용
NAVER D2
 
RancherOS Introduction
Remotty
 
초심자를 위한 도커 소개 및 입문
Daniel Seo
 
Docker (Compose) 활용 - 개발 환경 구성하기
raccoony
 
Docker.소개.30 m
Wonchang Song
 
Devfair kubernetes 101
Daegwon Kim
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XpressEngine
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
도커 학습과 Boot2Docker
pyrasis
 
Puppet과 자동화된 시스템 관리
Keon Ahn
 
Open stack의 vm개념을 통한 docker의 활용
Tae Young Lee
 
docker-based remote desktop
Hyeong-Kyu Lee
 
Docker 기반 개발환경 구축 - XE Open seminar #2
XpressEngine
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
KTH, 케이티하이텔
 
도커 없이 컨테이너 만들기 2편
Sam Kim
 
DevOps with Docker
Sangcheol Hwang
 
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XpressEngine
 
What is chef - korean
SangUk Park
 

Viewers also liked (20)

PDF
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
pyrasis
 
PDF
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
NAVER LABS
 
PDF
Enterprise Docker
Lee Ji Eun
 
PDF
Zabbix haproxy configuration_guide
sprdd
 
PPTX
Introduce Google Kubernetes
Yongbok Kim
 
PPTX
Module 1: ConfD Technical Introduction
Tail-f Systems
 
PDF
클라우드 춘추전국시대 서버 개발자 생존기
iFunFactory Inc.
 
PDF
docker_quick_start
Sukjin Yun
 
PDF
정책가이드북
Gori Communication
 
PDF
Docker registry swift_junojunho
Junho Kim
 
PDF
Docker registry swift
Junho Kim
 
PPTX
RZDESK-Docker hackday
Hyeong-Kyu Lee
 
PDF
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
창훈 정
 
PPTX
Pharos
SeongHyun Jeong
 
PDF
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Daegwon Kim
 
PDF
[Nomad connection]docker seminar 15.10.08
Nomad Connection, Inc.
 
PPTX
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Jude Kim
 
PDF
포스테키안 서평공모전 당선작(2016-1)
POSTECH Library
 
PDF
국회입법조사처 발암성물질 관리체계 개선방안(2010)
여성환경연대
 
PPTX
Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!
Seung Heun Noh
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
pyrasis
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
NAVER LABS
 
Enterprise Docker
Lee Ji Eun
 
Zabbix haproxy configuration_guide
sprdd
 
Introduce Google Kubernetes
Yongbok Kim
 
Module 1: ConfD Technical Introduction
Tail-f Systems
 
클라우드 춘추전국시대 서버 개발자 생존기
iFunFactory Inc.
 
docker_quick_start
Sukjin Yun
 
정책가이드북
Gori Communication
 
Docker registry swift_junojunho
Junho Kim
 
Docker registry swift
Junho Kim
 
RZDESK-Docker hackday
Hyeong-Kyu Lee
 
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
창훈 정
 
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Daegwon Kim
 
[Nomad connection]docker seminar 15.10.08
Nomad Connection, Inc.
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Jude Kim
 
포스테키안 서평공모전 당선작(2016-1)
POSTECH Library
 
국회입법조사처 발암성물질 관리체계 개선방안(2010)
여성환경연대
 
Docker 와 Python 으로 아카마이 API 5분만에 사용해보기!
Seung Heun Noh
 
Ad

Similar to Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS (20)

PDF
GDGoC_Backend_GoServer_5주차 발표자료.pdf
dpfls5645
 
PDF
Kafka slideshare
wonyong hwang
 
PDF
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi
 
PDF
GDGoC_KHU_GoServer_week5_신건우,김도영.pdf
dpfls5645
 
PPTX
Docker osc 0508
Open Source Consulting
 
DOCX
PCF Installation Guide
seungdon Choi
 
PDF
[17.01.19] docker introduction (Korean Version)
Ildoo Kim
 
PDF
왕초보를 위한 도커 사용법
GeunCheolYeom
 
PDF
Tensorflow service & Machine Learning
JEEHYUN PAIK
 
PDF
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
Ji-Woong Choi
 
PDF
Introduction to Docker - LOGISPOT
Hosang Jeon
 
PDF
Introduction to Docker - LOGISPOT
LOGISPOT
 
PDF
Internship backend
Yein Sim
 
PDF
KAFKA 3.1.0.pdf
wonyong hwang
 
PDF
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
Chanwoong Kim
 
PDF
도커없이 컨테이너 만들기 1편
Sam Kim
 
PDF
K8s in action02
Sunggon Song
 
PPTX
Docker & Kubernetes 기초 - 최용호
용호 최
 
PDF
[Ansible] Solution Guide V0.4_20181204.pdf
HeeJung Chae
 
PPT
Kubernetes
진혁 박
 
GDGoC_Backend_GoServer_5주차 발표자료.pdf
dpfls5645
 
Kafka slideshare
wonyong hwang
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi
 
GDGoC_KHU_GoServer_week5_신건우,김도영.pdf
dpfls5645
 
Docker osc 0508
Open Source Consulting
 
PCF Installation Guide
seungdon Choi
 
[17.01.19] docker introduction (Korean Version)
Ildoo Kim
 
왕초보를 위한 도커 사용법
GeunCheolYeom
 
Tensorflow service & Machine Learning
JEEHYUN PAIK
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
Ji-Woong Choi
 
Introduction to Docker - LOGISPOT
Hosang Jeon
 
Introduction to Docker - LOGISPOT
LOGISPOT
 
Internship backend
Yein Sim
 
KAFKA 3.1.0.pdf
wonyong hwang
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
Chanwoong Kim
 
도커없이 컨테이너 만들기 1편
Sam Kim
 
K8s in action02
Sunggon Song
 
Docker & Kubernetes 기초 - 최용호
용호 최
 
[Ansible] Solution Guide V0.4_20181204.pdf
HeeJung Chae
 
Kubernetes
진혁 박
 
Ad

More from 충섭 김 (7)

PDF
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
충섭 김
 
PDF
Visual Studio로 Kubernetes 사용하기
충섭 김
 
PDF
Mesos on coreOS
충섭 김
 
PDF
Launching containers with fleet
충섭 김
 
PDF
Automatic docker service announcement with registrator and confd
충섭 김
 
PDF
Very Early Review - Rocket(CoreOS)
충섭 김
 
PDF
CoreOS : 설치부터 컨테이너 배포까지
충섭 김
 
쿠버네티스를 이용한 기능 브랜치별 테스트 서버 만들기 (GitOps CI/CD)
충섭 김
 
Visual Studio로 Kubernetes 사용하기
충섭 김
 
Mesos on coreOS
충섭 김
 
Launching containers with fleet
충섭 김
 
Automatic docker service announcement with registrator and confd
충섭 김
 
Very Early Review - Rocket(CoreOS)
충섭 김
 
CoreOS : 설치부터 컨테이너 배포까지
충섭 김
 

Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS

  • 1. confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS Docker Seoul Meetup #2 / Sep 26, 2014 ! by @subicura (김충섭)
  • 2. service discovery haproxy load-balancer web1 web application web2 web application
  • 3. Docker 구동에 최적화된 가볍고 최소화된 모던 OS no package manager (apt/yum)
  • 4. CoreOS 특징 A Minimal Operating System Painless Updating Docker Containers Clustered By Default
  • 5. CoreOS 구성 etcd systemd fleet
  • 6. etcd A highly-available key value store directory /services/web/web_1 172.17.8.101:49155 key value
  • 7. etcd A highly-available key value store cluster
  • 8. Sidekick for service discovery APP ! haproxy APP ip/port set command etcdctl set key value etcdctl set /services/web/web_1 172.17.8.101:49155 etcdctl set /services/web/web_1 172.17.8.101:49155 --ttl 60 *ttl : Time to live
  • 9. service discovery APP ! haproxy APP ip/port get command etcdctl get key etcdctl get /services/web/web_1 *recursive : 하위 디렉토리 포함 watch command etcdctl watch key etcdctl watch /services/web --recursive
  • 10. service discovery haproxy 172.17.8.101:49155 APP1 APP2 172.17.8.102:49155 䡬 변화감지 䡬 설정파일 수정 䡬 프로그램 재시작 = confd 䡬 설정저장
  • 11. confd lightweight configuration management tool 䡬 written in Go 䡬 etcd / Consul support 䡬 template resource config (TOML) 䡬 source template 䡬 not stable (template syntax change) 䡬 only support polling (not yet)
  • 12. template resource config [template] src = "haproxy.conf.tmpl" dest = "/etc/haproxy/haproxy.conf" owner = "root" group = "root" mode = "0644" keys = [ “/services/web", ] reload_cmd = "/usr/sbin/service haproxy restart" haproxy.toml
  • 13. source template … ! backend default balance {{ getv “/haproxy/balance" }} option httpclose option forwardfor {{ if ls "/services/web" }} {{ range gets "/services/web/*" }} server {{base .Key}} {{.Value}} check {{ end }} {{ end }} haproxy.cfg.tmpl https://github.com/kelseyhightower/confd/blob/0.6.x/docs/templates.md
  • 14. DEMO
  • 15. systemd System and Service Manager CoreOS default init system
  • 16. sample.service [Unit] Description=My Service 1 Requires=docker.service After=docker.service ! [Service] ExecStart=/usr/bin/docker run --rm --name app1 busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done" ExecStop=/usr/bin/docker kill app1
  • 17. fleet distributed init system (systemd + etcd)
  • 18. fleet [X-Fleet] fleet-specific Options 䡬 MachineID - 해당하는 machine에서 실행 䡬 MachineOf - 특정 서비스가 수행중인 machine에서 실행 䡬 MachineMetadata - metadata를 가진 machine에서 실행 䡬 Conflicts - 해당 서비스가 수행중인 machine을 피해서 실행 *<= 0.8.0 : X-Condition prefix
  • 19. sidekick pattern container를 실행하거나 container를 중지할때 container의 정보를 etcd에 저장하는 sidekick용 service를 활용
  • 20. sidekick pattern web application container web application sidekick service 기존 컨테이너 수정없이 추가하여 사용가능 (socket 통신시) etcd
  • 22. docker inspect "NetworkSettings": { "Bridge": "docker0", "Gateway": "10.1.42.1", "IPAddress": "10.1.0.16", "IPPrefixLen": 16, "PortMapping": null, "Ports": { "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "49167" } ] } } docker inspect --format='{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' web1
  • 23. web.service의 sidekick service [Unit] Description=Web1 Sidekick Container ! After=web.1.service BindsTo=web.1.service ! [Service] EnvironmentFile=/etc/environment ! … ! [X-Fleet] MachineOf=web.1.service ! ! ! # 특정 서비스 실행 후 실행 # 특정 서비스 종료 시 종료 ! ! # CoreOS cloud 설정파일 ! ! ! ! # 특정 서비스가 실행중인 서버에서 실행
  • 24. web.service의 sidekick service ExecStart=/bin/sh -c "SERVICE_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' web1) && while true; do etcdctl set /services/web/web1 ”$COREOS_PRIVATE_IPV4:$SERVICE_PORT" --ttl 60; sleep 45; done" ExecStop=/usr/bin/etcdctl rm /services/web/web1 ttl을 활용하자
  • 26. 더 나은 systemd service 파일 1. %p %i 변수를 사용하자 [email protected] %p %i
  • 27. 더 나은 systemd service 파일 1. %p %i 변수를 사용하자 [Unit] Description=My Service %i Requires=docker.service After=docker.service ! [Service] ExecStart=/usr/bin/docker run --rm --name %p-%i busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done" ExecStop=/usr/bin/docker kill %p-%i
  • 28. 더 나은 systemd service 파일 2. TimeoutStartSec=0 옵션을 추가하자. [Service] TimeoutStartSec=0 docker pull이 오래걸릴 경우 timeout으로 실패하는 걸 방지
  • 29. 더 나은 systemd service 파일 3. Restart=always 옵션을 추가하자. [Service] Restart=always RestartSec=10s 실행이 종료될 경우 자동으로 재시작함
  • 30. 더 나은 systemd service 파일 4. Environment 옵션을 활용하자. [Service] Environment="SERVICE_NAME=%p_run-%i" Environment=“SERVICE_ETCD_KEY=/services/web/%p-%i" Environment="SERVICE_IMAGE_URL=subicura/whoami" 범용적으로 활용가능
  • 31. 더 나은 systemd service 파일 5. ExecStartPre 옵션을 활용하자. [Service] ExecStartPre=-/usr/bin/docker kill $SERVICE_NAME ExecStartPre=-/usr/bin/docker rm $SERVICE_NAME ExecStartPre=/usr/bin/docker pull $SERVICE_IMAGE_URL ExecStart=/usr/bin/docker run --rm --name $SERVICE_NAME -P $SERVICE_IMAGE_URL ExecStop=/usr/bin/docker stop $SERVICE_NAME “-“ 옵션은 프로세스가 실패해도 다음을 진행함
  • 33. conclusion easy & flexible configuration type default docker etcd+confd 방식 설정파일 환경변수 etcd 특징 위치를 찾기 어려움 너무 많은 옵션 문서화가 필수 관리 어려움 중요한 옵션 찾기 쉬움 파일로 관리 관리 쉬움 모든 설정파일을 한곳 에서 관리함 동적 설정이 쉬움
  • 34. conclusion service manage type default docker fleet 방식 source repository container service file 특징 소스 컴파일 또는 소스 저장소를 이용함 관리 어려움 Dockerfile을 이용함 관리 쉬움 중앙에서 관리 가능
  • 35. THANK YOU ! QUESTION?
  • 36. code 䡬 discovery sample - https://github.com/subicura/ discovery-fleetd-sample 䡬 haproxy-confd - https://github.com/subicura/ haproxy-confd 䡬 whoami - https://github.com/subicura/whoami