17. 그림과 실습으로 배우는 도커 & 쿠버네티스 CHAP.2
1. 도커의 동작 원리
1-1. 도커의 구조
- 물리서버 < 리눅스 운영체제 < 도커엔진 < 컨테이너들..
- 일반적인 서버는 운영체제 위에 프로그램이나 데이터가 직접 올라가지만, 도커는 운영체제 위에 도커 엔진이 동작하고, 그 위에서 컨테이너가 동작한다.
1-2. 컨테이너 내부 & 운영체제의 역할
- 컨테이너에는 리눅스 운영체제 비슷한 무언가가 들어있다.
- 운영체제는 소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할이다.
- 운영체제는
커널
과 그 외의 주변 부분
으로 구성된다.
- 주변 부분이 프로그램의 연락 내용을 커널에 전달하고, 커널이 하드웨어를 다룬다.
- 도커에서는 컨테이너가 완전히 분리돼 있으므로, 밑바탕이 되는 리눅스 운영체제의 주변부분이 컨테이너 속 프로ㅡ램의 명령을 전달받을 수 없다.
- 따라서, 컨테이너 속에 운영체제의 주변 부분이 들어있어 프로그램의 명령을 전달받고, 이를 밑바탕이 되는 커널에 전달하는 구조로 되어 있다.
2. 도커 허브와 이미지, 컨테이너
- 컨테이너를 생성하려면 먼저 이미지를 만들어야 한다. 이미지는 컨테이너를 찍어내는 '빵틀'로, 컨테이너의 설계도 같은 역할을 한다.
- 우리가 실제로 사용하는 것은 컨테이너이며, 이미지는 그 자체로는 소용은 없다.
- 따라서, 이미지는 하나만 있으면 여러개의 컨테이너를 만들 수 있다.
2-1. 컨테이너로도 이미지를 만들 수 있다.
- 이미 만든 컨테이너에 손을 대어, 컨테이너의 금형을 새로 만드는 과정이다.
- 개조된 컨테이너로부터 이미지를 만들고 나면 새로만든 이미지를 사용하여 개조된 컨테이너를 여러개 만들 수 있다.
- 예를들어, 특정 소프트웨어나, 시스템을 넣은 새로운 이미지를 만들면 다수의 서버를 준비하는 작업이 매우 간단해진다.
2-2. 도커 엔진간에 이동이 가능하다.
- 동일한 컨테이너를 여러개 만들지 않더라도 이러한 특성을 이용해 다른 물리 서버에 설치된 도커 엔진으로 컨테이너를 이동시킬 수 있다.
- 컨테이너는 도커 엔진만 설치 돼 있으면 구동이 가능하므로, 다른 서버나 컴퓨터에 도커 엔진을 설치하고, 새로운 도커 엔진에 이미지를 이용해 똑같은 컨테이너를 생성하면 된다.
- 컨테이너 자체가 이동하는 것은 아니고, '이미지'를 통해 컨테이너가 이동한 것과 같은 효과를 얻을 수 있다.
2-3. 도커 허브와 도커 이미지
- 도커허브는 공식적으로 운영되는 도커 레지스트리(도커 이미지를 배포하는 서비스)이다.
- 공개된 컨테이너의 이미지가 모여있는 곳이다.
3. 도커 컨테이너의 생애주기와 데이터 저장
- 도커 컨테이너는 일회용품에 가깝다.
- 컨테이너 하나를 업데이트하면서 계속 사용하기 보다는, 업데이트 된 소프트웨어가 들어있는 새로운 컨테이너를 사용하는 것이 좋다.
- 즉, 새로운 버전이 나오면 새로운 컨테이너로 갈아타는 것이다.
- 이것이 가능한 이유는, 컨테이너는 일반적으로 여러 개를 동시에 가동하는 상황을 전제로 하기 때문이다.
- 이렇듯 컨테이너를 만들고, 실행하고, 종료하고, 폐기한 다음 다시 컨테이너를 만드는 일련의 과정을
컨테이너의 생애주기
라고 한다.
3-1. 데이터 저장
- 컨테이너 폐기시, 컨테이너에 들어있던 데이터는 당연히 사라진다.
- 이를 방지하기 위해 보통은 도커가 설치된 물리적 서버(호스트)의 디스크를 마운트해 이 디스크에 데이터를 저장한다.
- 마운트 : 디스크를 연결해 데이터를 기록할 수 있도록 한 상태
- 컨테이너가 폐기되더라도, 데이터는 컨테이너 외부에 안전하게 저장되어 사라지지 않는다.
- 그리고 데이터를 외부에 저장하면 다른 컨테이너와 데이터를 공유 할 수 있어서 매우 편리하다.
4. 도커의 장점과 단점
4-1. 장점
- 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다.
- 특히나 컨테이너에는 커널이 포함되지 않아서, 하드웨어를 재현하는 가상화 기술에 비하면 압도적으로 가볍다.
- 서버 관리가 용이하다.
- 각 소프트웨어가 독립적인 환경이어서, 다른 소프트웨어에 영향을 끼치지 않는다.
- 컨테이너 교체 & 수정도 쉬워서 환경 이전도 간단하다.
- 서버 고수가 아니어도 다루기 쉽다.
4-2. 단점
- 리눅스용 소프트웨어밖에 지원하지 않는다.
- 호스트 서버(물리 서버)에 문제가 생기면 모든 컨테이너에 영향이 미친다.
- 컨테이너 하나를 장기간 사용할 때느 큰 장점을 느끼기 어렵다.
4-3. 도커를 사용하면 좋은 케이스
- 팀원 모두에게 동일한 개발환경 제공하기 (= 동일환경을 여러개 만들기)
- 새로운 버전의 테스트 (=격리된 환경 이용)
- 운영체제나 라이브러리 등의 새로운 버전을 먼저 개발환경에서 테스트한 후 운영환경에 적용할 때 컨테이너 활용 가능
- 동일한 서버가 여러대 필요한 경우 (=컨테이너 밖과 독립된 성질을 이용)
1-