16. 그림과 실습으로 배우는 도커 & 쿠버네티스 CHAP.1
1. 도커란 무엇인가?
- 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어.
- 컴퓨터에 엑셀, 메일 프로그램 등이 있는 것 처럼 서버에는 아파치, MySQL과 같은 여러 프로그램이 함께 동작한다.
- 도커는 이렇게 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다.
- 그것도 운영체제 통째로 격리하는 기능이다.
1-1. 컨테이너와 도커엔진
- 개인용 컴퓨터 또는 서버상의 환경을 조립형 창고같은 작은 방으로 분할한다고 생각하자. 그리고 작게 쪼갠 독립된 창고에 데이터나 프로그램을 두는 것이다.
- 이 조립형 창고를
컨테이너
라고 한다. - 그리고, 이 컨테이너를 다루는기능을 제공하는 소프트웨어가
도커
이다. - 도커를 사용하려면 도커 소프트웨어의 본체인
도커 엔진
을 설치해야한다.- 요 도커엔진을 사용하여 컨테이너를 생성하고 구동할 수 있다.
1-2 컨테이너를 만들려면 이미지가 필요하다.
- 컨체이너를 만드려면 도커엔진 외에도, 컨테이너의 빵틀과 같은 역할을 하는 이미지가 필요하다.
- 이미지에는 종류가 많다. 담고있는 소프트웨어의 종류에 따라서 다양한 이미지를 사용한다.
- 아파치 컨테이너 - 아파치 이미지
- MySQL 컨테이너 - MySQL 이미지
- 컨테이너는 여러개 만들 수도 있다. 용량이 허락하는 한 하나의 도커에서 여러개를 만들수 있다.
1-3 도커는 리눅스 컴퓨터에서 사용된다.
- 내부적으로 리눅스가 사용된다.
- 컨테이너에서 동작시킬 프로그램도 리눅스용 프로그램이다.
1-4. 왜 독립된 환경에 격리해야할까?
- 대부분의 프로그램은 단독으로 동작하지 않고, 어떤실행 환경이나 라이브러리에 의존한다.
- 만약 하나의 환경에 여러 프로그램이 존재할 경우, 하나의 의존성이 업데이트되면 여러 프로그램들이 영향을 받는다.
- 즉, 하나의 환경에서는 동일한 버전을 사용해야하는데, 이 때 생기게 되는 문제점들이 있으므로 환경을 아예 격리하는 것!
2. 서버와 도커
1-1. 기능적 의미의 서버와 물리적 컴퓨터로서의 서버
- 기능적 의미의 서버
- 즉 ㅇㅇ 서버 라고 하는 것들.
- ㅇㅇ이라는 기능을 제공한다.
- ex. 메일 서버, 데이터베이스 서버, 웹 서버
- 물리적 컴퓨터로서의 서버
- '실물'
- 데스크톱 컴퓨터와 마찬가지로 어딘가에 물리적으로 존재하는 컴퓨터
- 개인용 컴퓨터는 개인이 사용하지만, 서버는 여러 사람이 원격으로 접근하여 사용한다.
1-2. 서버의 기능은 소프트웨어가 제공한다.
- 서버의 기능은 소프트웨어가 제공하므로, 소프트웨어를 설치할 때 '서버'의 기능이 생긴다.
- 아파치 설치 -> 웹 서버 기능
- Sendmail 메일 서버 소프트웨어 설치 -> 메일 서버
- 따라서, 여러가지 소프트웨어를 한 컴퓨터에 설치할 수도 있다.
- 웹 서버와 메일서버, FTP 서버를 한 컴퓨터에서 제공하는 경우도 있으니!
- 여러 기능적 의미의 서버들이 하나의 물리적 컴퓨터에 함께 존재 가능함
1-3. 컨테이너를 활용하여 여러 기능 서버를 안전하게 함께 실행하기
- 컨테이너를 활용하면 격리된 환경의 여러 웹 서버를 둘 수 있다.
- 또, 물리 서버 한대에 웹서버를 여러대 띄우면 그만큼, 물리 서버 수를 줄일 수 있어서 비용 측면에서 유리하다.
- 컨테이너 기술을 사용하지 않으면, 각 웹 서버 환경을 격리시키기 위해서는 여러대의 물리서버가 필요함
- 또한, 컨테이너는 그냥 격리된게 아니라 '쉽게 옮길 수 있다'라는 이점이 있음.
- (여기서 궁금증이 있었음) 컨테이너 === 물리서버가 아님!
컨테이너와 물리서버 관계 이해하기 (간략)
- 물리서버
- 가장 하위 계층에 위치함
- 호스트 운영체제 (리눅스)
- 물리 서버 위에서 실행되는 기본 운영체제
- 도커 엔진
- 호스트 OS 위에서 실행되는 컨테이너 관리 플랫폼
- 컨테이너
- 도커 엔진 위에서 실행되는 격리된 실행환경
- 각각의 컨테이너는 독립적인 파일 시스템, 네트워크, 프로세스를 가짐
- 호스트의 OS 커널 공유
즉, 컨테이너는 물리서버의 자원을 가상화하여 사용하는 논리적인 단위임!
컨테이너 기술 외에도 하나의 물리서버에 여러 환경을 띄울 수 있는 기술들이 있음! (가상화!)
1-4. 컨테이너의 이식성
- 컨테이너는 자유롭게 옮길 수 있다.
- 컨테이너 자체를 옮긴다기 보다는, 컨테이너의 정보를 내보내기 한 다음, 다른 도커 엔진에서 복원하는 형태가 된다.
- 즉, 똑같은 상태로 튜닝한 컨테이너를 팀원 전원에게 배포하여 모두가 동일한 개발환경을 사용 가능함
도커와 가상화 기술의 차이
- 가상화 기술은, 가상의 물리 서버를 만드는 것이다.
- 즉, 물리적인 대상을 소프트웨어로 대체한다는 것.
- 이와 달리, 도커는 컨테이너에서 리눅스가 동작하는 것 처럼 보이지만, 실제 리눅스가 동작하는 것은 아니다.
- 운영 체제의 기능 중 일부를 호스트 역할을 하는 물리 서버에게 맡겨 부담을 들어둔 형태이다.
- 즉, 컨테이너는 운영체제의 일부 기능을 호스트 컴퓨터에게 의존하여 물리 서버에도 리눅스 기능이 필요하며, 컨테이너의 내용도 리눅스 운영체제가 될 수 밖에 없다.
도커 컨테이너 환경 구축 과정 간략히..
- 먼저 도커 엔진을 띄울 물리서버가 필요함.
- 대부분 클라우드 서버 사용 (AWS EC2, GCP, Azure 등)
- 호스트 운영체제를 설정해야함
- 리눅스
- 그리고 해당 운영체제에 도커 엔진을 설치하고 컨테이너를 실행한다고 보면 됨.