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

XpressEngine
XpressEngineXpressEngine
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
누구세요?
• 김훈민. (동생 이름이 정음)
• 결혼 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
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
리눅스 컨테이너를
생성하고 실행하며 배포하는 방식을
대중화 한 플랫폼.
Docker
• Docker
• Daemon (libcontainer+libnetwork)
• Client
• Docker Hub: 컨테이너를 유통하는 서비스.
• …
Docker
• 도커 Daemon을 통해 리눅스 컨테이너를 실행하면:
• 도커 이미지를 이용하여 새로운 컨테이너를 위한 파일 시스템을
구성합니다.
• 컨테이너를 위한 네트워킹 설정을 변경해줍니다.
• 격리된 컨테이너 프로세스를 실행합니다.
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
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>
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
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이 위치한 디렉토리
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
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 ..
1 sur 68

Recommandé

Docker 사내교육 자료 par
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료Juneyoung Oh
2.2K vues17 diapositives
초심자를 위한 도커 소개 및 입문 par
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문Daniel Seo
2.6K vues62 diapositives
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요] par
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
1.9K vues141 diapositives
aws/docker/rails를 활용한 시스템 구축/운용 - docker편 par
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편negabaro
1.5K vues107 diapositives
Docker (Compose) 활용 - 개발 환경 구성하기 par
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기raccoony
126.7K vues95 diapositives
Introduce Docker par
Introduce DockerIntroduce Docker
Introduce DockerYongbok Kim
6.1K vues101 diapositives

Contenu connexe

Tendances

XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3 par
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XpressEngine
745 vues75 diapositives
Docker 기반 개발환경 구축 - XE Open seminar #2 par
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2XpressEngine
1.1K vues60 diapositives
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4 par
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Sangcheol Hwang
7.1K vues50 diapositives
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3 par
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
3.9K vues49 diapositives
Docker로 서버 개발 편하게 하기 par
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Dronix
16.3K vues35 diapositives
DevOps with Docker par
DevOps with DockerDevOps with Docker
DevOps with DockerSangcheol Hwang
11.6K vues39 diapositives

Tendances(20)

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

En vedette

[1A6]Docker로 보는 서버 운영의 미래 par
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
25.1K vues133 diapositives
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day par
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
17.9K vues48 diapositives
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례 par
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
81K vues81 diapositives
오픈소스 기반의 레드햇 클라우드 플랫폼 RhCI & Docker with PaaS par
오픈소스 기반의 레드햇 클라우드 플랫폼   RhCI & Docker with PaaS오픈소스 기반의 레드햇 클라우드 플랫폼   RhCI & Docker with PaaS
오픈소스 기반의 레드햇 클라우드 플랫폼 RhCI & Docker with PaaSHojoong Kim
4.9K vues55 diapositives
Enterprise Docker par
Enterprise DockerEnterprise Docker
Enterprise DockerLee Ji Eun
15.2K vues36 diapositives
안정적인 서비스 운영 2013.08 par
안정적인 서비스 운영   2013.08안정적인 서비스 운영   2013.08
안정적인 서비스 운영 2013.08Changyol BAEK
9.3K vues61 diapositives

En vedette(18)

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

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

Docker osc 0508 par
Docker osc 0508Docker osc 0508
Docker osc 0508Open Source Consulting
9.9K vues61 diapositives
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축 par
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
4.6K vues55 diapositives
[오픈소스컨설팅]Docker on Kubernetes v1 par
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
4.4K vues66 diapositives
K8s in action02 par
K8s in action02K8s in action02
K8s in action02Sunggon Song
344 vues48 diapositives
Introduction to Docker - LOGISPOT par
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTHosang Jeon
203 vues21 diapositives
[17.01.19] docker introduction (Korean Version) par
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
472 vues37 diapositives

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

[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축 par Ji-Woong Choi
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi4.6K vues
[오픈소스컨설팅]Docker on Kubernetes v1 par Ji-Woong Choi
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
Ji-Woong Choi4.4K vues
Introduction to Docker - LOGISPOT par Hosang Jeon
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
Hosang Jeon203 vues
[17.01.19] docker introduction (Korean Version) par Ildoo Kim
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
Ildoo Kim472 vues
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기 par Ted Won
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
Ted Won1.9K vues
Introduction to Docker - LOGISPOT par LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
LOGISPOT140 vues
20141229 dklee docker par DK Lee
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
DK Lee2.8K vues
Tensorflow service & Machine Learning par JEEHYUN PAIK
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
JEEHYUN PAIK3.1K vues
[오픈소스컨설팅]Docker on Cloud(Digital Ocean) par Ji-Woong Choi
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
Ji-Woong Choi3K vues
Deploying Hyperledger Fabric on Kubernetes.pptx par wonyong hwang
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptx
wonyong hwang22 vues
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day par Amazon Web Services Korea
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
[221] docker orchestration par NAVER D2
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
NAVER D215.8K vues
도커없이 컨테이너 만들기 1편 par Sam Kim
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
Sam Kim1.8K vues
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기) par CONNECT FOUNDATION
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)

Plus de XpressEngine

Github 100% 활용하기 - XE Open seminar #3 par
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3XpressEngine
405 vues29 diapositives
XE3 SEO를 다루기 - XE Open seminar #2 par
XE3 SEO를 다루기 - XE Open seminar #2XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XpressEngine
458 vues24 diapositives
XE Open seminar #2 - keynote par
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXpressEngine
405 vues12 diapositives
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기 par
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기XpressEngine
882 vues26 diapositives
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩 par
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩XpressEngine
1.3K vues24 diapositives
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기 par
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기XpressEngine
978 vues88 diapositives

Plus de XpressEngine(20)

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

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

  • 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
  • 21. 리눅스 컨테이너를 생성하고 실행하며 배포하는 방식을 대중화 한 플랫폼.
  • 22. Docker • Docker • Daemon (libcontainer+libnetwork) • Client • Docker Hub: 컨테이너를 유통하는 서비스. • …
  • 23. Docker • 도커 Daemon을 통해 리눅스 컨테이너를 실행하면: • 도커 이미지를 이용하여 새로운 컨테이너를 위한 파일 시스템을 구성합니다. • 컨테이너를 위한 네트워킹 설정을 변경해줍니다. • 격리된 컨테이너 프로세스를 실행합니다.
  • 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>
  • 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이 위치한 디렉토리
  • 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 ..