💡 항만에 무역선이 즐비해있고 컨테이너들이 가득 차있는 모습을 생각해 보자. 그물망으로 어지럽게 널브러져 있는 물자를 대충 휘어잡아 선박에 옮기던 옛 시대의 모습과 비교해 보면 컨테이너가 가져온 혁신적인 장점을 굳이 말하지 않더라도 짐작할 수 있을 것이다.
현실 속 컨테이너의 효과
- 물자 운송의 시간 단축과 인력 감소
- 즉, 물자 운송을 위해 컨테이너 안에 물자를 정리하고 보관하여 이를 수송하는 데 들어가는 시간과 인력을 대폭적으로 줄여주었다.

개발 세계에서도 이를 활용하여 소프트웨어를 배포하는 데에 혁신을 가져온 아이디어가 바로 컨테이너 기술이다. 그리고 이 컨테이너 기술을 사용해 컨테이너를 실행하고 관리하는 오픈소스 프로젝트가 바로 도커(Docker)이다.
도커 컨테이너가 가져온 혁신
컨테이너의 장점을 간단한 예시로 설명해보려고 한다. 여기 김도거라는 개발자가 있다. 김도거씨는 윈도우 컴퓨터를 사용한다. 김도거씨의 컴퓨터 안에는 A라는 소프트웨어가 있다. A라는 소프트웨어의 버전은 2.X이다. B라고 하는 A와 함께 사용되는 소프트웨어도 있다. B의 버전은 1.X이다.
김도거씨는 회사의 과거 프로젝트 리팩토링 작업을 맡아 진행 중에 과로로 쓰러져 당분간 회사를 쉬게 되었다. 김도거씨가 다니는 회사는 규모가 작아 김도거씨는 리팩토링을 혼자서 진행 중이었다. 회사에서는 마침 신규 프로젝트가 끝나 여유로웠던 박건태 씨에게 김도거씨의 프로젝트를 대신 맡아 진행하기를 희망했다. 박건태 씨는 MacOS를 사용 중이었으며 A 소프트 웨어의 버전은 3.X, B 소프트웨어의 버전은 2.X를 사용 중이었다. 문제는 A 소프트웨어는 3.0부터 B 소프트웨어가 2.0 이상의 버전일 때만 지원한다는 것이었다. 박건태 씨는 종속성 문제를 해결하기 위해 A, B 소프트웨어를 강제로 다운그레이드시킬 수밖에 없었다. 그런데 회사에서 급하게 박건태 씨의 프로젝트의 일부분을 수정해 달라고 요청해 왔다. 박건태 씨는 두 프로젝트를 진행하기 위해 A, B 소프트웨어의 업그레이드와 다운그레이드를 반복하는 귀찮고 비효율적인 작업을 진행하게 되었다.
위 예시를 단번에 해결해줄 수 있는 기술이 도커이다. 도커는 컨테이너를 구축하는 도구이며 컨테이너를 생성하여 컨테이너 안에 소프트웨어 개발에 필요한 모든 것을 담을 수 있다. 각 소프트웨어를 버전별로 나누어 동일한 컴퓨터 환경에서 두 가지 프로젝트를 진행할 때 프로젝트별로 컨테이너를 분리하여 서로 다른 버전이 돌아갈 수 있게 할 수도 있다. 또한, 자신이 만든 컨테이너(개발에 필요한 환경 구축이 끝난 상태)를 이미지화하여 도커 허브에 올리면 언제 어디서든지 다운로드하여 처음 세팅과 동일한 환경을 쉽고 빠르게 만들어 줄 수도 있다.
가상머신과 도커
가상머신(Virtual machine)
| 가 상 O S |
가 상 O S |
가 상 O S |
가 상 O S |
| 운영체제 | |||
| 컴퓨터 | |||
- 가상머신은 하나의 컴퓨터 안에 있는 물리적 자원을 각각의 가상 OS들이 분할해서 사용하는 방식이다.
- 새로운 컴퓨터를 내부에 설치하는 과정에서 작동에 필요한 기본 애플리케이션 설치로 인해 가상OS가 추가될수록 메모리, CPU, 하드 드라이브 등의 공간이 낭비된다.
- 이러한 자원 낭비는 성능 저하로 이어진다.(오버헤드)
- 원하는 모든 시스템에 가상 머신을 설정하고 정확히 동일한 방식으로 개발 환경을 구축해야하는 과정이 매우 까다롭다.
도커(Docker)
| 컨테이너 | 컨테이너 | 컨테이너 | 컨테이너 |
| 도커엔진 | |||
| 운영체제 | |||
| 컴퓨터 | |||
- 컨테이너에서도 마찬가지로 호스트 운영체제인 Windows, macOS, Linux 등이 존재한다.
- 그러나, 하나의 머신에 또다른 가상머신을 설치하는 것이 아니다.
- 대신에 운영체제 위에 도커엔진이 있어 이를 기반으로 컨테이너를 가동할 수 있다.
- 컨테이너를 여러개로 만들거나 분리할 수 있다.
- 가상머신처럼 개발에 사용하지 않는 부풀어진 운영체제나, 추가 도구 등을 시용하지 않는다.
- 이것이 도커가 가상머신보다 훨씬 작고 가벼운 이유중 하나이다.
- 컨테이너 내부에 작은 운영 체제 레이어가 있을 수 있지만 가상머신보다는 비교할 수 없을 정도로 가볍다.
- 컨테이너는 config 파일을 사용하여 다른 사람들과 공유할 수 있어 다른 사람이 컨테이너 구성에 대한 2차 가공을 할 수 있다.
- 이미지라는 시스템이 있는데 도커 이미지는 애플리케이션, 소스코드, 라이브러리, 실행파일 등 서비스 운영에 필요한 모든 파일과 설정값, 버전을 저장해놓은 일종의 스냅샷과 같은 개념이다.
- 이미지를 활용해 다른 사람에게 공유하여 모두 특정 개발 환경에 대한 동일한 구성을 할 수 있게 한다.
참고
Udemy - Docker & Kubernetes : 실전가이드
'[DevOps] > Docker' 카테고리의 다른 글
| 도커 이미지 & 컨테이너 삭제 명령어 정리 (0) | 2023.06.21 |
|---|---|
| 도커 컨테이너와 상호작용할 수 있는 Interactive Mode에 대해 알아보기 (0) | 2023.06.16 |
| Docker - 이미지와 컨테이너 관리하기 (0) | 2023.06.06 |
| Docker - 컨테이너 내부 포트를 노출시키는 방법과 이미지 레이어 이해하기 (0) | 2023.06.06 |
| Docker - 이미지와 컨테이너를 공부하고 도커 이미지 다운로드 및 생성하기 (1) | 2023.06.03 |