Docker Study Review
Youngbin Han <sukso96100@gmail.com>
한영빈
성공회대학교 소프트웨어공학과
이것저것 여러가지 합니다(...)
sukso96100@gmail.com
github.com/sukso96100
youngbin.xyz
Index
Docker 가 뭐죠?
스터디에서 한 것과 배운 것
프로젝트에 적용한 사례 소개
Live Demonstration
Docker 가 뭐죠?
클라우드 컴퓨팅 이전...
물리적인 머신으로 서버를 운영
장비를 구입하고 설치하는데 시간과 비용이 많이 듬
소프트웨어 설치/설정 자동화는 스크립트 등을 이용
클라우드 컴퓨팅 이후
가상머신을 대여하여 사용
기존 물리적 머신보다 유지보수가 용이함
클릭 몇번이면, 가상머신 수백~수천대를 만들고 지울 수 있음
가상머신 수백~수천대는 스크립트로는 한계가 있음
Immutable Infrastructure
서버안의 얽히고 섥힌 의존성 관리하기 귀찮다! 하지 말자!
대신 운영 환경을 통째로 이미지로 만들고
이미지로부터 가상 머신(운영 환경) 수백~수천대를 만들자!
업데이트 해야 한다면?
이미지를 새로 만들고
기존 가상머신 부수고
새 이미지로부터 가상 머신을 만들자!
함정 : 무겁고 느리다.
가상머신(Virtual Machine)
가상머신의 단점
완전한 하나의 머신
항상 가상 머신 안에 OS 가 설치되어 있어야 함
이미지로 만들면 이미지 용량이 매우 커짐
용량이 커서 네트워크를 통해 주고 받기도 부담스러움
하드웨어 까지 전부 다 가상화 함
물리적인 머신에 비해 성능이 떨어짐
다양한 가상화 방식이 나왔지만 성능은 여전히 부족함
컨테이너(Container)
컨테이너(Container)
리눅스 커널 단계에서 지원하는 가상의 격리된 공간을 만들어 내는 기능이자, 경량화된 가상화 방식.
LinuX Container(LXC) 라는 이름으로 제공됨.
이미지에는 필요한 라이브러리와 소프트웨어만 포함.
OS 가 포함되지 않아 훨씬 용량이 작음.
하드웨어를 가상화 하지 않음.
대신 호스트의 커널을 사용.
가상 머신에 비해 월등히 빠름.
격리된 환경에 항상 동일한 환경 보장.
저는 잘 되는대요? 같은 말을 하게 되는 경우가 사라짐.
Docker
리눅스 컨테이너는 격리된 공간만 제공할 뿐, 서버 운영 등에 필요한 부가적인 기능이 부족함.
Docker 는 컨테이너를 기반으로, 이미지를 편리하게 생성, 관리, 배포 할 수 있게 하는 컨테이너 엔진.
이미지 생성과 관리에 특화된 기능과 서비스를 제공함.
Docker Hub(hub.docker.com)
Docker 이미지 공유 서비스
스터디에서
한 것과 배운것
왜 참여했나요?
Docker 를 기반으로 하는 PaaS 도구인 Dokku 를 사용해 옴.
좀 불안정하고, 설정이 꼬이는 경우가 있음.
git 으로 push 해서 배포 하는건 좋은데, 배포 성공 할때 까지 지켜봐야 함(...)
그동안 다른 작업을 못함.
그냥 Docker 를 공부해서 쓰는것이 나을 것이라고 판단.
때마침 우분투 커뮤니티에서 Docker Study 계획을 발표함.
어쩌다 보니 스터디 리더가 되었다(...)
스터디 개요
2016.07.29 ~ 2016.09.21
매주 수요일 저녁 7:30 ~ 9:30
토즈 홍대점에서 진행
책 : 가장 빨리 만나는 Docker
원고가 공개되어 있음
pyrasis.com/docker.html
미리 공부해와서 질문/답변 주고 받는 방식으로 진행
1주차 - (1~5장) 설치, 컨테이너 사용, 이미지 생성 등
2주차 - (5~7장) 데이터 볼륨, Dockerfile 등
3주차 - (8~9장) 도커로 앱 배포, 도커 모니터링
4주차 - (10~15장) 클라우드에서 도커 사용하기, 도커 허브, 도커 리모트 API
5주차 - (16~20장) Core OS, 도커로 앱 구축 등 (책 진도 끝)
6주차 - 도커로 안드로이드 앱 돌리기
7주차 - LXD 와 도커 비교해보기
8주차 - 도커 네트워크, 스토리지, 보안
몇가지 배운 점들
Docker 는
Immutable Infrastructure 를 철저히 지향함
컨테이너를 업데이트 하는 기능이 없음
대신, 기존 컨테이너를 부수고 최신 이미지로부터 컨테이너를 새로 만들면 됨.
컨테이너에 직접 접속하여, 읽기/쓰기 작업을 하거나 업데이트를 하는 것은 안티 패턴.
이미 컨테이너 내부에 복잡한 의존성이 설정되어 있고, 컨테이너에 접속하여 이를 관리 하거나 수정 하는 것은 매우 복잡하고 어려움.
파일 시스템 접근이 필요하면, 데이터 볼륨 기능을 이용
완벽히 격리된 환경을
제공하지는 않음
데이터 볼륨 기능을 이용하면, 호스트에서 컨테이너의 파일에 접근하여 쉽게 읽기/쓰기 작업을 할 수 있음.
이는 장점이 되기도 하지만, 보안 문제로 이어질 수도 있다는 단점이 있기도 함.
컨테이너가 가지는 Capability 에 따라, 더 격리된 컨테이너가 될 수도 있고, 덜 격리된 컨테이너가 될 수도 있음.
Remote API
Remote API 를 이용하면, REST API 를 통해 Docker 를 제어할 수 있음.
잘 활용하면 원격 제어가 가능할 뿐만 아니라, 자동화도 가능.
정작 본인은 Remote API 를 별로 공부하지 않음(...)
스터디의 끝 == 치킨 + 맥주
프로젝트에
적용한 사례 소개
Foressst 앱의 서버측 소스코드 관리에 GitLab.com 을 사용함.
GitLab.com 에서 무료로 제공하는
내장된 서비스나 기능이 많아 이를 활용함.
활용한 무료 서비스/기능들
비공개 저장소(무료, 제한없음)
지속적 통합(Continuous Integration)
GitLab CI 라는 이름으로 제공됨
Docker Registry
GitLab Container Registry 라는 이름으로 제공됨
Docker Image 보관에 사용
CI, Docker Registry, Docker 를 이용한 서버측 코드 배포
CI(지속적 통합) 을 이용하여 Docker Image 생성 자동화
생성된 Docker Image 는 Docker Registry 에 보관
서버측 코드를 배포할 서버에서는 Docker 를 설치하고, Docker Image 를 받아(pull) 이미지로부터 새로운 컨테이너로 만들어 실행(run)
이러한 방식을 통해 얻은 이점
Docker Image 빌드 자동화
자동으로 빌드 되는 동안
딴짓을 하거나
다른 작업을 계속 할 수 있음.
Docker Registry, Docker 를 이용한 배포
서버측 코드 실행을 위해 뭘 설치하고 설정해야 하나 고민할 필요 없이, Docker 설치하고 Docker Registry 에서 이미지를 받아 바로 배포하면 됨. 이미지 안에 이미 의존성이 모두 포함되어 있음.
항상 격리된 환경에 같은 환경 이므로, 테스트 서버에서는 잘 되다가 실제 서버에서는 안되는 등의 문제가 사라짐.
배포 과정이 더 빠르고 단순해짐(서버 이전도 마찬가지)
Docker Compose
컨테이너간의 연결 설정, 포트 설정, 실행할 컨테이너 갯수 등을 미리 하나의 설정 파일에 정의하고. 설정 파일에 따라 한번에 여러개의 컨테이너를 켜고 끌 수 있게 해줌.
로드 벨런싱을 하거나, DB 컨테이너와 연결설정을 하는 등, 다수의 컨테이너로 하나의 서비스를 구성하여 실행할 때 유용함.
Live Demonstration
감사합니다!
Made with Slides.com