본문 바로가기
docker

docker 기초 정리

by 브라더빅 2021. 4. 26.

docker 개인공부 및 정리

도커란?

컨테이너 기반의 가상화 플랫폼이다. 

여기서 컨테이너란, 현재 사용중인 OS에서 격리된 일종의 가상공간이다. 이 환경에서 개발자들은 기본적인 OS환경내에 구축된 개발환경과 다른 독립적인 개발 환경 및 활동을 할 수 있다. 

더보기

도커는 2013년 3월에 그 개념이 발표가 되고, 2014년 6월에 도커 1.0v이 발표가 되었으며, 2014년 구글의 발표에 따르면 구글은 모든서비스를 컨테이너화하였고, 매주 20억개의 컨테이너가 구동된다고 한다.

기존의 가상화 방식인 VMware이나 VirtualBox와 다른점은 기존의 가상화 방식은 가상화 공간에 OS부터 개발환경까지 모두 설치하는 방식이다. 예를들면 윈도우 10안에 우분투나 레드햇과 같은 리눅스기반 OS를 설치하는 격이다. 이 방식은 비교적 사용이 간단하지만, 운용에 있어서 무겁고 느려서 서비스 운영에 있어서 비효율적이다.

더보기

이러한 문제를 해결하기위해 CPU의 가상화 기술(HVM)을 이용한 KVM(Kernel-based Virtual Machine) 반가상화 (Paravirtualization)방식의 Xen이  등장했다. 이러한 방식은 게스트 OS가 필요하긴 하지만 전체OS를 가상화하는 방식이 아니였기 때문에 호스트형 가상화 방식에 비해 성능이 향상되었다. 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었다.

가상머신과 도커의 구조

그러나 이러한 방식 역시 OS를 설치하여 가상화하기때문에 선능적인 문제가 존재하였다. 이를 개선하기위하여 프로세스를 격리하는 방식이 나타난다.

 

리눅스에서는 이 방식을 리눅스 컨테이너라고하며 단순하게 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다. CPU나 메모리도 프로세스가 필요한만큼만 동적할당하고 사용하기때문에 성능적으로 손실이 거의 없다.

더보기

도커의 기본 네트워크 모드는  Bridge  모드로 약간의 성능 손실이 있다. 네트워크 성능이 중요한 프로그램의 경우  --net=host  옵션을 고려해야한다.

하나의 서버에서 여러개의 컨테이너를 실행 가능하고, 서로 독립적으로 실행될 수 있다. 각 컨테이너에서는 VM환경처럼 다양한  apt-get  이나  yum  과같은 명령어를 실행시킬 수 있으며, 패키지또한 설치 가능하다. 또한 서로 독립적이지만, 도커 컴포즈를 이용하여 여러 컨테이너를 관리하고 연동할 수 있으며, 컨테이너 밖과 통신 및 DB등을 공유 가능하다.


도커 이미지와 컨테이너의 작동

도커에서 컨테이너와 함께 중요한 개념은 이미지이다.

이미지는 컨테이너 실행에 필요한 파일과 설정값, 각종 패키지, 개발환경 등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다(Immutable). 

컨테이너는 이러한 이미지를 기반으로 실행된 가상의 공간이며, 이 공간에서 추가되거나 변동된 사항들은 컨테이너에 저장된다. 같은 이미지로부터 여러 컨테이너가 생성가능하며, 컨테이너가 삭제되더라도 이미지는 그대로 남아있다.

더보기

도커 이미지는 Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리할 수 있다. 현재 공개된 도커 이미지는 50만개가 넘고 Docker hub의 이미지 다운로드 수는 80억회에 이른다. 누구나 쉽게 이미지를 만들고 배포할 수 있다.

도커 이미지는 컨테이너를 실행하기위한 모든 정보/의존성등을 가지고 있기 때문에 보통 용량이 수백메가에 이른다.

만약 도커의 이미지와 같은성격을 가지는(모든 정보/의존성을 가지는 정보파일) 어떠한 파일이 아주 작은부분(파일 하나추가)이 업데이트 되었다면, 일반적으론 해당파일을 처음부터 다시 받아야만한다. 이는 매우 비효율적이고, 도커는 이러한 문제를 해결하기 위해 레이어(Layer)라는 개념을 도입했다.

이미지(Image)의 레이어(Layer) 저장방식

레이어는 유니온 파일 시스템을 이용하여 여러개의 레이어(read only)를 하나의 파일시스템으로 사용할 수 있게 해준다. 위 그림을 예시로들면, 우분투(ubuntu)이미지는  C  레이어로 구성되어 있고, 이를 기반으로 만들어진 nginx 이미지는      C  nginx  로 구성이 된다. 또, 이 nginx이미지를 기반으로 web app를 만들었다면,      C   nginx  web app source  가 구성요소가 된다. 여기에서  web app source  를 수정한다면  web app source(modified)  레이어만 다운받으면 되기 때문에 효율적으로 이미지를 관리할 수 있다.

이러한 이미지를 이용하여 컨테이너를 생성할때도 마찬가지로 레이어 방식을 사용하며, 이미지(read only)위에 읽기/쓰기(read/write) 레이어를 추가한다. 

 

이미지 url

도커 이미지 관리는 url방식으로 관리가 되며 태그를 붙일 수 있다. ubuntu 14.04 이미지는  docker.io/library/ubuntu:14.04 또는 docker.io/library/ubuntu:trusty 이고 docker.io/library 는 생략가능하여 ubuntu:14.04 로 사용할 수 있다. 이러한 방식은 이해하기 쉽고 편리하게 사용할 수 있으며 태그 기능을 잘 이용하면 테스트나 롤백도 쉽게 할 수 있다.

 

Dockerfile

도커는 이미지를 만들기위해  Dockerfile  이라는 파일에 자체 DSL(Domain Specific Language)언어를 이용하여 이미지 생성과정을 적는다. 이는 서버에 어떤 프로그램을 설치하려고 이것저것 의존성 패키지를 설치하고 설정파일을 만드는 등의 과정을 Dockerfile에서 관리할 수 있다.

참고자료

brother-big.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F#

 

TISTORY

나를 표현하는 블로그를 만들어보세요.

www.tistory.com

www.youtube.com/watch?v=hWPv9LMlme8

www.yalco.kr/36_docker/

 

가장 쉽게 배우는 도커

어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

www.yalco.kr

 

※ 위 내용에 오류가 있거나 오타 및 각종 수정사항을 댓글을 주시면, 확인 후 수정하겠습니다. 각종 자료는 구글링을 통한 다양한 기술자료에서 인용하거나 정리한자료이며, 출처를 최대한 표기하겠지만 문제사항이 있다면 적극적인 피드백 및 댓글 부탁드립니다.

'docker' 카테고리의 다른 글

docker 명령어  (0) 2021.04.27