Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
저희 팀에서 Docker Swarm을 처음 도입한 계기는 사실 배포 자동화 프로세스 구축하고 싶었기 때문이었습니다.
처음엔 서버가 하나 뿐이여서 컨테이너 오케스트레이션의 묘미를 느끼지 못했는데 관리자, 푸시, 이벤트, 테스트 등등 여러 서버가 붙으면서 여러개의 서버를 관리해야 했는데
미리 구축해놓은 Docker Swarm이 많은 편의 기능을 제공하고 있어서 여러개의 서버를 관리하는 것도 개발자가 부담없이 할 수 있게 되었습니다.
이 슬라이드는 제가 서버를 구축하는 과정에서 겪었던 어려움들을 여러분은 겪지 않길 바라며 제작하게 되었습니다.
만약 이 슬라이드를 보시는 분이 Docker및 Docker Swarm을 처음 접해보시는 거라면 이 자료가 좋은 가이드가 될 수 있을 것 같습니다.
감사합니다.
이도현 드림
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
저희 팀에서 Docker Swarm을 처음 도입한 계기는 사실 배포 자동화 프로세스 구축하고 싶었기 때문이었습니다.
처음엔 서버가 하나 뿐이여서 컨테이너 오케스트레이션의 묘미를 느끼지 못했는데 관리자, 푸시, 이벤트, 테스트 등등 여러 서버가 붙으면서 여러개의 서버를 관리해야 했는데
미리 구축해놓은 Docker Swarm이 많은 편의 기능을 제공하고 있어서 여러개의 서버를 관리하는 것도 개발자가 부담없이 할 수 있게 되었습니다.
이 슬라이드는 제가 서버를 구축하는 과정에서 겪었던 어려움들을 여러분은 겪지 않길 바라며 제작하게 되었습니다.
만약 이 슬라이드를 보시는 분이 Docker및 Docker Swarm을 처음 접해보시는 거라면 이 자료가 좋은 가이드가 될 수 있을 것 같습니다.
감사합니다.
이도현 드림
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
도커 무작정 따라하기
- 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커의 기본 개념부터 설치와 사용 방법까지 설명합니다.
더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
2016 아이펀팩토리 Dev Day 발표 자료
강연 제목 : Docker 로 Linux 없이 Linux 환경에서 개발하기
발표자 : 김진욱 CTO
<2016>
- 일시 : 2016년 9월 28 수요일 12:00~14:20
- 장소 : 넥슨 판교 사옥 지하 1층 교육실
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Docker Seoul Meetup #2에서 발표한 자료입니다.
CoreOS에서 confd와 sidekick service를 이용한 서비스 배포에 대한 내용입니다.
http://www.youtube.com/watch?v=5ixJCM6pAcg
영상과 함께 보시면 더 좋습니다 :)
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
도커 무작정 따라하기
- 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커의 기본 개념부터 설치와 사용 방법까지 설명합니다.
더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
2016 아이펀팩토리 Dev Day 발표 자료
강연 제목 : Docker 로 Linux 없이 Linux 환경에서 개발하기
발표자 : 김진욱 CTO
<2016>
- 일시 : 2016년 9월 28 수요일 12:00~14:20
- 장소 : 넥슨 판교 사옥 지하 1층 교육실
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Docker Seoul Meetup #2에서 발표한 자료입니다.
CoreOS에서 confd와 sidekick service를 이용한 서비스 배포에 대한 내용입니다.
http://www.youtube.com/watch?v=5ixJCM6pAcg
영상과 함께 보시면 더 좋습니다 :)
01 Docker란 무엇이며, 왜 필요한가?
02 Docker의 핵심 개념과 용어
03 Do(ckerize) it yourself
Docker란?
애플리케이션을 개발(developing)하고, 배포(shipping)하고, 실행(running)하기 위한 Open Platform
OS-level Virtualization(Linux Container)를 제공하기 위한 구현 제품.
애플리케이션과 인프라스트럭처의 의존관계를 분리할 수 있는 방법
가상머신(Virtual Machine)의 단점을 극복할 수 있는 리눅스 컨테이너 기술의 구현
Docker Client : 명령어를 통해 Docker Daemon에 API를 호출하여 Docker Image와 Container를 관리할 수 있는 프로그램
Docker Daemon : Docker API 요청을 수신하여 Docker Object(Image, Container, Network, Volue 등)를 관리할 수 있는 프로세스
Docker Registry : Docker Image를 저장하고 관리하는 공간. Public Registry(ex. Docker Hub)와 Private Registry가 있음.
Dockerfile : Docker Image를 빌드하기 위한 정보 및 명령어가 작성된 파일 (Docker Image를 생성하는 방법 중 하나)
Docker Image : Dockerfile, Docker Registry, 또는 다른 Docker Image로부터 생성된 컨테이너 생성을 위한 Read-only Template
Docker Container : Docker Image 위에서 실행된 특수한 형태의 격리된 프로세스
[17.01.19] docker introduction (Korean Version)Ildoo Kim
Docker(도커) 소개를 위해 사용했던 자료입니다.
제가 속한 개발팀에서는 도커 컨테이너를 기반으로 개발부터 배포까지 가능한 환경 및 인프라를 구축하여 개발팀에서 대다수의 오퍼레이션까지 관여하면서 Devops 형태로 운영합니다.
Docker(도커)를 처음 사용하거나 개념적으로 익숙하지 않은 초보를 위해 만든 자료입니다.
슬라이드에서 사용된 스크립트/코드는 아래에 있습니다.
https://github.com/ildoonet/docker_introduction
----
김일두, Software Engineer @ Kakao
Github : https://github.com/ildoonet
Linkedin : https://www.linkedin.com/in/ildoo-kim-56962034/
01 Docker란 무엇이며, 왜 필요한가?
02 Docker의 핵심 개념과 용어
03 Do(ckerize) it yourself
Docker란?
애플리케이션을 개발(developing)하고, 배포(shipping)하고, 실행(running)하기 위한 Open Platform
OS-level Virtualization(Linux Container)를 제공하기 위한 구현 제품.
애플리케이션과 인프라스트럭처의 의존관계를 분리할 수 있는 방법
가상머신(Virtual Machine)의 단점을 극복할 수 있는 리눅스 컨테이너 기술의 구현
Docker Client : 명령어를 통해 Docker Daemon에 API를 호출하여 Docker Image와 Container를 관리할 수 있는 프로그램
Docker Daemon : Docker API 요청을 수신하여 Docker Object(Image, Container, Network, Volue 등)를 관리할 수 있는 프로세스
Docker Registry : Docker Image를 저장하고 관리하는 공간. Public Registry(ex. Docker Hub)와 Private Registry가 있음.
Dockerfile : Docker Image를 빌드하기 위한 정보 및 명령어가 작성된 파일 (Docker Image를 생성하는 방법 중 하나)
Docker Image : Dockerfile, Docker Registry, 또는 다른 Docker Image로부터 생성된 컨테이너 생성을 위한 Read-only Template
Docker Container : Docker Image 위에서 실행된 특수한 형태의 격리된 프로세스
도커의 근간 기술을 이해하기 위해 도커의 역사를 살펴보고, 클러스터 환경으로 컨테이너 환경을 운영하는 쿠버네티스에 대한 핵심 개념에 대해 알아봅니다. 마지막으로 쿠버네티스 클러스터를 손쉽게 생성하고 관리할 수 있는 네이버 클라우드 플랫폼 Kubernetes service를 데모를 통해 소개해드립니다 | To understand Docker's underlying technology, we look at Docker's history and learn about the core concepts of Kubernetis, which operates a container environment in a cluster environment. Lastly, I will introduce Naver's cloud platform Kubernetes service, which allows you to easily create and manage Kubernetes clusters, through a demo.
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
1.
2. 누구세요?
• 김훈민. (동생 이름이 정음)
• 결혼 3년차 남편이자 두 아이의 아빠.
• ~2011 웹 개발.
• ~2014 성능팀, 오픈소스 메모리 캐시인 Arcus 개발/운영.
• ~2015 빌드 배포 시스템인 nDeploy팀 소속.
3. 다룰 내용
• Docker & Linux Container
• Tutorial
• Container Orchestration
4. 지옥에서 온 테이블
node.js
웹 서버
Java
API 서버
MySQL
서버
메시지 큐
서버
개발자
PC
동료
PC
팀
개발 장비
QA
개발 장비
스테이징
장비
리얼
장비
* Table based on http://www.slideshare.net/dotCloud/docker-intro-november
5. 지옥에서 온 테이블
node.js
웹 서버
Java
API 서버
MySQL
서버
메시지 큐
서버
개발자
PC
동료
PC
팀
개발 장비
QA
개발 장비
스테이징
장비
리얼
장비
* Table based on http://www.slideshare.net/dotCloud/docker-intro-november
11. 각 플랫폼, 모듈을 어디에서든 실행할 수 있는
코드를 위한 컨테이너가 있으면 되겠네요!
12. 리눅스 컨테이너
• 이미 오래 전 부터 LinuX Container 라는 기능이 있었습니다.
• 호스트 환경과 독립된 리눅스 시스템(컨테이너)를 실행하기 위한
시스템 레벨의 가상화 방법. (Hypervisor 없는 VM?)
• cgroup
• namespace
• chroot
• Linux Security Modules(LSM), Mandatory Access Control(MAC)
13. cgroup
• 2006년 구글에서 개발하여 2.6.24 커널에 포함.
• 각종 시스템 리소스에 대한 접근 제어와 리소스 제약을 담당.
• 각 리소스는 subsystem이라 부릅니다.
• /sys/fs/cgroup 디렉토리에서 각 subsystem을 확인할 수 있음.
• 만약 /sys 디렉토리가 없다면:
• sudo mount -t sysfs sysfs /sys
15. namespace
• 글로벌 리소스에 대한 프로세스 수준의 격리(isolation)를 제공.
• MNT (마운트 지점, 파일시스템)
• PID (프로세스)
• NET (NIC, 라우팅)
• IPC (System V IPC 리소스)
• UTS (호스트/도메인 이름)
• USER (UID + GID)
• 격리된 프로세스는 자기 자신이 시스템에서 유일하다고 착각한다: /proc/1
https://www.kernel.org/doc/Documentation/namespaces/
16. chroot
• 프로세스의 root 디렉토리를 변경 할 수 있다.
• chroot
• parent 디렉토리를 유지하면서 root 디렉토리를 마운트.
• pivot_root
• parent 디렉토리 없이 root 디렉토리를 마운트.
23. Docker
• 도커 Daemon을 통해 리눅스 컨테이너를 실행하면:
• 도커 이미지를 이용하여 새로운 컨테이너를 위한 파일 시스템을
구성합니다.
• 컨테이너를 위한 네트워킹 설정을 변경해줍니다.
• 격리된 컨테이너 프로세스를 실행합니다.
24.
25. Docker Toolbox
• 윈도우와 맥에 도커 개발 환경을 꾸며 줍니다.
• https://www.docker.com/docker-toolbox
• 맥에서는 homebrew로 설치 가능.
• $ brew install Caskroom/cask/dockertoolbox
26. Docker Toolbox
• docker: 도커 클라이언트.
• docker-machine: 도커 서버를 실행할 수 있는 VM 관리.
• docker-compose: 여러 개의 도커 컨테이너를 실행.
• kitematic: 개발 장비의 도커 컨테이너를 쉽게 관리할 수 있는 앱.
• virtualbox: VM
27. docker-machine
• $ docker-machine create -d virtualbox dev
• dev라는 이름을 가진 virtualbox 도커 VM을 생성.
• $ docker-machine ls
• 생성된 도커 VM 리스트를 확인.
• $ docker-machine ssh dev
• dev VM에 접속.
28. docker-machine
• $ docker-machine env dev
• dev 도커 VM을 사용할 수 있는 환경변수 설정을 확인한다.
• $ eval $(docker-machine env dev)
• 현재 쉘에서 dev 도커 VM을 사용할 수 있도록 환경변수를 설정.
• $ docker-machine stop dev
• $ docker-machine rm dev
29. docker
• $ docker run -it --rm busybox top
• -it : 실행된 컨테이너와 상호작용 할 수 있도록 설정.
• --rm : 컨테이너 실행이 끝나면 삭제.
• busybox : 실행할 컨테이너.
• top : 컨테이너가 실행할 명령의 옵션.
42. Link
• 같은 호스트에 있는 컨테이너를 연결하여 호스트에 포트를 노출시
키지 않아도 직접 통신할 수 있게 해줍니다.
• docker run -d --name db -p 3306:3306 -e
MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=xe -e
MYSQL_USER=xe -e MYSQL_PASSWORD=xe mariadb
• docker run -d -p 80:80 --link db:db hoonmin/xecore:1.8.14
• --link <name>:<alias>
43. 두 컨테이너를 함께 실행할 수 없나요?
XE Core
MariaDB
:80docker-compose XE Core :80
44. docker-compose
• 여러 개의 도커 컨테이너를 묶어 함께 실행할 수 있습니다.
• docker-compose.yml 파일을 정의해야 합니다.
• docker-compose up -d
• up : 정의된 컨테이너를 실행.
• -d : 백그라운드로 실행.
docker-compose.yml
xecore:
image: hoonmin/xecore:1.8.14
ports:
- 80:80
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: xe
MYSQL_USER: xe
MYSQL_PASSWORD: xe
ports:
- 3306:3306
45. 도커 호스트가 여러 개
XE Core :80XE Core :80
XE Core
MariaDB
:80XE Core :80
46. docker-swarm
• 여러 개의 도커 호스트를 마치 하나인
것 처럼 묶어주는 서비스.
• master는 node를 관리하며 도커 API
와 동일한 API를 제공.
Master
Node
48. swarm을 이용하여 배포
• eval $(docker-machine env --swarm swarm-master)
• swarm-master 도커 VM 환경에서 swarm API를 사용.
• docker-compose up -d
• 도커 컨테이너가 swarm-master, swarm-node-01 두 대의 서
버에 적절히 배분되어 실행됩니다.
• docker-compose scale xecore=2
• xecore 컨테이너의 개수를 2개로 늘립니다.
51. docker networking
• libnetwork
• 도커의 네트워크 관련 코드가 들어 있는 라이브러리.
• 도커 1.7 부터 실험적으로 포함되었다가 1.9 버전에서 정식 출시.
• docker network ls
• docker network create -d overlay my_net
52. built-in overlay network
• overlay network
• 같은 L2 (MAC) 네트워크에 연결되어 있지 않은 서버들이 서로
L2 통신을 할 수 있도록, 터널링 등의 기술을 활용.
53. networking을 위한 도커 VM
• 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 virtual box
• --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
54. 다시 docker-compose
• 도커 1.9 부터 docker-compose와 networking이 연동됩니다.
• docker-compose --x-networking --x-network-
driver=overlay up -d
• --x-networking : networking 실험 기능을 활성화 합니다.
• - -x-network-driver : networking 드라이버를 선택합니다.
• null, host, bridge, overlay, calico, …
65. Timezone
• 도커 컨테이너가 실행될 때 timezone이 디폴트로 맞춰집니다.
• 그런데 이 timezone을 설정할 좋은 방법이 아직은 없습니다.
• https://github.com/docker/docker/issues/12084
• -v /etc/localtime:/etc/localtime로 볼륨 설정.
• ENTRYPOINT에 별도의 스크립트를 둬서 런타임에 설정.
66. Private Registry
• docker run -d -p 5000:5000 registry:2.2
• 예전 v1 버전은 가능하면 사용하지 마세요.
• 꼭 필요하다면 검색기능 OFF
• LDAP 등의 인증을 붙이려면 별도의 인증 서버를 사용해야 합니다.
• https://github.com/cesanta/docker_auth
• UI가 필요한 경우:
• https://github.com/SUSE/Portus
67. 스토리지 드라이버
• DeviceMapper
• 스토리지 pool 크기에 주의. (100GB default)
• AUFS, Overlay (추천)
• 비슷한 성향의 파일시스템. Overlay는 3.18 커널부터 지원.
• 파일 개수가 많아지면 느려지거나 쓰기가 불가능해질 수 있다.
• overlay는 inode 개수를 모니터링 해주어야 한다. (df -ih)
• BTRFS
68. docker-proxy
• 포트를 publish 하면 다음과 같이 두 개의 장치가 마련됩니다.
• iptables DNAT rule, docker-proxy 프로세스
• 왜 뜨는가?
• 도커 호스트에서 localhost:<published_port>로 접근하기 위함.
• https://github.com/docker/docker/issues/8356
• 없애는 방법 (2.6.x 커널 제외)
• docker daemon --userland-proxy=false ..