SlideShare a Scribd company logo
1 of 35
Download to read offline
Docker로
서버 개발 편하게 하기
2016. 05. 23
임지혁
바깥은 혼자 돌아다니기엔 위험하단다!
이것들 중 하나를 서버로 쓰렴.
노트북 데스크탑 서버 호스팅
서버 개발하기
내 컴퓨터 == 개발 환경 == 내 서버 환경
노트북
서버 개발하기
내 컴퓨터 == 개발 환경 == 내 서버 환경
!= 다른 사람 컴퓨터
노트북
서버 개발하기
내 컴퓨터 == 개발 환경 == 내 서버 환경
!= 다른 사람 컴퓨터
!= 프레젠테이션용 컴퓨터
노트북
서버 개발하기
서버 호스팅
서버 개발하기
서버 호스팅
서버 개발하기
서버 호스팅
버전 관리 (Version control)
• 소스 코드를 버전으로 관리하자!
• 게임의 Save point와 비슷한 개념
• Git, Mercurial, Bazzar, Subversion, …
• 취소 (Ctrl + Z)  Revert / 저장 (Ctrl + S)  Commit
• 백업  Push / Pull
• 브랜치(Branch), 태그 등등
버전 관리 (Version control)
• Hosting: github, Bitbucket, gitlab 등등
서버 개발하기
문제: A, B, C가 시간표 서버를 같이 개발하고 싶어한다.
환경 설정 매뉴얼의 압박…
A가 시간표에 기능을 개발하는 동안
B도 다른 시간표 기능을 개발할 수 있는가?
시간표 서버가 고장났다…
다른 시간표 서버로 바로 옮길 수 있는가?
서버가 뭔가 잘못됐다…
서버를 빨리 재시작 / 재구축할 수 있는가?
가상화 (Virtualization)
• 운영체제 수업에서 배운 컴퓨터 구조
Hardware
Operating System
Application
가상화 (Virtualization)
• 운영체제 수업에서 배운 컴퓨터 구조
Hardware
Operating System
Application
• 호스트 기반 가상 머신을 이용하는
컴퓨터 구조
Hardware
Operating System
Operating System
Application
가상화 (Virtualization)
• 필요할 때마다 컴퓨터 (가상 머신) 만들기
• 웹 서비스용 VM: Ubuntu + Apache + PHP + MySQL
• 자바 수업용 VM: Windows + Java + Eclipse
• 결재용 VM: Windows + ActiveX + 공인인증모듈 + 공인인증서
• 가상 머신 관리
• 각 가상 머신별로 CPU, 메모리, 디스크 지정 가능 (나중에 변경도 가능)
• Snapshot: Save point
• 가상 머신 내보내기
• 가상 머신 가져오기
• Virtualbox, VMware, Xen, KVM..
가상화 (Virtualization)
VMVM
VM
가상화 (Virtualization)
VMVM
VM
Docker
• Docker: 컨테이너 기반 가상화 도구
• cgroups, namespace, LXC 기반 경량 가상화
• 파일시스템 변경 사항 추적 및 관리
• 쉬운 설치 및 배포
• ex: centos 실행하기
user@ubuntu:~$ docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a3ed95caeb02: Pull complete
5989106db7fb: Pull complete
Digest: sha256:1b9adf413b3ab95ce430c2039954bb0db0c8e2672c48182f2c5b3d30373d5b71
Status: Downloaded newer image for centos:latest
Docker
• Docker: 컨테이너 기반 가상화 도구
• cgroups, namespace, LXC 기반 경량 가상화
• 파일시스템 변경 사항 추적 및 관리
• 쉬운 설치 및 배포
• ex: centos 실행하기
user@ubuntu:~$ docker run --rm -i -t centos bash
[root@f3182a332abf /]# uname -a
Linux f3182a332abf 3.19.0-56-generic #62~14.04.1-Ubuntu SMP Fri Mar 11 11:03:15 UTC 2016
x86_64 x86_64 x86_64 GNU/Linux
[root@f3182a332abf /]# cat /etc/*-release
CentOS Linux release 7.2.1511 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
Docker
Docker
• Image = Class, Program
• FROM ubuntu
• RUN apt-get install ~
• ADD sources /home/user/sources
• CMD ["/home/user/server.sh"]
• Container = Object, Process
• Docker CLI
• ps: 컨테이너 목록 보기
• start: 컨테이너 실행
• stop: 컨테이너 종료
• restart: 컨테이너 재시작
• rm: 컨테이너 삭제
• build: Dockerfile Recipe를 참조해서
이미지 생성
• rmi: 이미지 제거
Docker
• Docker hub
docker pull <repository>
• Dockerfile
• Docker image를 이렇게 만들어라
• Dockerfile 버전 관리
= VM 개발 환경 공유
Docker 활용하기
• Docker machine
• Docker는 Linux 커널을 공유해야 하는데, Windows와 OSX은 커널이 다름
• VM 안의 리눅스와 Docker 연결
Docker 활용하기
• Docker machine
• CLI: docker 명령어가 VM을 참조하도록 변경
Docker 활용하기
• Docker compose
• 여러 개의 Docker 컨테이너들을
한번에 관리하기
• ex: 시간표 프로젝트
=
Docker 활용하기
• Docker compose
• CLI: 컨테이너 상태 보기, 같이 켜고 끄기
Docker 활용하기
• Docker를 활용한 서버 개발하기
$ git add Dockerfile
$ git commit …
$ git push
Docker 활용하기
• Docker를 활용한 서버 개발하기 $ git clone ~
$ cd univ-whoareyou-server
$ docker-compose build
$ docker-compose up -d
Docker 활용하기
• Docker를 활용한 서버 개발하기
$ git pull ~
$ docker-compose build
$ docker-compose up -d
Docker를 활용해 서버 개발하기
문제: A, B, C가 시간표 서버를 같이 개발하고 싶어한다.
환경 설정 매뉴얼의 압박…? Container 실행하면 끝!
A가 시간표에 기능을 개발하는 동안
B도 다른 시간표 기능을 개발할 수 있는가? YES!
시간표 서버가 고장났다…
다른 시간표 서버로 바로 옮길 수 있는가? YES!
서버가 뭔가 잘못됐다…
서버를 빨리 재시작 / 재구축할 수 있는가? YES!
Docker를 활용해…?
Docker를 활용해…?
Docker를 활용해…?
참고
• https://www.docker.com/
• 도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다
http://www.slideshare.net/pyrasis/docker-fordummies-44424016
• 도커(Docker) 튜토리얼 : 깐 김에 배포까지
http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/
• Docker로 보는 서버 운영의 미래
http://www.slideshare.net/deview/1a6docker
• 예제: 작년 종합설계 때 썼던 웹 서버
https://bitbucket.org/jhgod/
univ-whoareyou-server
Q&A

More Related Content

What's hot

버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
민태 김
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
Docker, Inc.
 

What's hot (20)

Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Introduction to Docker storage, volume and image
Introduction to Docker storage, volume and imageIntroduction to Docker storage, volume and image
Introduction to Docker storage, volume and image
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Docker introduction (1)
Docker introduction (1)Docker introduction (1)
Docker introduction (1)
 
Docker Basics
Docker BasicsDocker Basics
Docker Basics
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 
Docker intro
Docker introDocker intro
Docker intro
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
 
Docker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersDocker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and Containers
 
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub
 

Similar to Docker로 서버 개발 편하게 하기

[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
Sang Don Kim
 

Similar to Docker로 서버 개발 편하게 하기 (20)

Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKER01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKER
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
[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
 
Docker Intro
Docker IntroDocker Intro
Docker Intro
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
[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)
 
Docker Container
Docker ContainerDocker Container
Docker Container
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
 

Docker로 서버 개발 편하게 하기

  • 1. Docker로 서버 개발 편하게 하기 2016. 05. 23 임지혁
  • 2. 바깥은 혼자 돌아다니기엔 위험하단다! 이것들 중 하나를 서버로 쓰렴. 노트북 데스크탑 서버 호스팅
  • 3. 서버 개발하기 내 컴퓨터 == 개발 환경 == 내 서버 환경 노트북
  • 4. 서버 개발하기 내 컴퓨터 == 개발 환경 == 내 서버 환경 != 다른 사람 컴퓨터 노트북
  • 5. 서버 개발하기 내 컴퓨터 == 개발 환경 == 내 서버 환경 != 다른 사람 컴퓨터 != 프레젠테이션용 컴퓨터 노트북
  • 9. 버전 관리 (Version control) • 소스 코드를 버전으로 관리하자! • 게임의 Save point와 비슷한 개념 • Git, Mercurial, Bazzar, Subversion, … • 취소 (Ctrl + Z)  Revert / 저장 (Ctrl + S)  Commit • 백업  Push / Pull • 브랜치(Branch), 태그 등등
  • 10. 버전 관리 (Version control) • Hosting: github, Bitbucket, gitlab 등등
  • 11. 서버 개발하기 문제: A, B, C가 시간표 서버를 같이 개발하고 싶어한다. 환경 설정 매뉴얼의 압박… A가 시간표에 기능을 개발하는 동안 B도 다른 시간표 기능을 개발할 수 있는가? 시간표 서버가 고장났다… 다른 시간표 서버로 바로 옮길 수 있는가? 서버가 뭔가 잘못됐다… 서버를 빨리 재시작 / 재구축할 수 있는가?
  • 12. 가상화 (Virtualization) • 운영체제 수업에서 배운 컴퓨터 구조 Hardware Operating System Application
  • 13. 가상화 (Virtualization) • 운영체제 수업에서 배운 컴퓨터 구조 Hardware Operating System Application • 호스트 기반 가상 머신을 이용하는 컴퓨터 구조 Hardware Operating System Operating System Application
  • 14.
  • 15. 가상화 (Virtualization) • 필요할 때마다 컴퓨터 (가상 머신) 만들기 • 웹 서비스용 VM: Ubuntu + Apache + PHP + MySQL • 자바 수업용 VM: Windows + Java + Eclipse • 결재용 VM: Windows + ActiveX + 공인인증모듈 + 공인인증서 • 가상 머신 관리 • 각 가상 머신별로 CPU, 메모리, 디스크 지정 가능 (나중에 변경도 가능) • Snapshot: Save point • 가상 머신 내보내기 • 가상 머신 가져오기 • Virtualbox, VMware, Xen, KVM..
  • 18. Docker • Docker: 컨테이너 기반 가상화 도구 • cgroups, namespace, LXC 기반 경량 가상화 • 파일시스템 변경 사항 추적 및 관리 • 쉬운 설치 및 배포 • ex: centos 실행하기 user@ubuntu:~$ docker pull centos Using default tag: latest latest: Pulling from library/centos a3ed95caeb02: Pull complete 5989106db7fb: Pull complete Digest: sha256:1b9adf413b3ab95ce430c2039954bb0db0c8e2672c48182f2c5b3d30373d5b71 Status: Downloaded newer image for centos:latest
  • 19. Docker • Docker: 컨테이너 기반 가상화 도구 • cgroups, namespace, LXC 기반 경량 가상화 • 파일시스템 변경 사항 추적 및 관리 • 쉬운 설치 및 배포 • ex: centos 실행하기 user@ubuntu:~$ docker run --rm -i -t centos bash [root@f3182a332abf /]# uname -a Linux f3182a332abf 3.19.0-56-generic #62~14.04.1-Ubuntu SMP Fri Mar 11 11:03:15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux [root@f3182a332abf /]# cat /etc/*-release CentOS Linux release 7.2.1511 (Core) NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora"
  • 21. Docker • Image = Class, Program • FROM ubuntu • RUN apt-get install ~ • ADD sources /home/user/sources • CMD ["/home/user/server.sh"] • Container = Object, Process • Docker CLI • ps: 컨테이너 목록 보기 • start: 컨테이너 실행 • stop: 컨테이너 종료 • restart: 컨테이너 재시작 • rm: 컨테이너 삭제 • build: Dockerfile Recipe를 참조해서 이미지 생성 • rmi: 이미지 제거
  • 22. Docker • Docker hub docker pull <repository> • Dockerfile • Docker image를 이렇게 만들어라 • Dockerfile 버전 관리 = VM 개발 환경 공유
  • 23. Docker 활용하기 • Docker machine • Docker는 Linux 커널을 공유해야 하는데, Windows와 OSX은 커널이 다름 • VM 안의 리눅스와 Docker 연결
  • 24. Docker 활용하기 • Docker machine • CLI: docker 명령어가 VM을 참조하도록 변경
  • 25. Docker 활용하기 • Docker compose • 여러 개의 Docker 컨테이너들을 한번에 관리하기 • ex: 시간표 프로젝트 =
  • 26. Docker 활용하기 • Docker compose • CLI: 컨테이너 상태 보기, 같이 켜고 끄기
  • 27. Docker 활용하기 • Docker를 활용한 서버 개발하기 $ git add Dockerfile $ git commit … $ git push
  • 28. Docker 활용하기 • Docker를 활용한 서버 개발하기 $ git clone ~ $ cd univ-whoareyou-server $ docker-compose build $ docker-compose up -d
  • 29. Docker 활용하기 • Docker를 활용한 서버 개발하기 $ git pull ~ $ docker-compose build $ docker-compose up -d
  • 30. Docker를 활용해 서버 개발하기 문제: A, B, C가 시간표 서버를 같이 개발하고 싶어한다. 환경 설정 매뉴얼의 압박…? Container 실행하면 끝! A가 시간표에 기능을 개발하는 동안 B도 다른 시간표 기능을 개발할 수 있는가? YES! 시간표 서버가 고장났다… 다른 시간표 서버로 바로 옮길 수 있는가? YES! 서버가 뭔가 잘못됐다… 서버를 빨리 재시작 / 재구축할 수 있는가? YES!
  • 34. 참고 • https://www.docker.com/ • 도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다 http://www.slideshare.net/pyrasis/docker-fordummies-44424016 • 도커(Docker) 튜토리얼 : 깐 김에 배포까지 http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/ • Docker로 보는 서버 운영의 미래 http://www.slideshare.net/deview/1a6docker • 예제: 작년 종합설계 때 썼던 웹 서버 https://bitbucket.org/jhgod/ univ-whoareyou-server
  • 35. Q&A