1. 도커?
애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 컨테이너 기반의 오픈소스 가상화 플랫폼을 말한다.
도커를 사용하면 이미지를 기반으로 컨테이너를 실행할 수 있으며, 특정 컨테이너의 상태를 변경해 새롭게 이미지를
만들 수 있다.
※ 컨테이너 기반?
도커에서 사용하는 컨테이너 기반 방식은 리눅스 컨테이너 방식으로,
리눅스 컨테이너는 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는
기술이다.
=> 하드웨어 자체를 가상화하는 가상 머신과는 달리 커널을 공유하는 방식이기 때문에 실행 속도가 빠르고 성능상
손실이 거의 없다!!
컨테이너로 실행된 프로세스는 커널을 공유하지만, 리눅스 네임스페이스, 컨트롤 그룹, 루트 디렉터리 등의 커널 기능을
활용해 격리해 실행한다.
이러한 격리 기술 덕분에 호스트 머신에게는 프로세스로 인식되지만, 컨테이너 관점에서는 독립적인 환경을 가진
가상 머신처럼 보인다.
리눅스 컨테이너의 주요한 특징으론 아래와 같다!
- 운영체제 수준의 가상화
컨테이너는 운영체제 수준의 가상화 기술이다. 별도의 하드웨어 에뮬레이션 없이 리눅스 커널을 공유해 컨테이너를
실행하며, 게스트 OS 관리가 필요하지 않다.
=> 즉, Virtual Machine 같은 경우 환경마다 적절한 OS를 설치해서 무거운데, 도커는 그럴 필요가 없다!
- 빠른 속도와 효율설
하드웨어 에뮬레이션이 없기 때문에 컨테이너는 아주 빠르게 실행된다.
프로세스 격리를 위해 아주 약간의 오버헤드가 있지만, 일반적인 프로세스를 실행하는 것과 거의 차이가 없다.
또한 하나의 머신에서 프로세스만큼 많이 실행하는 것이 가능하다.
- 높은 이식성
모든 컨테이너는 호스트의 환경이 아닌 독자적인 실행 환경을 가지고 있다.
이 환경은 파일들로 구성되며, 이미지 형식으로 공유될 수 있다. 리눅스 커널을 사용하고 같은 컨테이너 런타임을
사용할 경우 컨테이너의 실행 환경을 공유하고 손쉽게 재현할 수 있다.
- 상태를 가지지 않음
컨테이너가 실행되는 환경은 독립적이기 때문에, 다른 컨테이너에게 영향을 주지 않는다. 도커와 같이 이미지
기반으로 컨테이너를 실행하는 경우 특정 실행 환경을 쉽게 재사용할 수 있다.
2. 왜 도커를 써야할까?
앞서 컨테이너란 애플리케이션을 환경에 구애받지 않고 실행하는 기술이라는 것은 알았다.
도커가 설치되어 있다면, 어느 환경이든 상관 없이 쉽게 개발환경을 사용할 수 있다.
하지만 지금까지 문제없이 배포/운영을 하였는데 굳이?
만약 우리가 서버를 운영하는데, 똑같은 일을 하는 두 서버가 있더라도, A 서버는 한 달 전에 구성했고,
B 서버는 이제 막 구현했다면, 운영체제로부터 컴파일러, 설치된 패키지까지 완벽하게 같기는 쉽지 않다.
이러한 차이가 서버의 장애를 일으키는 원일이 될 수 있다.
서로 모양이 다른 서버들이 존재하는 상황을 눈송이 서버라고 한다.
만약 여기서 A 서버가 문제가 생겼는데, 그 한달 사이에 해당 서버를 운영하는 직원이 퇴사, 혹은 팀을 이동한다면?
또 이 기간이 한달이 아닌 1년, 10년이라면? 이 작은 눈송이가 눈덩이가 되어 있을 것이다.
서버를 코드로 구성하고 관리하는 다양한 방법
위와 같은 상황을 개선하고자 다양한 방식으로 서버 운영 기록을 저장하곤 한다.
하지만 문서에 적힌 대로 해봐도 잘 안 되는 경우가 생기고, 여러 서버를 한 번에 조작할 경우 특정 서버 하나만 문제가 생기는 경우도 있다.
여기서 도커가 나오게 되었다.
도커에서 사용하는 도커 파일은 서버 운영 기록을 코드화 한 것이다.
이 도커 파일로 도커 이미지를 만들 수 있다.
도커 파일이 서버 운영 기록이라면, 도커 이미지는 운영 기록을 실행할 시점이라고 할 수 있다.
도커 파일 = 서버 운영 기록 코드화
도커 이미지 = 도커 파일 + 실행 시점
도커에서 앞서 말한 도커 파일로 이미지를 만들어 두면, 서버가 구성되는 시점이 이미지를 만든 시점으로 고정된다.
이미지를 사용해 1년전 A 서버에 컨테이너를 배포하고 오늘 B 서버에 컨테이너를 배포해도 모두 같은 환경이 된다.
'도커' 카테고리의 다른 글
[Docker] Node 환경 만들기 (2) | 2022.03.13 |
---|