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 Hub(hub.docker.com)
스터디에서
한 것과 배운것
왜 참여했나요?
- 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
감사합니다!
Copy of Docker Study Review
By sukso96100
Copy of Docker Study Review
- 469