35
Docker서버 개발 편하게 하기 2016. 05. 23 임지혁

Docker로 서버 개발 편하게 하기

  • Upload
    dronix

  • View
    1.131

  • Download
    11

Embed Size (px)

Citation preview

Page 1: Docker로 서버 개발 편하게 하기

Docker로서버 개발 편하게 하기

2016. 05. 23

임지혁

Page 2: Docker로 서버 개발 편하게 하기

바깥은 혼자 돌아다니기엔 위험하단다!

이것들 중 하나를 서버로 쓰렴.

노트북 데스크탑 서버 호스팅

Page 3: Docker로 서버 개발 편하게 하기

서버 개발하기

내 컴퓨터 == 개발 환경 == 내 서버 환경

노트북

Page 4: Docker로 서버 개발 편하게 하기

서버 개발하기

내 컴퓨터 == 개발 환경 == 내 서버 환경

!= 다른 사람 컴퓨터

노트북

Page 5: Docker로 서버 개발 편하게 하기

서버 개발하기

내 컴퓨터 == 개발 환경 == 내 서버 환경

!= 다른 사람 컴퓨터

!= 프레젠테이션용 컴퓨터

노트북

Page 6: Docker로 서버 개발 편하게 하기

서버 개발하기

서버 호스팅

Page 7: Docker로 서버 개발 편하게 하기

서버 개발하기

서버 호스팅

Page 8: Docker로 서버 개발 편하게 하기

서버 개발하기

서버 호스팅

Page 9: Docker로 서버 개발 편하게 하기

버전 관리 (Version control)

• 소스 코드를 버전으로 관리하자!

• 게임의 Save point와 비슷한 개념

• Git, Mercurial, Bazzar, Subversion, …

• 취소 (Ctrl + Z) Revert / 저장 (Ctrl + S) Commit

• 백업 Push / Pull

• 브랜치(Branch), 태그 등등

Page 10: Docker로 서버 개발 편하게 하기

버전 관리 (Version control)

• Hosting: github, Bitbucket, gitlab 등등

Page 11: Docker로 서버 개발 편하게 하기

서버 개발하기

문제: A, B, C가 시간표 서버를 같이 개발하고 싶어한다.

환경 설정 매뉴얼의 압박…

A가 시간표에 기능을 개발하는 동안

B도 다른 시간표 기능을 개발할 수 있는가?

시간표 서버가 고장났다…

다른 시간표 서버로 바로 옮길 수 있는가?

서버가 뭔가 잘못됐다…

서버를 빨리 재시작 / 재구축할 수 있는가?

Page 12: Docker로 서버 개발 편하게 하기

가상화 (Virtualization)

• 운영체제 수업에서 배운 컴퓨터 구조

Hardware

Operating System

Application

Page 13: Docker로 서버 개발 편하게 하기

가상화 (Virtualization)

• 운영체제 수업에서 배운 컴퓨터 구조

Hardware

Operating System

Application

• 호스트 기반 가상 머신을 이용하는컴퓨터 구조

Hardware

Operating System

Operating System

Application

Page 14: Docker로 서버 개발 편하게 하기
Page 15: Docker로 서버 개발 편하게 하기

가상화 (Virtualization)

• 필요할 때마다 컴퓨터 (가상 머신) 만들기• 웹 서비스용 VM: Ubuntu + Apache + PHP + MySQL

• 자바 수업용 VM: Windows + Java + Eclipse

• 결재용 VM: Windows + ActiveX + 공인인증모듈 + 공인인증서

• 가상 머신 관리• 각 가상 머신별로 CPU, 메모리, 디스크 지정 가능 (나중에 변경도 가능)

• Snapshot: Save point

• 가상 머신 내보내기

• 가상 머신 가져오기

• Virtualbox, VMware, Xen, KVM..

Page 16: Docker로 서버 개발 편하게 하기

가상화 (Virtualization)

VMVM

VM

Page 17: Docker로 서버 개발 편하게 하기

가상화 (Virtualization)

VMVM

VM

Page 18: Docker로 서버 개발 편하게 하기

Docker

• Docker: 컨테이너 기반 가상화 도구• cgroups, namespace, LXC 기반 경량 가상화

• 파일시스템 변경 사항 추적 및 관리

• 쉬운 설치 및 배포

• ex: centos 실행하기

user@ubuntu:~$ docker pull centosUsing default tag: latestlatest: Pulling from library/centos

a3ed95caeb02: Pull complete5989106db7fb: Pull completeDigest: sha256:1b9adf413b3ab95ce430c2039954bb0db0c8e2672c48182f2c5b3d30373d5b71Status: Downloaded newer image for centos:latest

Page 19: Docker로 서버 개발 편하게 하기

Docker

• Docker: 컨테이너 기반 가상화 도구• cgroups, namespace, LXC 기반 경량 가상화

• 파일시스템 변경 사항 추적 및 관리

• 쉬운 설치 및 배포

• ex: centos 실행하기

user@ubuntu:~$ docker run --rm -i -t centos bash[root@f3182a332abf /]# uname -aLinux 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/*-releaseCentOS Linux release 7.2.1511 (Core)NAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"

Page 20: Docker로 서버 개발 편하게 하기

Docker

Page 21: 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: 이미지 제거

Page 22: Docker로 서버 개발 편하게 하기

Docker

• Docker hubdocker pull <repository>

• Dockerfile• Docker image를 이렇게 만들어라

• Dockerfile 버전 관리= VM 개발환경 공유

Page 23: Docker로 서버 개발 편하게 하기

Docker 활용하기

• Docker machine• Docker는 Linux 커널을 공유해야 하는데, Windows와 OSX은 커널이 다름

• VM 안의 리눅스와 Docker 연결

Page 24: Docker로 서버 개발 편하게 하기

Docker 활용하기

• Docker machine• CLI: docker 명령어가 VM을 참조하도록 변경

Page 25: Docker로 서버 개발 편하게 하기

Docker 활용하기

• Docker compose• 여러 개의 Docker 컨테이너들을

한번에 관리하기

• ex: 시간표 프로젝트

=

Page 26: Docker로 서버 개발 편하게 하기

Docker 활용하기

• Docker compose• CLI: 컨테이너 상태 보기, 같이 켜고 끄기

Page 27: Docker로 서버 개발 편하게 하기

Docker 활용하기

• Docker를 활용한 서버 개발하기

$ git add Dockerfile$ git commit …$ git push

Page 28: Docker로 서버 개발 편하게 하기

Docker 활용하기

• Docker를 활용한 서버 개발하기$ git clone ~$ cd univ-whoareyou-server$ docker-compose build$ docker-compose up -d

Page 29: Docker로 서버 개발 편하게 하기

Docker 활용하기

• Docker를 활용한 서버 개발하기

$ git pull ~$ docker-compose build$ docker-compose up -d

Page 30: Docker로 서버 개발 편하게 하기

Docker를 활용해 서버 개발하기

문제: A, B, C가 시간표 서버를 같이 개발하고 싶어한다.

환경 설정 매뉴얼의 압박…? Container 실행하면끝!

A가 시간표에 기능을 개발하는 동안

B도 다른 시간표 기능을 개발할 수 있는가? YES!

시간표 서버가 고장났다…

다른 시간표 서버로 바로 옮길 수 있는가? YES!

서버가 뭔가 잘못됐다…

서버를 빨리 재시작 / 재구축할 수 있는가? YES!

Page 31: Docker로 서버 개발 편하게 하기

Docker를 활용해…?

Page 32: Docker로 서버 개발 편하게 하기

Docker를 활용해…?

Page 33: Docker로 서버 개발 편하게 하기

Docker를 활용해…?

Page 34: 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

Page 35: Docker로 서버 개발 편하게 하기

Q&A