혹시 "내 컴퓨터에서는 잘 되는데, 왜 네 컴퓨터에서는 안 되지?" 라는 말을 들어보거나 해보신 적이 있나요?
팀 프로젝트를 하거나 다른 사람에게 내가 만든 프로그램을 공유할 때 종종 겪는 문제입니다.
개발 환경이 제각각 다르기 때문에 발생하는 일인데요, 이런 문제를 해결하기 위해 등장한 기술이 바로
Docker(도커)
입니다.
이번 시간에는 개발자라면 꼭 알아야 할 필수 기술이 된 Docker의 가장 기초적인 개념부터 차근차근 알아보겠습니다.
가상머신과 컨테이너의 차이점을 시작으로, Docker의 핵심인 이미지와 컨테이너가 무엇인지 배우고, 직접 Docker를 설치해서 첫 번째 컨테이너를 실행해보는 것까지 함께 해보겠습니다.
가상머신은 한 대의 컴퓨터(서버) 안에 여러 개의 독립적인 컴퓨터를 만드는 기술이라고 생각할 수 있습니다.
예를 들어, 우리가 가진 컴퓨터의 운영체제가 Windows인데, 그 안에 Linux나 macOS를 설치해서 사용하는 것을 상상해 보세요.
가상머신은 마치
독채 주택
과 같습니다.
집을 짓기 위해 땅(하드웨어)이 필요하고, 그 위에 실제 운영체제(Guest OS)라는 완벽한 집 한 채를 통째로 짓는 방식입니다.
그래서 각 집(가상머신)은 서로 완전히 분리되어 독립적으로 움직이지만, 집을 한 채씩 통째로 지어야 하니 매우 무겁고, 실행하는데 시간이 오래 걸리며, 자원을 많이 차지한다는 단점이 있습니다.
컨테이너는 가상머신과 다르게 운영체제를 통째로 설치하지 않습니다.
대신, 기존 컴퓨터의 운영체제(Host OS)가 가진 자원을 공유하면서, 프로그램과 그 실행에 필요한 모든 것을 하나로 묶어 격리된 공간을 만듭니다.
컨테이너는
아파트의 각 세대
에 비유할 수 있습니다.
하나의 큰 아파트 건물(Host OS)이 있고, 각 세대(컨테이너)는 건물의 수도, 전기, 가스(OS 자원) 같은 기반 시설은 공유하지만, 세대 내부는 각자의 가구와 인테리어(프로그램과 라이브러리)로 채워져 서로 독립적인 생활을 하는 것과 같습니다.
운영체제를 새로 설치하지 않으니 가상머신보다 훨씬 가볍고, 시작하는 속도도 매우 빠릅니다.
👨💻
정리하자면, 가상머신은 하드웨어 수준의 가상화이고, 컨테이너는 운영체제 수준의 가상화 기술입니다.
앞서 설명한 컨테이너 기술을 아주 편리하게 사용할 수 있도록 만들어주는 도구(플랫폼)가 바로
Docker
입니다.
컨테이너라는 개념은 이전에도 있었지만, Docker가 등장하면서 누구나 쉽고 표준화된 방식으로 컨테이너를 만들고, 배포하고, 관리할 수 있게 되었습니다.
마치 우리가 아파트에 쉽게 입주하고 생활할 수 있도록 도와주는 부동산 중개소나 관리사무소 같은 역할을 Docker가 해주는 것입니다.
Docker 덕분에 "내 컴퓨터에서는 되는데..."라는 문제가 사라지고, 어떤 환경에서든 동일하게 프로그램을 실행할 수 있게 되었습니다.
입니다.
쉽게 말해, '붕어빵 틀'이나 '집 설계도'에 비유할 수 있습니다.
이미지 안에는 특정 프로그램을 실행하기 위해 필요한 코드, 라이브러리, 설정 파일 등이 모두 들어있습니다.
예를 들어 'Nginx 웹 서버 이미지'에는 Nginx를 실행하는 데 필요한 모든 것이 담겨 있습니다.
이 이미지는 변하지 않는 상태로 존재하며, 우리는 이 설계도를 가지고 실제 집을 짓게 됩니다.
입니다.
'붕어빵 틀(이미지)'로 찍어낸 '붕어빵(컨테이너)' 또는 '집 설계도(이미지)'로 지은 '실제 집(컨테이너)'이라고 생각하면 정확합니다.
하나의 이미지로 여러 개의 컨테이너를 만들 수 있습니다.
똑같은 붕어빵 틀로 여러 개의 붕어빵을 만들 수 있는 것과 같은 원리입니다.
각 컨테이너는 독립된 공간을 가지며, 실행되고, 중지되고, 삭제될 수 있는 살아있는 프로그램의 실행 상태입니다.
이미지 제안: 하나의 이미지(설계도)에서 여러 개의 컨테이너(집)가 생성되는 관계를 보여주는 그림.
Docker는 Windows, macOS, Linux 등 다양한 운영체제에 설치할 수 있습니다.
설치 과정이 운영체제마다 조금씩 다르기 때문에, 모든 과정을 여기서 설명하기는 어렵습니다.
가장 좋은 방법은 공식 문서를 따라 설치하는 것입니다.
아래 링크에서 자신의 운영체제에 맞는 Docker Desktop을 설치해주세요.