Post

CH2. 도커의 동작 원리 [그림으로 배우는 도커 & 쿠버네티스]

CH2. 도커의 동작 원리 [그림으로 배우는 도커 & 쿠버네티스]

SECTION 1. 도커의 동작 원리


2. 도커의 구조

docker structure

위 그림은 도커의 간단한 구조를 나타낸 것이다. 물리 서버가 있고, 여기서 동작하는 리눅스 운영체제가 있다.

일반적인 서버라면 이 상황에서 운영체제 위에 프로그램이나 데이터가 직접 올라가겠지만 도커를 사용하는 경우에는 OS 위에 도커 엔진이 동작하고 그 위에서 컨테이너가 동작한다.

2-1. OS는 뭘 하는가?

소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할을 한다.

하드웨어는 자신의 판단으로 여러 의미 중 적절한 것을 고르거나 적당히 일을 할 수 없고, 지시받은 대로만 수행할 수 있으므로 동작 하나하나를 지정해 주지 않으면 안 된다.

OS는 이런 일들을 하드웨어가 알아들을 수 있게 번역하여 전달하게 된다.

2-2. 도커의 리눅스 OS 비슷한 것

본래 OS는 ‘커널’이라는 부분과 ‘그 이외의 주변 부분’으로 구성된다. 주변 부분이 프로그램의 연락 내용을 커널에 전달하고 커널이 하드웨어를 다룬다.

여기서 도커의 컨테이너는 운영체제의 주변 부분을 가지고 있다. 이를 통해 프로그램의 명령을 전달받고, 이를 밑바탕이 되는 커널에 전달하는 구조로 되어 있다.

이 덕분에 OS 전체를 컨테이너에 넣지 않을 수 있어, 도커는 가장 큰 특징인 ‘가벼움’을 얻을 수 있다.

2-3. 도커는 기본적으로 Linux 용이다.

도커는 리눅스 운영체제가 동작하는 것을 전제로 하는 구조로 되어 있기 때문에 리눅스 운영체제에서만 동작할 수 있다.

그러므로 컨테이너 안에 들어 있는 주변 부분도 이에 맞춰 리눅스 운영체제의 주변 부분이어야 한다.

도커에 대한 이야기는 보통 서버 환경을 전제로 한 것이 많은데, 리눅스 운영체제가 서버에서 사용되는 경우가 많고, 리눅스용 SW도 서버용 SW가 많기 때문이다.

윈도우와 macOS에서 도커 구동하기

VirtualBox나 VMware와 같은 가상 환경 위에 리눅스 운영체제를 설치하고 그 위에서 도커를 실행하거나$^{1)}$, ‘윈도우 / macOS 용 도커 데스크톱’처럼 도커를 실행하는 데 필요한 리눅스 운영체제를 포함하는 패키지를 설치$^{2)}$해 사용한다.

즉, 도커를 사용하려면 어떤 형태로든 리눅스 운영체제를 갖춰야 한다.


SECTION 2. 도커 허브와 이미지, 그리고 컨테이너


1. 이미지

이미지는 컨테이너를 만드는 데 사용하는 금형과 같다.

이미지는 금형과 같은 역할을 하는 것으로, 하나만 있으면 똑같은 것을 여러 개 만들 수 있다. 덕분에 동일한 컨테이너를 여러 개 배치라기 편리하다.

이미지로만 컨테이너를 만들 수 있는 것이 아니라 컨테이너로도 이미지를 만들 수 있다. 업데이트를 한 컨테이너의 이미지를 만들어 해당 형태의 컨테이너를 바로 만들 수 있게 된다.

이런 특성 덕분에 동일한 컨테이너를 여러 개 만들지 않아도 컨테이너를 이동시킬 수 있다. 컨테이너는 도커 엔진만 설치되어 있으면 구동이 가능하므로, 다른 서버나 컴퓨터에 도커 엔진을 설치하고 새로운 도커 엔진에 이미지를 이용해 똑핱은 컨테이너를 생성할 수 있다.

1-1. 도커 허브

도커 허브는 공개된 컨테이너 이미지가 모여 있는 곳이다. 도커 허브에는 운영체제 주변부만 들어 있는 이미지부터 여러 소프트웨어가 포함된 이미지까지 다양한 것들이 존재한다.

또한, 리눅스에는 다양한 배포판이 있는데 이들의 이미지도 모두 제공된다.

안전한 컨테이너 이미지를 고르는 방법

  1. 공식 이미지를 사용한다

도커에서 직접 배포하거나 해당 소프트웨어를 개발 및 관리하는 기업이나 조직에서 제공하는 것이 있다. 이런 공식 이미지를 사용하면 이미지 선택도 쉽고 보안도 챙길 수 있다.

다만 컨테이너가 특정 운영체제 및 버전으로 한정되는 경우가 있어, 꼭 특정 운영체제 및 버전을 사용해야 하는 경우 주의해야 한다.

  1. 커스텀 이미지

필요한 최소의 요소가 담긴 이미지에 필요한 소프트웨어를 추가로 설치해 커스텀 이미지를 만든다.

컨테이너는 다양한 조합을 고려해야 한다. 도커를 사용할 때의 원칙 중 하나로 “한 컨테이너에 한 프로그램”이라는 것이 있다. 이렇게 관리하는 것이 보안 및 유지 관리 측면에서 유리하기 때문에 많이 쓰이는 정책이다.

운영체제 주변부를 한 종류로 통일해야 할까?

컨테이너 간에 완전히 격리되어 있으므로 서로 다른 배포판을 사용할 수 있으며, 이는 도커의 매력 중 하나이다.

하지만 컨테이너에 로그인을 할 필요가 있거나 특정 DBMS를 사용할 때는 운영체제 종류에 따라 문제를 일으킬 수 있으므로 배포판을 정확히 선택해야 한다.


SECTION 3. 도커 컨테이너의 생애주기와 데이터 저장


컨테이너는 ‘오랫동안 아껴 쓰는 물건’이 아니라 ‘그때 그때 쓰고 버리는 일회용품’에 가깝다.

1. 컨테이너의 생애 주기

컨테이너는 쉽게 만들 수 있기 때문에, 하나를 업데이트하면서 계속 사용하기보다는 업데이트된 소프트웨어가 들어있는 새로운 컨테이너를 사용하는 것이 좋다.

기본적으로 컨테이너는 여러 개를 동시에 가동하는 상황을 전제로 하는데 이를 모두 업데이트하려면 많은 수고가 든다. 이는 컨테이너의 장점이 퇴색되는 것이다.

그러므로 오래된 컨테이너를 버리고 새로운 이미지로부터 새로운 컨테이너를 만들어 갈아타는 방식을 사용한다. 이처럼 컨테이너를 ‘만들고’, ‘실행하고’, ‘종료하고’, ‘폐기’한 다음 다시 컨테이너를 ‘만드는’ 일련의 과정을 컨테이너의 생애 주기라고 한다.

1-1. 데이터 저장

컨테이너를 폐기할 때 데이터를 보존하기 위해 도커가 설치된 물리적 서버(호스트)의 디스크를 마운트해 이 디스크에 데이터를 저장한다.

여기서 마운트는 “디스크를 연결해 데이터를 기록할 수 있도록 한 상태”를 의미한다. 이런 방법으로 컨테이너 외부에 데이터를 안전하게 저장한다.

운영체제나 소프트웨어 부분은 컨테이너 형태로 만들어 쓰고 버리는 것을 반복하고, 데이터는 다른 곳에 저장해 계속 사용한다. 이는 설정 파일도 마찬가지로 파일을 수정했다면 삭제되지 않을 곳에 저장한다.

그러나 프로그램을 개발 할 때는 다른 저장소에 저장하지 않는 경우도 있으므로 컨테이너를 폐기하기 전 중요한 데이터가 컨테이너에 포함되어 있는지 확인해야 한다.


SECTION 4. 도커의 장점과 단점


1. 도커의 구조와 성질 및 그 장단점

1-1. 환경을 격리할 수 있다.

독립된 환경

독립된 환경 덕분에 여러 개의 컨테이너를 띄울 수 있으며, 똑같은 애플리케이션도 여러 개 띄울 수 있다.

이미지를 만들 수 있다.

이미지를 만들고 배포할 수 있으므로, 모든 이미지를 처음부터 만들지 않아도 이미지를 내려받아 편하게 사용할 수 있다.

또한 구축 작업이 간단해져서 교체가 쉽고, 업데이트가 쉽다. 이는 이동성이 좋다는 특성으로도 이어진다. 똑같은 컨테이너를 쉽게 만들 수 있으므로, 환경 이동이나 개발환경을 구축하기도 쉽다.

컨테이너에 커널을 포함할 필요가 없다

컨테이너에는 커널이 없어도 되어 가볍다.

1-2. 도커의 장단점

장점

  • 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다.
  • 서버 관리가 용이하다.
  • 서버 고수가 아니어도 다루기 쉽다.

단점

  • 리눅스용 소프트웨어만 지원한다.
  • 호스트 서버에 문제가 생기면 모든 컨테이너에 영향이 미친다.

1-3. 도커의 주 용도

  • 팀원 모두에게 동일한 개발환경 제공
    • 동일한 환경을 여러 개 만들기
  • 새로운 버전의 테스트
    • 격리된 환경을 이용
  • 동일한 서버가 여러 대 필요한 경우
    • 컨테이너 밖과 독립된 성질을 이용
This post is licensed under CC BY 4.0 by the author.