Upload
dronix
View
1.131
Download
11
Embed Size (px)
Citation preview
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 centosUsing default tag: latestlatest: Pulling from library/centos
a3ed95caeb02: Pull complete5989106db7fb: Pull completeDigest: sha256:1b9adf413b3ab95ce430c2039954bb0db0c8e2672c48182f2c5b3d30373d5b71Status: 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 -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"
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 hubdocker 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