SlideShare a Scribd company logo
1 of 37
Download to read offline
Docker Starter
Guide for Introductory Level
Curtis Kim(김일두) @ KAKAO
Why Docker?
모든 개발자가 겪는 불변의 패러다임
↓
모든 개발자가 꿈꾸는 궁극의 패러다임
모든 개발자가 한번은 겪을 불변의 패러다임
개발을 시작하면서
1. 나도 서버 개발을 해볼때가 됐군!
2. 음 어찌어찌해서 리눅스는 컴퓨터에 깔았는데…
3. 리눅스 명령어가 어색어색하니 세팅도 난잡하게 되네?
4. 서버를 계속 쓰다보니 의존성 문제가 생겨 기존에 돌던게 안돌기도 하잖아?!!!
5. 그럼 다시 서버를 재설치해야겠다!
개발을 하고나서
1. 자 이제 드디어 개발을 완료했군.
2. 여러대의 서버에 배포해볼까?
3. 스크립트(리눅스 명령어를 순서대로 텍스트 파일로 기록)를 하나 만들어서 모든 서버에서 동시에 돌려서 같은
세팅을 해야지!
4. 한 100대쯤 되니까 쉽지는 않네…
5. (1주일뒤) 엇, 업데이트를 해야하는데..?!!!!!
6. 업데이트하면서 디펜던시들도 업데이트하고, 서버 정리도하고 하다보니 서버별로 히스토리가 달라지네.
7. 그럼 모든 서버를 재설치해야겠다!!
모든 개발자가 꿈꾸는 궁극의 패러다임
언제나 동일한 환경에서 개발할 수 있을까?
사양이 다른, 설치된 os가 다른, 설치된 소프트웨어가 다른 여러 서버에서 ‘동일하게’ 동작하는 것을 보장할 수 있
을까?
가상화기술(가상머신)은 속도가 느리고, 호스트머신의 자원을 모두 접근할 수 없다는 단점이 있는데, 이런 제약을
뛰어넘고, 오히려 호스트머신의 자원을 잘 관리할 수 없을까?
내가 만든 여러 어플리케이션들은 사용하는 자원(cpu, mem, disk, …)의 타입과 그 양이 서로 다른데, 한 서버를
잘 나누어 씀으로써 Utilization을 극대화할 수 없을까?
소프트웨어를 개발하고 버튼 하나 딱 누르면, 아무런 문제없이 모든 서버에 자동으로 배포되게 할 수 있을까?
트위터의 서버 관리 모습
Let’s Start With A Simple Example
From making [Docker Image]
To Deploy them on [Real Servers]
Simple Example Summary
docker hub 에 누군가가 만들어둔 ubuntu base image가 있었다
docker pull … 로 이미지를 내려받았다.
docker run … 로 이미지를 컨테이너로 형태로 실행했다.
컨테이너에 라이브러리도 설치하고, 소스파일도 복사해서 실행가능한 수준으로 변경을 가했다.
docker commit … 으로 컨테이너를 이미지로 저장했다.
동일한 이미지를 복사해 여러 대의 서버에 배포해, 웹 서비스를 실행했다.
Base Image
Container
Image
Deploy
Before Docker.
Immutable Infrastructure
Micro-Service for scale-out
Highly Available
Immutable Infrastructure #1
Cloud 환경으로의 변화
클라우드 환경에서의 잦은 설치와 배포
스크립트는 어떨까? “ansible”
- 사소한 설정 하나가 안정성에 영향을 미침
- 지속적인 설정의 반복으로 복잡한 구성을 갖는 시스템으로 계속해서 변화해 감
Immutable Infra : 서비스 환경과 운영 환경을 분리할 수는 없을까?
- 서비스 환경 : 컴파일된 바이너리
- 운영 환경 : 호스트 OS에 필요한 dependancy 설치, 설정 등이 완료된 상황
분리되지 않은 사례
- 인프라시스템 아지트 : “서비스 투입을 위해 APDS 1~16번까지 아래와 같이 초기화부탁드립니다.”
DevOps의 시대.
Immutable Infrastructure #2
서비스 환경과 운영 환경을 어떻게 분리할까.
운영 환경
- OS, dependency, 설정값 등은 1회 설정하면 계속 유지될 것
- 그렇다면 운영 환경을 [이미지]로 생성해두고 반복해서 사용할 수 있다면 좋을 것
- GPU Driver 설치된 ubuntu. + python…
서비스 환경
- 내가 만든 변화가 반영하여 배포될 수 있는 인프라가 필요함
- 변화된 만큼만 전달될 수 있다면 가벼운 서비스 배포가 될 것
- scale-out 에 유리하게 설계되어야 좋을 것
- python application
Micro-service & high availability
One Giant Big Application 을 만들었더니
- 변화를 만드는 것이 힘든 구조가 되어가고
- 테스트가 힘들어지고
- scale-out에 불리함
하드웨어적인 개선과 소프트웨어 패러다임의 변화로 마이크로 서비스 중심의 서비스 설계가 주류를 이룸
- 각 모듈의 작고 사소한 변화를 각 모듈에서 테스트하고 배포
- 각 모듈들이 서로 잘 조합되어 하나의 서비스를 구성함
- scale-out에 유리함
수요예측적인 인프라 설계에서 수요대응적인 인프라 설계로의 변화
Why Docker?
Virtual Machine / Docker
Virtual Machine
http://www.docker.com/whatisdocker
Docker
Docker는 호스트 OS의 커널을 공유하고, 프로그램/라이브러리는 격리해서 사용함
하드웨어 가상화 계층이 없음
Virtual Machine / Docker
The difference between a VM image and a Docker image is that
a VM image can have running services, whereas
a Docker Image is just a filesystem snapshot
…
while you can configure the image to have your favourite packages,
you can run only one command in the container.
Virtual Machine / Docker
Performance
- 연산관련해서는 1% 내외 수준의 성능 차이
- KVM보다 다양한 면에서 낫거나 비슷하며 native보다 크게 떨어지지 않음
- 네트워크는 host 모드일 때 좀 더 성능이 잘 나옴
- http://domino.research.ibm.com/library/cyberdig.nsf/papers/
0929052195DD819C85257D2300681E7B/$File/rc25482.pdf
안정성
- 현재 버전 1.9에서 많은 안정화가 이루어짐
- 기존과는 다른, 예측하기 힘든 문제가 생기기도 함
- docker 자체에도 버그가 있음 (eg. docker exec 커맨드가 메모리 릭 등의 원인이 되기도 함)
- docker service / libcontainer가 process 생성 관리 등에 관여하다보니 생기는 side-effect
- driver 등과 결합되어 생기는 문제들이 있을 수 있음
libcontainer
- 리눅스 자체적으로 제공하는 lxc
- docker inc. 에서 개발한 libcontainer
- docker 실행 시 옵션으로 설정 가능함
Docker’s Mission
Docker containers are guaranteed to run the same way,
be it on your development desktop, a bare-metal server, virtual machine, data centre or cloud.
Terminologies
Docker Daemon
- process that manages containers
- not docker client
- sudo privileges - security issue
Docker Client
- start / manager containers interacting with daemon
- RESTful API
Dockerfile
- instructions on setting up a Docker Image
Docker registry - repository
Docker Image / Container?
Docker Image / Container
By Default, Docker uses AUFS, a layered copy-on-write filesystem
…
the container image’s filesystem is a culmination of multiple read-only filesystem layers
Docker Image / Container
Image <—————-> Container
1개의 이미지를 여러 컨테이너로 실행할 수 있음
컨테이너에서 변화를 일으킨 것을 commit 하면 또 다른 이미지를 만들어낼 수 있음
Docker Image / Container
Images can be stored in repo (called registry)
- locally
- remotely
Snapshots are called commits.
You pull an image from repo
You push your local image to a repo, and so on.
- 공식 Hub Repo : https://hub.docker.com
- 사내 Hub Repo : http://hub.docker.9rum.cc/search/repos
Docker Image / Container Example #1
Alvolo Thumbnails Demo : Dockerfile
Docker Image / Container Example #2
Alvolo Thumbnails Demo : Image Layers
Host Kernel
Base Image : Ubuntu 14.04
Base Image : alvolo-ubuntu-20151208
Python Web Application
운영환경
서비스환경
System Architecture Using Docker
1 Machine Service - Legacy Way
Host Kernel
Base Image
Ubuntu 14.04
Base Image2
Web Application
1 Machine Service - Docker Way
Base
Image
MySQL
Base Image
Ubuntu 14.04
Redis
link
link
Host Machine
Web Application
MySQL
Redis
*Multiple Machine인 경우에 Ambassador Container를 이용해
컨테이너들을 서로 연결함
Docker Deploy - Default
가장 많이 사용하는 Docker를 이용한 배포 시스템
Docker Commands
Docker Commands - Sneak peak
Commands 설명
search 이미지 검색
pull 이미지 받기
images 이미지 목록 보기
run 이미지를 컨테이너로 생성하기
ps 컨테이너 목록 보기
start 중지된 컨테이너 시작하기
attach 컨테이너에 접속하기
exec 컨테이너에 명령어 실행하기
stop 컨테이너 정지하기
rm / rmi 컨테이너 / 이미지 삭제하기
commit 컨테이너를 이미지로 생성하기
history 이미지의 히스토리보기
diff 컨테이너에서 변경된 파일 확인
cp 파일 꺼내기 혹은 파일 복사하기
docker run
$ sudo docker run -i -t —name webapp ubuntu:latest /bin/bash
docker run <option> <image> <command>
-i, -t 옵션을 주어야 bash shell에 입력 및 출력할 수 있음
-d 백그라운드로 컨테이너 실행함
-p 호스트의 포트와 컨테이너의 포트를 연결함
-v 호스트의 디렉터리를 컨테이너의 특정 디렉터리에 연결함
—rm 옵션을 주면 컨테이너가 종료될 때 자동으로 컨테이너가 제거됨
<command> : /bin/bash 이므로 bash shell 로 실행됨
docker exec
$ sudo docker exec webapp python cron_job.py
docker exec <option> <image name> <command>
실행 중인 컨테이너에 명령어 실행함
apt-get 등으로 패키지 설치나 데몬 실행 등 가능
dockerfile에 실행 커맨드가 이미 지정되어 있는 경우 다른 작업을 하고싶을 때 사용하면 유용
docker commit / build
$ sudo docker commit -a “Curtis” -m “add files” webapp-container webapp-image:0.1
변화를 만든 컨테이너를 이미지로 만들어냄
$ sudo docker build —tag webapp:0.1 .
docker exec <option> <image name:tag> <Dockerfile path>
Dockerfile 로부터 docker image를 생성하는 방법
Sneak peak
DKOS + Marathon + Chronos
Open Sources…?
오픈 소스를 이용해 Docker 관련된 인프라 구축 필요함.
Mesos + Marathon + Chronous 구축은 필수.
- 이 위에서 Docker 로 구워진 어플리케이션이 원하는 형태로 수행되도록!
- AWS 내지는 우리가 가진 서버 목록을 Slave로 등록하기만 하면 됨.
- 1월 내 구축 예정. 최소사양 Instance로 Master/Proxy등 구축하고 고사양 서버는 생기는대로 붙이
는 형태로 하면 됨.
Docker Image를 저장할 수 있는 Registry(Hub) 구축 필수.
- 버전별로 구워진 어플리케이션을 저장하고, 배포 시 이미지 복사의 중심이 될 서버 구축 필요.
- 고사양 필요없고, 하드디스크만 겁나 크면 됨…
- 3줄의 스크립트로 서버 구축 가능.
- 명령어에 취약한 많은 사람을 위해 Web UI도 같이 배포 예정 : http://port.us.org/
AWS Lambda
- 구축 예정 없지만, 이후에 서비스를 런칭한다고하면 AWS Lamda 기술을 통해 비용을 매우 절감할
수 있을 것으로 예상함.
Questions?
Not an appendix! #1
Apache Mesos + Apache Marathon + Chronos 조합으로 많이 쓴다
- 카카오는 사내 서비스인 DKOS 가 이 역할을 해줌
- AWS에는 DCOS, lambda 등 존재.
- git push 하면 자동으로 docker image build하고, 배포까지 됨
Dockerfile에 Command에 Argument를 비워두기도 한다
- 비워두면 “docker run” 할 때 Argument만 넣어주면 실행
*
Not an appendix! #2
docker run
- 호스트의 디바이스를 마운트 가능함
- 특정 CPU 코어만 사용하도록 설정할 수도 있음
- CPU Share의 relative한 값도 지정할 수 있음
- DNS 등 설정할 수 있음
- 컨테이너가 비정상 종료된 경우 재 실행되도록 하는 옵션도 따로 제공함(default=no)
docker container 끼리 연결해서 많이 사용함
- mysql container <—-> web server
- 동일 머신 내에서 실행 중인 컨테이너 뿐만 아니라 remote 하게 떨어진 컨테이너도 연결할 수 있음
- scale-out에 매우 유리함
- Ambassador Pattern
Highly Available Service
- horizontally scalable
- Fault tolerant
- Modular
Not an appendix! #3
Docker 안에 Docker를 띄우기도 한다.
Docker 바이너리는 Docker로 굽는다.
Docker hub에서 dockerfile들을 보다보면 어떻게 docker를 써야할지 좀 더 빠르게 느낄 수 있다.
Books
- 가장 먼저 만나는 Docker
- Orchestrating Docker
Youtube Videos
- Docker at Shopify : https://www.youtube.com/watch?v=Qr0sATj9IVc
- Docker fundamentals: basics, storage, networking - Introduction to Docker : https://
www.youtube.com/watch?v=UV3cw4QLJLs
- How We're Using Docker : https://www.youtube.com/watch?v=GMR8DAPN1lk
Docker Starter
Guide for Introductory Level
Curtis Kim(김일두) @ KAKAO

More Related Content

What's hot

Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Steve Shim
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기KTH, 케이티하이텔
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15Chanwoong Kim
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함Ji-Woong Choi
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼jeongseokoh
 
Nginx Testing in NAVER
Nginx Testing in NAVERNginx Testing in NAVER
Nginx Testing in NAVER형근 송
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXpressEngine
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문Daniel Seo
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료Juneyoung Oh
 
Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?Ian Choi
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Tae Young Lee
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Dockerpyrasis
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chromeJi Hun Kim
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Sangcheol Hwang
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포KwangSeob Jeong
 

What's hot (20)

Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
 
DevOps with Docker
DevOps with DockerDevOps with Docker
DevOps with Docker
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼Svn 버전관리 프로그램_매뉴얼
Svn 버전관리 프로그램_매뉴얼
 
Nginx Testing in NAVER
Nginx Testing in NAVERNginx Testing in NAVER
Nginx Testing in NAVER
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료
 
Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chrome
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포
 
AWS + Docker in Vingle
AWS + Docker in VingleAWS + Docker in Vingle
AWS + Docker in Vingle
 

Similar to [17.01.19] docker introduction (Korean Version)

Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편negabaro
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)CONNECT FOUNDATION
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Nanha Park
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTHosang Jeon
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법GeunCheolYeom
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
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
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTLOGISPOT
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법pyrasis
 

Similar to [17.01.19] docker introduction (Korean Version) (20)

Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
Docker Container
Docker ContainerDocker Container
Docker Container
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
why docker
why dockerwhy docker
why docker
 
Docker Intro
Docker IntroDocker Intro
Docker Intro
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
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
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 

[17.01.19] docker introduction (Korean Version)

  • 1. Docker Starter Guide for Introductory Level Curtis Kim(김일두) @ KAKAO
  • 2. Why Docker? 모든 개발자가 겪는 불변의 패러다임 ↓ 모든 개발자가 꿈꾸는 궁극의 패러다임
  • 3. 모든 개발자가 한번은 겪을 불변의 패러다임 개발을 시작하면서 1. 나도 서버 개발을 해볼때가 됐군! 2. 음 어찌어찌해서 리눅스는 컴퓨터에 깔았는데… 3. 리눅스 명령어가 어색어색하니 세팅도 난잡하게 되네? 4. 서버를 계속 쓰다보니 의존성 문제가 생겨 기존에 돌던게 안돌기도 하잖아?!!! 5. 그럼 다시 서버를 재설치해야겠다! 개발을 하고나서 1. 자 이제 드디어 개발을 완료했군. 2. 여러대의 서버에 배포해볼까? 3. 스크립트(리눅스 명령어를 순서대로 텍스트 파일로 기록)를 하나 만들어서 모든 서버에서 동시에 돌려서 같은 세팅을 해야지! 4. 한 100대쯤 되니까 쉽지는 않네… 5. (1주일뒤) 엇, 업데이트를 해야하는데..?!!!!! 6. 업데이트하면서 디펜던시들도 업데이트하고, 서버 정리도하고 하다보니 서버별로 히스토리가 달라지네. 7. 그럼 모든 서버를 재설치해야겠다!!
  • 4. 모든 개발자가 꿈꾸는 궁극의 패러다임 언제나 동일한 환경에서 개발할 수 있을까? 사양이 다른, 설치된 os가 다른, 설치된 소프트웨어가 다른 여러 서버에서 ‘동일하게’ 동작하는 것을 보장할 수 있 을까? 가상화기술(가상머신)은 속도가 느리고, 호스트머신의 자원을 모두 접근할 수 없다는 단점이 있는데, 이런 제약을 뛰어넘고, 오히려 호스트머신의 자원을 잘 관리할 수 없을까? 내가 만든 여러 어플리케이션들은 사용하는 자원(cpu, mem, disk, …)의 타입과 그 양이 서로 다른데, 한 서버를 잘 나누어 씀으로써 Utilization을 극대화할 수 없을까? 소프트웨어를 개발하고 버튼 하나 딱 누르면, 아무런 문제없이 모든 서버에 자동으로 배포되게 할 수 있을까? 트위터의 서버 관리 모습
  • 5. Let’s Start With A Simple Example From making [Docker Image] To Deploy them on [Real Servers]
  • 6. Simple Example Summary docker hub 에 누군가가 만들어둔 ubuntu base image가 있었다 docker pull … 로 이미지를 내려받았다. docker run … 로 이미지를 컨테이너로 형태로 실행했다. 컨테이너에 라이브러리도 설치하고, 소스파일도 복사해서 실행가능한 수준으로 변경을 가했다. docker commit … 으로 컨테이너를 이미지로 저장했다. 동일한 이미지를 복사해 여러 대의 서버에 배포해, 웹 서비스를 실행했다. Base Image Container Image Deploy
  • 8. Immutable Infrastructure #1 Cloud 환경으로의 변화 클라우드 환경에서의 잦은 설치와 배포 스크립트는 어떨까? “ansible” - 사소한 설정 하나가 안정성에 영향을 미침 - 지속적인 설정의 반복으로 복잡한 구성을 갖는 시스템으로 계속해서 변화해 감 Immutable Infra : 서비스 환경과 운영 환경을 분리할 수는 없을까? - 서비스 환경 : 컴파일된 바이너리 - 운영 환경 : 호스트 OS에 필요한 dependancy 설치, 설정 등이 완료된 상황 분리되지 않은 사례 - 인프라시스템 아지트 : “서비스 투입을 위해 APDS 1~16번까지 아래와 같이 초기화부탁드립니다.” DevOps의 시대.
  • 9. Immutable Infrastructure #2 서비스 환경과 운영 환경을 어떻게 분리할까. 운영 환경 - OS, dependency, 설정값 등은 1회 설정하면 계속 유지될 것 - 그렇다면 운영 환경을 [이미지]로 생성해두고 반복해서 사용할 수 있다면 좋을 것 - GPU Driver 설치된 ubuntu. + python… 서비스 환경 - 내가 만든 변화가 반영하여 배포될 수 있는 인프라가 필요함 - 변화된 만큼만 전달될 수 있다면 가벼운 서비스 배포가 될 것 - scale-out 에 유리하게 설계되어야 좋을 것 - python application
  • 10. Micro-service & high availability One Giant Big Application 을 만들었더니 - 변화를 만드는 것이 힘든 구조가 되어가고 - 테스트가 힘들어지고 - scale-out에 불리함 하드웨어적인 개선과 소프트웨어 패러다임의 변화로 마이크로 서비스 중심의 서비스 설계가 주류를 이룸 - 각 모듈의 작고 사소한 변화를 각 모듈에서 테스트하고 배포 - 각 모듈들이 서로 잘 조합되어 하나의 서비스를 구성함 - scale-out에 유리함 수요예측적인 인프라 설계에서 수요대응적인 인프라 설계로의 변화
  • 12. Virtual Machine / Docker Virtual Machine http://www.docker.com/whatisdocker Docker Docker는 호스트 OS의 커널을 공유하고, 프로그램/라이브러리는 격리해서 사용함 하드웨어 가상화 계층이 없음
  • 13. Virtual Machine / Docker The difference between a VM image and a Docker image is that a VM image can have running services, whereas a Docker Image is just a filesystem snapshot … while you can configure the image to have your favourite packages, you can run only one command in the container.
  • 14. Virtual Machine / Docker Performance - 연산관련해서는 1% 내외 수준의 성능 차이 - KVM보다 다양한 면에서 낫거나 비슷하며 native보다 크게 떨어지지 않음 - 네트워크는 host 모드일 때 좀 더 성능이 잘 나옴 - http://domino.research.ibm.com/library/cyberdig.nsf/papers/ 0929052195DD819C85257D2300681E7B/$File/rc25482.pdf 안정성 - 현재 버전 1.9에서 많은 안정화가 이루어짐 - 기존과는 다른, 예측하기 힘든 문제가 생기기도 함 - docker 자체에도 버그가 있음 (eg. docker exec 커맨드가 메모리 릭 등의 원인이 되기도 함) - docker service / libcontainer가 process 생성 관리 등에 관여하다보니 생기는 side-effect - driver 등과 결합되어 생기는 문제들이 있을 수 있음 libcontainer - 리눅스 자체적으로 제공하는 lxc - docker inc. 에서 개발한 libcontainer - docker 실행 시 옵션으로 설정 가능함
  • 15. Docker’s Mission Docker containers are guaranteed to run the same way, be it on your development desktop, a bare-metal server, virtual machine, data centre or cloud.
  • 16. Terminologies Docker Daemon - process that manages containers - not docker client - sudo privileges - security issue Docker Client - start / manager containers interacting with daemon - RESTful API Dockerfile - instructions on setting up a Docker Image Docker registry - repository
  • 17. Docker Image / Container?
  • 18. Docker Image / Container By Default, Docker uses AUFS, a layered copy-on-write filesystem … the container image’s filesystem is a culmination of multiple read-only filesystem layers
  • 19. Docker Image / Container Image <—————-> Container 1개의 이미지를 여러 컨테이너로 실행할 수 있음 컨테이너에서 변화를 일으킨 것을 commit 하면 또 다른 이미지를 만들어낼 수 있음
  • 20. Docker Image / Container Images can be stored in repo (called registry) - locally - remotely Snapshots are called commits. You pull an image from repo You push your local image to a repo, and so on. - 공식 Hub Repo : https://hub.docker.com - 사내 Hub Repo : http://hub.docker.9rum.cc/search/repos
  • 21. Docker Image / Container Example #1 Alvolo Thumbnails Demo : Dockerfile
  • 22. Docker Image / Container Example #2 Alvolo Thumbnails Demo : Image Layers Host Kernel Base Image : Ubuntu 14.04 Base Image : alvolo-ubuntu-20151208 Python Web Application 운영환경 서비스환경
  • 23. System Architecture Using Docker 1 Machine Service - Legacy Way Host Kernel Base Image Ubuntu 14.04 Base Image2 Web Application 1 Machine Service - Docker Way Base Image MySQL Base Image Ubuntu 14.04 Redis link link Host Machine Web Application MySQL Redis *Multiple Machine인 경우에 Ambassador Container를 이용해 컨테이너들을 서로 연결함
  • 24. Docker Deploy - Default 가장 많이 사용하는 Docker를 이용한 배포 시스템
  • 26. Docker Commands - Sneak peak Commands 설명 search 이미지 검색 pull 이미지 받기 images 이미지 목록 보기 run 이미지를 컨테이너로 생성하기 ps 컨테이너 목록 보기 start 중지된 컨테이너 시작하기 attach 컨테이너에 접속하기 exec 컨테이너에 명령어 실행하기 stop 컨테이너 정지하기 rm / rmi 컨테이너 / 이미지 삭제하기 commit 컨테이너를 이미지로 생성하기 history 이미지의 히스토리보기 diff 컨테이너에서 변경된 파일 확인 cp 파일 꺼내기 혹은 파일 복사하기
  • 27. docker run $ sudo docker run -i -t —name webapp ubuntu:latest /bin/bash docker run <option> <image> <command> -i, -t 옵션을 주어야 bash shell에 입력 및 출력할 수 있음 -d 백그라운드로 컨테이너 실행함 -p 호스트의 포트와 컨테이너의 포트를 연결함 -v 호스트의 디렉터리를 컨테이너의 특정 디렉터리에 연결함 —rm 옵션을 주면 컨테이너가 종료될 때 자동으로 컨테이너가 제거됨 <command> : /bin/bash 이므로 bash shell 로 실행됨
  • 28. docker exec $ sudo docker exec webapp python cron_job.py docker exec <option> <image name> <command> 실행 중인 컨테이너에 명령어 실행함 apt-get 등으로 패키지 설치나 데몬 실행 등 가능 dockerfile에 실행 커맨드가 이미 지정되어 있는 경우 다른 작업을 하고싶을 때 사용하면 유용
  • 29. docker commit / build $ sudo docker commit -a “Curtis” -m “add files” webapp-container webapp-image:0.1 변화를 만든 컨테이너를 이미지로 만들어냄 $ sudo docker build —tag webapp:0.1 . docker exec <option> <image name:tag> <Dockerfile path> Dockerfile 로부터 docker image를 생성하는 방법
  • 30. Sneak peak DKOS + Marathon + Chronos
  • 32. 오픈 소스를 이용해 Docker 관련된 인프라 구축 필요함. Mesos + Marathon + Chronous 구축은 필수. - 이 위에서 Docker 로 구워진 어플리케이션이 원하는 형태로 수행되도록! - AWS 내지는 우리가 가진 서버 목록을 Slave로 등록하기만 하면 됨. - 1월 내 구축 예정. 최소사양 Instance로 Master/Proxy등 구축하고 고사양 서버는 생기는대로 붙이 는 형태로 하면 됨. Docker Image를 저장할 수 있는 Registry(Hub) 구축 필수. - 버전별로 구워진 어플리케이션을 저장하고, 배포 시 이미지 복사의 중심이 될 서버 구축 필요. - 고사양 필요없고, 하드디스크만 겁나 크면 됨… - 3줄의 스크립트로 서버 구축 가능. - 명령어에 취약한 많은 사람을 위해 Web UI도 같이 배포 예정 : http://port.us.org/ AWS Lambda - 구축 예정 없지만, 이후에 서비스를 런칭한다고하면 AWS Lamda 기술을 통해 비용을 매우 절감할 수 있을 것으로 예상함.
  • 34. Not an appendix! #1 Apache Mesos + Apache Marathon + Chronos 조합으로 많이 쓴다 - 카카오는 사내 서비스인 DKOS 가 이 역할을 해줌 - AWS에는 DCOS, lambda 등 존재. - git push 하면 자동으로 docker image build하고, 배포까지 됨 Dockerfile에 Command에 Argument를 비워두기도 한다 - 비워두면 “docker run” 할 때 Argument만 넣어주면 실행 *
  • 35. Not an appendix! #2 docker run - 호스트의 디바이스를 마운트 가능함 - 특정 CPU 코어만 사용하도록 설정할 수도 있음 - CPU Share의 relative한 값도 지정할 수 있음 - DNS 등 설정할 수 있음 - 컨테이너가 비정상 종료된 경우 재 실행되도록 하는 옵션도 따로 제공함(default=no) docker container 끼리 연결해서 많이 사용함 - mysql container <—-> web server - 동일 머신 내에서 실행 중인 컨테이너 뿐만 아니라 remote 하게 떨어진 컨테이너도 연결할 수 있음 - scale-out에 매우 유리함 - Ambassador Pattern Highly Available Service - horizontally scalable - Fault tolerant - Modular
  • 36. Not an appendix! #3 Docker 안에 Docker를 띄우기도 한다. Docker 바이너리는 Docker로 굽는다. Docker hub에서 dockerfile들을 보다보면 어떻게 docker를 써야할지 좀 더 빠르게 느낄 수 있다. Books - 가장 먼저 만나는 Docker - Orchestrating Docker Youtube Videos - Docker at Shopify : https://www.youtube.com/watch?v=Qr0sATj9IVc - Docker fundamentals: basics, storage, networking - Introduction to Docker : https:// www.youtube.com/watch?v=UV3cw4QLJLs - How We're Using Docker : https://www.youtube.com/watch?v=GMR8DAPN1lk
  • 37. Docker Starter Guide for Introductory Level Curtis Kim(김일두) @ KAKAO