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

Docker로 서버 개발 편하게 하기

  • 1.
    Docker로 서버 개발 편하게하기 2016. 05. 23 임지혁
  • 2.
    바깥은 혼자 돌아다니기엔위험하단다! 이것들 중 하나를 서버로 쓰렴. 노트북 데스크탑 서버 호스팅
  • 3.
    서버 개발하기 내 컴퓨터== 개발 환경 == 내 서버 환경 노트북
  • 4.
    서버 개발하기 내 컴퓨터== 개발 환경 == 내 서버 환경 != 다른 사람 컴퓨터 노트북
  • 5.
    서버 개발하기 내 컴퓨터== 개발 환경 == 내 서버 환경 != 다른 사람 컴퓨터 != 프레젠테이션용 컴퓨터 노트북
  • 6.
  • 7.
  • 8.
  • 9.
    버전 관리 (Versioncontrol) • 소스 코드를 버전으로 관리하자! • 게임의 Save point와 비슷한 개념 • Git, Mercurial, Bazzar, Subversion, … • 취소 (Ctrl + Z)  Revert / 저장 (Ctrl + S)  Commit • 백업  Push / Pull • 브랜치(Branch), 태그 등등
  • 10.
    버전 관리 (Versioncontrol) • 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
  • 15.
    가상화 (Virtualization) • 필요할때마다 컴퓨터 (가상 머신) 만들기 • 웹 서비스용 VM: Ubuntu + Apache + PHP + MySQL • 자바 수업용 VM: Windows + Java + Eclipse • 결재용 VM: Windows + ActiveX + 공인인증모듈 + 공인인증서 • 가상 머신 관리 • 각 가상 머신별로 CPU, 메모리, 디스크 지정 가능 (나중에 변경도 가능) • Snapshot: Save point • 가상 머신 내보내기 • 가상 머신 가져오기 • Virtualbox, VMware, Xen, KVM..
  • 16.
  • 17.
  • 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"
  • 20.
  • 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 dockerpull <repository> • Dockerfile • Docker image를 이렇게 만들어라 • Dockerfile 버전 관리 = VM 개발 환경 공유
  • 23.
    Docker 활용하기 • Dockermachine • Docker는 Linux 커널을 공유해야 하는데, Windows와 OSX은 커널이 다름 • VM 안의 리눅스와 Docker 연결
  • 24.
    Docker 활용하기 • Dockermachine • CLI: docker 명령어가 VM을 참조하도록 변경
  • 25.
    Docker 활용하기 • Dockercompose • 여러 개의 Docker 컨테이너들을 한번에 관리하기 • ex: 시간표 프로젝트 =
  • 26.
    Docker 활용하기 • Dockercompose • 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!
  • 31.
  • 32.
  • 33.
  • 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.