SlideShare una empresa de Scribd logo
1 de 68
Descargar para leer sin conexión
누구세요?
• 김훈민. (동생 이름이 정음)
• 결혼 3년차 남편이자 두 아이의 아빠.
• ~2011 웹 개발.
• ~2014 성능팀, 오픈소스 메모리 캐시인 Arcus 개발/운영.
• ~2015 빌드 배포 시스템인 nDeploy팀 소속.
다룰 내용
• Docker & Linux Container
• Tutorial
• Container Orchestration
지옥에서 온 테이블
node.js
웹 서버
Java
API 서버
MySQL
서버
메시지 큐
서버
개발자
PC
동료
PC
팀
개발 장비
QA
개발 장비
스테이징
장비
리얼
장비
* Table based on http://www.slideshare.net/dotCloud/docker-intro-november
지옥에서 온 테이블
node.js
웹 서버
Java
API 서버
MySQL
서버
메시지 큐
서버
개발자
PC
동료
PC
팀
개발 장비
QA
개발 장비
스테이징
장비
리얼
장비
* Table based on http://www.slideshare.net/dotCloud/docker-intro-november
공용 장비에 손을 대는 순간...
가상 머신으로 해결!?
• 개발 및 배포 환경을 어느 정도 표준화 할 수 있습니다.
• 하지만 최초 설정 이후에는 마찬가지 비용이 발생합니다.
• 시스템 설정 변경
• 시스템 라이브러리 업그레이드
• …
H/W
OS
Hypervisor
VM VM
지옥에서 온 테이블 2
핸드폰
시계
옷장
피아노
기차 물류창고 지게차 항구 배 트럭
http://aceno1.co.kr/box/box1
표준화된 컨테이너
핸드폰
시계
옷장
피아노
기차 물류창고 지게차 항구 배 트럭
각 플랫폼, 모듈을 어디에서든 실행할 수 있는
코드를 위한 컨테이너가 있으면 되겠네요!
리눅스 컨테이너
• 이미 오래 전 부터 LinuX Container 라는 기능이 있었습니다.
• 호스트 환경과 독립된 리눅스 시스템(컨테이너)를 실행하기 위한
시스템 레벨의 가상화 방법. (Hypervisor 없는 VM?)
• cgroup
• namespace
• chroot
• Linux Security Modules(LSM), Mandatory Access Control(MAC)
cgroup
• 2006년 구글에서 개발하여 2.6.24 커널에 포함.
• 각종 시스템 리소스에 대한 접근 제어와 리소스 제약을 담당.
• 각 리소스는 subsystem이라 부릅니다.
• /sys/fs/cgroup 디렉토리에서 각 subsystem을 확인할 수 있음.
• 만약 /sys 디렉토리가 없다면:
• sudo mount -t sysfs sysfs /sys
cgroup subsystem
• /sys/fs/cgroup
• /cpu, /cpuacct, /cpuset
• /memory
• /blkio
• /devices
• /freezer, /perf_event
https://www.kernel.org/doc/Documentation/cgroups/
namespace
• 글로벌 리소스에 대한 프로세스 수준의 격리(isolation)를 제공.
• MNT (마운트 지점, 파일시스템)
• PID (프로세스)
• NET (NIC, 라우팅)
• IPC (System V IPC 리소스)
• UTS (호스트/도메인 이름)
• USER (UID + GID)
• 격리된 프로세스는 자기 자신이 시스템에서 유일하다고 착각한다: /proc/1
https://www.kernel.org/doc/Documentation/namespaces/
chroot
• 프로세스의 root 디렉토리를 변경 할 수 있다.
• chroot
• parent 디렉토리를 유지하면서 root 디렉토리를 마운트.
• pivot_root
• parent 디렉토리 없이 root 디렉토리를 마운트.
https://access.redhat.com/articles/1353593
리눅스 컨테이너
• 어플리케이션을 격리(isolate)하고 패키징(package) 합니다.
• 물리/VM 장비의 여러 요소들을 격리해줍니다.
• 리소스 (CPU, 메모리, I/O 등) — cgroup
• 네임스페이스 (PID, USER, NET 등) — namespace
• 파일시스템 — chroot
* http://www.darkroastedblend.com/2006/12/biggest-ships-in-world-part-3.html
리눅스 컨테이너를
생성하고 실행하며 배포하는 방식을
대중화 한 플랫폼.
Docker
• Docker
• Daemon (libcontainer+libnetwork)
• Client
• Docker Hub: 컨테이너를 유통하는 서비스.
• …
Docker
• 도커 Daemon을 통해 리눅스 컨테이너를 실행하면:
• 도커 이미지를 이용하여 새로운 컨테이너를 위한 파일 시스템을
구성합니다.
• 컨테이너를 위한 네트워킹 설정을 변경해줍니다.
• 격리된 컨테이너 프로세스를 실행합니다.
Docker Toolbox
• 윈도우와 맥에 도커 개발 환경을 꾸며 줍니다.
• https://www.docker.com/docker-toolbox
• 맥에서는 homebrew로 설치 가능.
• $ brew install Caskroom/cask/dockertoolbox
Docker Toolbox
• docker: 도커 클라이언트.
• docker-machine: 도커 서버를 실행할 수 있는 VM 관리.
• docker-compose: 여러 개의 도커 컨테이너를 실행.
• kitematic: 개발 장비의 도커 컨테이너를 쉽게 관리할 수 있는 앱.
• virtualbox: VM
docker-machine
• $ docker-machine create -d virtualbox dev
• dev라는 이름을 가진 virtualbox 도커 VM을 생성.
• $ docker-machine ls
• 생성된 도커 VM 리스트를 확인.
• $ docker-machine ssh dev
• dev VM에 접속.
docker-machine
• $ docker-machine env dev
• dev 도커 VM을 사용할 수 있는 환경변수 설정을 확인한다.
• $ eval $(docker-machine env dev)
• 현재 쉘에서 dev 도커 VM을 사용할 수 있도록 환경변수를 설정.
• $ docker-machine stop dev
• $ docker-machine rm dev
docker
• $ docker run -it --rm busybox top
• -it : 실행된 컨테이너와 상호작용 할 수 있도록 설정.
• --rm : 컨테이너 실행이 끝나면 삭제.
• busybox : 실행할 컨테이너.
• top : 컨테이너가 실행할 명령의 옵션.
docker
• $ docker ps
• $ docker logs <container_id>
• $ docker rm <container_id>
• $ docker rmi <image_id>
• $ docker exec <container_id> <command>
XpressEngine
이렇게 구성하려 합니다
XE Core
MariaDB
:80
:3306
https://github.com/hoonmin/xecore
Docker Image
• <네임스페이스>/<이름>:<태그>
• mariadb:latest
• php:5.6-apache
• hoonmin/xecore:1.8.14
• hoonmin/xecore:latest
Dockerfile
FROM php:5.6-apache
RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev 
&& rm -rf /var/lib/apt/lists/*
# 필요한 PHP extension을 설치 합니다.
RUN docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr 
&& docker-php-ext-install gd
RUN docker-php-ext-install mysqli
# XE Core를 다운로드 합니다.
RUN curl -o /var/www/xe.tar.gz 
-OL https://github.com/xpressengine/xe-core/releases/download/1.8.14/xe.1.8.14.tar.gz
# 호스트의 저장소와 연결할 수 있는 볼륨을 정의합니다.
VOLUME /var/www/html
WORKDIR /var/www/html
# 실행 커맨드
CMD ["apache2-foreground"]
Docker Image
• docker build -t hoonmin/xecore:1.8.14 .
• -t : 빌드 할 이미지 이름
• hoonmin : 이미지의 네임스페이스 (그룹)
• xecore : 이미지 이름
• 1.8.14 : 이미지의 태그
• . : Dockerfile이 위치한 디렉토리
Docker Container: xecore
• docker run -it --rm hoonmin/xecore:1.8.14
• -it : foreground로 동작시키는 경우, 쉘에서 상호작용 가능하게.
• --rm : 실행이 끝난 컨테이너를 삭제합니다.
• hoonmin/xecore:1.8.14 : 이미지 이름
• docker ps
• 실행 중인 도커 컨테이너의 리스트를 확인합니다.
Docker Container: mariadb
• docker run -d -e MYSQL_ROOT_PASSWORD=root --name db
--p 3306:3306 mariadb
• -d : background 프로세스로 동작시킵니다.
• -e : 컨테이너 안에서 사용될 환경 변수를 설정합니다.
• --name : 컨테이너의 이름을 지정합니다.
• -p 3306:3306 : 컨테이너가 노출한 포트를 호스트의 포트와 매
핑합니다. <host_port>:<container_port>
Docker Hub
• https://hub.docker.com/
• 회원 가입이 필요합니다.
• docker login
• docker push hoonmin/xecore:1.8.14
DB를 밖으로 노출하기 싫어요
XE Core
MariaDB
:80
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>
두 컨테이너를 함께 실행할 수 없나요?
XE Core
MariaDB
:80docker-compose XE Core :80
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
도커 호스트가 여러 개
XE Core :80XE Core :80
XE Core
MariaDB
:80XE Core :80
docker-swarm
• 여러 개의 도커 호스트를 마치 하나인
것 처럼 묶어주는 서비스.
• master는 node를 관리하며 도커 API
와 동일한 API를 제공.
Master
Node
docker-swarm 설치
• docker run swarm create : 토큰값 확인
• 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
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개로 늘립니다.
DB 연결이 안되는데요…?
XE Core :80XE Core :80
XE Core
MariaDB
:80XE Core :80
docker overlay networking
XE Core :80XE Core :80
XE Core
MariaDB
:80XE Core :80
overlay
my_net
docker networking
• libnetwork
• 도커의 네트워크 관련 코드가 들어 있는 라이브러리.
• 도커 1.7 부터 실험적으로 포함되었다가 1.9 버전에서 정식 출시.
• docker network ls
• docker network create -d overlay my_net
built-in overlay network
• overlay network
• 같은 L2 (MAC) 네트워크에 연결되어 있지 않은 서버들이 서로
L2 통신을 할 수 있도록, 터널링 등의 기술을 활용.
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
다시 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, …
Docker Networking
컨테이너 하나
docker0
(10.1.15.1/24)
veth2c8f4f4
(10.1.15.2/24)
NGINX
veth13f8c56
eth0
(192.168.0.100)
컨테이너 둘
docker0
10.1.15.1/24
eth0 (veth2c8f4f4)
10.1.15.2/24
NGINX
veth13f8c56
eth0
192.168.0.100
eth0 (veth80d8ec5)
10.1.15.3/24
JENKINS
vetha451781
NGINX 포트를 노출
docker0
10.1.15.1/24
eth0 (veth2c8f4f4)
10.1.15.2/24
NGINX:80
eth0
192.168.0.100
eth0 (veth80d8ec5)
(10.1.15.3/24)
JENKINS:8080
DNAT :80 —> 10.1.15.2:80
(iptables)
-p 80:80
NGINX와 JENKINS 연결
docker0
10.1.15.1/24
eth0 (veth2c8f4f4)
10.1.15.2/24
NGINX:80
eth0
192.168.0.100
eth0 (veth80d8ec5)
(10.1.15.3/24)
JENKINS:8080
DNAT :80 —> 10.1.15.2:80
(iptables)
link
JENKINS_PORT_8080_TCP
호스트가 다르다면?
docker0
10.1.15.1/24
eth0 (veth2c8f4f4)
10.1.15.2/24
NGINX:80
eth0
192.168.0.100
docker0
10.1.20.1/24
eth0 (veth80d8ec5)
10.1.20.2/24
JENKINS:8080
eth0
192.168.0.200
DNAT 80 DNAT 8080
포트가 여러 개 필요하다면?
docker0
10.1.15.1/24
eth0 (veth2c8f4f4)
10.1.15.2/24
NGINX:80
eth0
192.168.0.100
DNAT 80
docker0
10.1.20.1/24
eth0
10.1.20.2/24
JENKINS:8080
eth0
192.168.0.200
eth0
(10.1.20.3/24)
JENKINS:8080
?
Overlay Network
docker0
10.1.15.1/24
eth0 (veth2c8f4f4)
10.1.15.2/24
NGINX:80
eth0
192.168.0.100
docker0
10.1.20.1/24
eth0
10.1.20.2/24
JENKINS:8080
eth0
192.168.0.200
eth0
(10.1.20.3/24)
JENKINS:8080
CoreOS Flannel
docker0
10.1.15.1/24
eth0 (veth2c8f4f4)
10.1.15.2/24
NGINX:80
eth0
192.168.0.100
docker0
10.1.20.1/24
eth0
10.1.20.2/24
JENKINS:8080
eth0
192.168.0.200
eth0
(10.1.20.3/24)
JENKINS:8080
flannel.1
10.1.15.0/16
flannel.1
10.1.20.0/16
overlay
vxlan
TIPS
Timezone
• 도커 컨테이너가 실행될 때 timezone이 디폴트로 맞춰집니다.
• 그런데 이 timezone을 설정할 좋은 방법이 아직은 없습니다.
• https://github.com/docker/docker/issues/12084
• -v /etc/localtime:/etc/localtime로 볼륨 설정.
• ENTRYPOINT에 별도의 스크립트를 둬서 런타임에 설정.
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
스토리지 드라이버
• DeviceMapper
• 스토리지 pool 크기에 주의. (100GB default)
• AUFS, Overlay (추천)
• 비슷한 성향의 파일시스템. Overlay는 3.18 커널부터 지원.
• 파일 개수가 많아지면 느려지거나 쓰기가 불가능해질 수 있다.
• overlay는 inode 개수를 모니터링 해주어야 한다. (df -ih)
• BTRFS
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 ..

Más contenido relacionado

La actualidad más candente

XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XpressEngine
 
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2XpressEngine
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Sangcheol Hwang
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Dronix
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Dockerpyrasis
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXpressEngine
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법GeunCheolYeom
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google KubernetesYongbok Kim
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalKyunghun Jeon
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법pyrasis
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Tae Young Lee
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08Nomad Connection, Inc.
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편Sam Kim
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013Jude Kim
 

La actualidad más candente (20)

XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
 
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 
DevOps with Docker
DevOps with DockerDevOps with Docker
DevOps with Docker
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
 
XECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloudXECon2015 :: [3-4] 조정현 - Laravel with cloud
XECon2015 :: [3-4] 조정현 - Laravel with cloud
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google Kubernetes
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker Principal
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
 
도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편도커 없이 컨테이너 만들기 2편
도커 없이 컨테이너 만들기 2편
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
 
Docker at Deview 2013
Docker at Deview 2013Docker at Deview 2013
Docker at Deview 2013
 

Destacado

[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
 
오픈소스 기반의 레드햇 클라우드 플랫폼 RhCI & Docker with PaaS
오픈소스 기반의 레드햇 클라우드 플랫폼   RhCI & Docker with PaaS오픈소스 기반의 레드햇 클라우드 플랫폼   RhCI & Docker with PaaS
오픈소스 기반의 레드햇 클라우드 플랫폼 RhCI & Docker with PaaSHojoong Kim
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise DockerLee Ji Eun
 
안정적인 서비스 운영 2013.08
안정적인 서비스 운영   2013.08안정적인 서비스 운영   2013.08
안정적인 서비스 운영 2013.08Changyol BAEK
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치Juneyoung Oh
 
서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술재훈 정
 
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기Kim Hunmin
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunhoJunho Kim
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_startSukjin Yun
 
Docker registry swift
Docker registry swiftDocker registry swift
Docker registry swiftJunho Kim
 
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기창훈 정
 
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmondDocker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmondDaegwon Kim
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea CloudJude Kim
 

Destacado (18)

[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
 
오픈소스 기반의 레드햇 클라우드 플랫폼 RhCI & Docker with PaaS
오픈소스 기반의 레드햇 클라우드 플랫폼   RhCI & Docker with PaaS오픈소스 기반의 레드햇 클라우드 플랫폼   RhCI & Docker with PaaS
오픈소스 기반의 레드햇 클라우드 플랫폼 RhCI & Docker with PaaS
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise Docker
 
안정적인 서비스 운영 2013.08
안정적인 서비스 운영   2013.08안정적인 서비스 운영   2013.08
안정적인 서비스 운영 2013.08
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치
 
서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술서버/인프라를 지탱하는 기술
서버/인프라를 지탱하는 기술
 
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunho
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
Docker registry swift
Docker registry swiftDocker registry swift
Docker registry swift
 
RZDESK-Docker hackday
RZDESK-Docker hackdayRZDESK-Docker hackday
RZDESK-Docker hackday
 
정책가이드북
정책가이드북 정책가이드북
정책가이드북
 
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
boot2docker 사용시 컨테이너에서 생성한 데이터를 유지하기
 
Pharos
PharosPharos
Pharos
 
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmondDocker Casual Talk #2 - Dockerizing newrelic-sysmond
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
 

Similar a XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker

[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTHosang Jeon
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
1. Docker Network (1)
1. Docker Network (1)1. Docker Network (1)
1. Docker Network (1)DEVELOPER.NET
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTLOGISPOT
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee dockerDK Lee
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)Ji-Woong Choi
 
Deploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxwonyong hwang
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container DayAmazon Web Services Korea
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestrationNAVER D2
 
[TeamStudy-022] Docker
[TeamStudy-022] Docker[TeamStudy-022] Docker
[TeamStudy-022] DockerWonjun Hwang
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편Sam Kim
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)CONNECT FOUNDATION
 

Similar a XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker (20)

Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
K8s in action02
K8s in action02K8s in action02
K8s in action02
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
1. Docker Network (1)
1. Docker Network (1)1. Docker Network (1)
1. Docker Network (1)
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
 
Deploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptx
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
 
[TeamStudy-022] Docker
[TeamStudy-022] Docker[TeamStudy-022] Docker
[TeamStudy-022] Docker
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
 

Más de XpressEngine

Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3XpressEngine
 
XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XpressEngine
 
XE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXpressEngine
 
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기XpressEngine
 
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩XpressEngine
 
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기XpressEngine
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들XpressEngine
 
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게XpressEngine
 
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기XpressEngine
 
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7XpressEngine
 
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래XpressEngine
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기XpressEngine
 
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로XpressEngine
 
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략XpressEngine
 
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기XpressEngine
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXpressEngine
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXpressEngine
 
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XpressEngine
 

Más de XpressEngine (20)

Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3
 
XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2
 
XE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynote
 
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
 
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
 
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
 
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
 
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
 
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
 
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
 
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
 
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략
 
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning Laravel
 
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
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
  • 6. 공용 장비에 손을 대는 순간...
  • 7. 가상 머신으로 해결!? • 개발 및 배포 환경을 어느 정도 표준화 할 수 있습니다. • 하지만 최초 설정 이후에는 마찬가지 비용이 발생합니다. • 시스템 설정 변경 • 시스템 라이브러리 업그레이드 • … H/W OS Hypervisor VM VM
  • 8. 지옥에서 온 테이블 2 핸드폰 시계 옷장 피아노 기차 물류창고 지게차 항구 배 트럭
  • 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
  • 14. cgroup subsystem • /sys/fs/cgroup • /cpu, /cpuacct, /cpuset • /memory • /blkio • /devices • /freezer, /perf_event https://www.kernel.org/doc/Documentation/cgroups/
  • 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 디렉토리를 마운트.
  • 18. 리눅스 컨테이너 • 어플리케이션을 격리(isolate)하고 패키징(package) 합니다. • 물리/VM 장비의 여러 요소들을 격리해줍니다. • 리소스 (CPU, 메모리, I/O 등) — cgroup • 네임스페이스 (PID, USER, NET 등) — namespace • 파일시스템 — chroot
  • 20.
  • 21. 리눅스 컨테이너를 생성하고 실행하며 배포하는 방식을 대중화 한 플랫폼.
  • 22. Docker • Docker • Daemon (libcontainer+libnetwork) • Client • Docker Hub: 컨테이너를 유통하는 서비스. • …
  • 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 : 컨테이너가 실행할 명령의 옵션.
  • 30. docker • $ docker ps • $ docker logs <container_id> • $ docker rm <container_id> • $ docker rmi <image_id> • $ docker exec <container_id> <command>
  • 31.
  • 33. 이렇게 구성하려 합니다 XE Core MariaDB :80 :3306 https://github.com/hoonmin/xecore
  • 34. Docker Image • <네임스페이스>/<이름>:<태그> • mariadb:latest • php:5.6-apache • hoonmin/xecore:1.8.14 • hoonmin/xecore:latest
  • 35. Dockerfile FROM php:5.6-apache RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev && rm -rf /var/lib/apt/lists/* # 필요한 PHP extension을 설치 합니다. RUN docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr && docker-php-ext-install gd RUN docker-php-ext-install mysqli # XE Core를 다운로드 합니다. RUN curl -o /var/www/xe.tar.gz -OL https://github.com/xpressengine/xe-core/releases/download/1.8.14/xe.1.8.14.tar.gz # 호스트의 저장소와 연결할 수 있는 볼륨을 정의합니다. VOLUME /var/www/html WORKDIR /var/www/html # 실행 커맨드 CMD ["apache2-foreground"]
  • 36. Docker Image • docker build -t hoonmin/xecore:1.8.14 . • -t : 빌드 할 이미지 이름 • hoonmin : 이미지의 네임스페이스 (그룹) • xecore : 이미지 이름 • 1.8.14 : 이미지의 태그 • . : Dockerfile이 위치한 디렉토리
  • 37.
  • 38. Docker Container: xecore • docker run -it --rm hoonmin/xecore:1.8.14 • -it : foreground로 동작시키는 경우, 쉘에서 상호작용 가능하게. • --rm : 실행이 끝난 컨테이너를 삭제합니다. • hoonmin/xecore:1.8.14 : 이미지 이름 • docker ps • 실행 중인 도커 컨테이너의 리스트를 확인합니다.
  • 39. Docker Container: mariadb • docker run -d -e MYSQL_ROOT_PASSWORD=root --name db --p 3306:3306 mariadb • -d : background 프로세스로 동작시킵니다. • -e : 컨테이너 안에서 사용될 환경 변수를 설정합니다. • --name : 컨테이너의 이름을 지정합니다. • -p 3306:3306 : 컨테이너가 노출한 포트를 호스트의 포트와 매 핑합니다. <host_port>:<container_port>
  • 40. Docker Hub • https://hub.docker.com/ • 회원 가입이 필요합니다. • docker login • docker push hoonmin/xecore:1.8.14
  • 41. DB를 밖으로 노출하기 싫어요 XE Core MariaDB :80
  • 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
  • 47. docker-swarm 설치 • docker run swarm create : 토큰값 확인 • 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
  • 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개로 늘립니다.
  • 49. DB 연결이 안되는데요…? XE Core :80XE Core :80 XE Core MariaDB :80XE Core :80
  • 50. docker overlay networking XE Core :80XE Core :80 XE Core MariaDB :80XE Core :80 overlay my_net
  • 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, …
  • 58. NGINX 포트를 노출 docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 eth0 (veth80d8ec5) (10.1.15.3/24) JENKINS:8080 DNAT :80 —> 10.1.15.2:80 (iptables) -p 80:80
  • 59. NGINX와 JENKINS 연결 docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 eth0 (veth80d8ec5) (10.1.15.3/24) JENKINS:8080 DNAT :80 —> 10.1.15.2:80 (iptables) link JENKINS_PORT_8080_TCP
  • 61. 포트가 여러 개 필요하다면? docker0 10.1.15.1/24 eth0 (veth2c8f4f4) 10.1.15.2/24 NGINX:80 eth0 192.168.0.100 DNAT 80 docker0 10.1.20.1/24 eth0 10.1.20.2/24 JENKINS:8080 eth0 192.168.0.200 eth0 (10.1.20.3/24) JENKINS:8080 ?
  • 64. TIPS
  • 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 ..