도커란 무엇인가
도커를 한 마디로 설명하면, 컨테이너 기반의 가상화 플랫폼인데요. 격리된 환경에서 애플리케이션을 개발, 배포, 실행할 수 있게 해줍니다. 격리된 환경이란, 애플리케이션을 독립적인 공간에서 실행시킨다는 의미입니다. 이 공간은 다른 프로그램이나 시스템과 영향을 주고받지 않고, 애플리케이션이 혼자서도 안정적으로 실행될 수 있습니다
일종의 미니 컴퓨터라고 이해하면 되나요
편하게 생각하면 그렇지만 오해의 소지가 있습니다.
얼핏 들었을 때는 도커가 일종의 미니 컴퓨터라고 이해되는데요. 정말 그럴까요? 실제로 컴퓨터에 속하는 것은 아닙니다. 이해를 위한 가장 편한 설명인 것 같네요. 도커는 소프트웨어입니다. 미니 컴퓨터라기 보다는 컴퓨터 내에서 애플리케이션을 실행하는 특별한 기술이라는 표현이 맞습니다.
왜 컴퓨터라고 할 수 없을까
도커, 그리고 물리적 하드웨어와 가상머신의 차이 알아보기
어찌되었든 컴퓨터와 유사한 역할을 하는 것은 맞는데요. 왜 컴퓨터라고 할 수 없는지 알아봅시다. 일단 우리가 잘 알고 있는 컴퓨터를 떠올려봅시다. 데스크탑, 노트북 등등. 익히 알고있는 것들 중 손에 만질 수 있는 것을 물리적 하드웨어 컴퓨터라고 말하는데요. 그 외에도 가상 머신이라고 불리는 소프트웨어 개념의 컴퓨터도 이어 생각날 것입니다.
컴퓨터라고 용어를 붙이기 위해서는 다음과 같은 것들이 필요합니다. 공통 사항은 많지만 현재 이슈와 관련된 것들만 살펴봅시다.
- 중앙 처리 장치 (CPU) : 모든 컴퓨터는 중앙 처리 장치를 가지고 있습니다. CPU는 컴퓨터의 두뇌와 같아서, 입력된 데이터를 처리하고, 명령을 수행하며, 컴퓨터 전체의 연산을 제어하는 역할을 하죠.
- 기억 장치 : 컴퓨터는 메모리(주로 RAM)를 가지고 있어 데이터를 일시적으로 저장합니다. 이 메모리는 작업을 수행하는 동안 데이터를 빠르게 읽고 쓸 수 있게 해 줍니다. 또한 영구 저장 장치(하드 드라이브, SSD 등)를 사용하여 데이터를 장기적으로 저장합니다.
- 운영체제 (OS) : 컴퓨터는 운영 체제를 필요로 합니다. 운영 체제는 하드웨어 자원을 관리하고, 프로그램들이 서로 충돌 없이 실행될 수 있도록 제어합니다. 또한, 사용자와 하드웨어 사이의 인터페이스 역할을 합니다.
도커는 이와 달리 CPU, 메모리, 저장 장치를 호스트 컴퓨터로부터 공유해서 사용합니다. 도커는 컴퓨터 내에서 작동하는 애플리케이션이고, 도커 자체가 하드웨어 자원을 독립적으로 소유하거나 관리하지 않습니다. 즉, 컴퓨터로서의 역할을 충분히 하지 못하므로 정확히는 컴퓨터는 아닙니다. 컴퓨터는 자원 관리, 운영 체제, 독립적인 실행 등을 종합적으로 처리하는 시스템이어야 하는 반면, 도커는 애플리케이션의 격리 및 관리에 초점을 맞추고 있습니다. 정리해서, 도커는 컨테이너화 기반의 도구로 애플리케이션을 격리된 환경에서 실행하는 소프트웨어입니다.
컨테이너 알아보기
도커를 설명하기 위해 계속 컨테이너라는 단어가 반복되고 있는데요. 컨테이너는 도커에서의 핵심 개념입니다. 이제는 도커를 더 자세히 알기 위해 컨테이너가 무엇인지 알아봅시다. 컨테이너(container)란, 애플리케이션과 그 애플리케이션이 실행되는 데 필요한 모든 것들을 격리된 환경에서 실행할 수 있게 해주는 기술입니다. 컨테이너를 이해하려면, 왜 그런 환경을 제공하는지, 그리고 어떻게 동작하는지를 알 필요가 있습니다. 우선 애플리케이션 격리가 왜 필요한지 알아보고, 컨테이너의 역할을 차례로 살펴봅시다.
애플리케이션 격리가 필요한 이유
컨테이너는 애플리케이션을 독립적인 환경에서 실행하도록 격리한다고 했습니다. 이것은 마치 여러 개의 독립된 작은 컴퓨터를 만드는 것과 비슷하지만, 실제로는 하나의 시스템에서 여러 개의 작은 공간에서 애플리케이션들이 서로 영향을 주지 않고 실행되도록 하는데요. 예를 들어, 한 애플리케이션이 특정 라이브러리 버전을 필요로 하고, 또 다른 애플리케이션은 다른 버전을 필요로 할 때, 각각을 컨테이너로 분리하면 버전의 충돌 없이 실행할 수 있습니다.
또한 컨테이너는 어디서든 동일한 방식으로 실행될 수 있는 환경을 제공합니다. 즉, 개발자가 내 컴퓨터에서 개발한 애플리케이션을 컨테이너에 넣고, 이를 서버나 클라우드로 옮겨도 같은 환경에서 실행될 수 있습니다. 예를 들어, "내 컴퓨터에서는 잘 되는데, 서버에서는 안 된다"는 문제를 피할 수 있습니다.
컨테이너의 역할
자세한 동작 원리는 다음 시간에 기회가 되면 살펴보도록 하고 어떤 역할을 수행하는지 알아봅시다. 예를 들어, 웹 서버를 실행하는 애플리케이션이 있다고 해봅시다. 이때, 애플리케이션은 특정 버전의 데이터베이스나 라이브러리 등을 필요로 할 수 있습니다. 만약에 컨테이너 안에 이 애플리케이션과 모든 의존성을 포함시킬 수 있다면, 다른 컴퓨터에서 실행할 때에도 똑같이 실행할 수 있을 것입니다. 즉, 컨테이너는 라이브러리나 데이터베이스 등등, 애플리케이션과 그것을 실행하는 데 필요한 모든 것을 하나로 묶어서 실행할 수 있게 합니다. 이를 의존성 묶기라고 표현하기도 하며, 도커는 애플리케이션과 의존성을 묶어줍니다.
컨테이너를 사용하면 뭐가 좋을까
듣컨테이너는 가상 머신보다 훨씬 가볍고 빠르다는 점 즉, 경령화 또한 큰 특징 중 하나입니다. 가상 머신은 별도의 운영 체제까지 필요하지만, 컨테이너는 호스트 시스템의 커널을 공유하므로 훨씬 더 효율적으로 자원을 사용합니다. 다르게 표현하면, 컨테이너는 전체 운영 체제를 가상화하는 것이 아니라, 호스트 운영 체제의 커널을 공유하면서 애플리케이션을 실행하기 때문에 컴퓨터보다 적은 볼륨에서 작동할 수 있고, 그에 따라 자원 소모가 적고 빠르게 실행될 수 있습니다. 이 외에도 어떤 장점이 있는지 키워드로 살펴봅시다.
- 이식성 : 컨테이너 안에 모든 것이 묶여 있기 때문에, 어디서든 동일한 방식으로 실행됩니다. 개발 환경, 테스트 환경, 운영 환경 모두 똑같은 컨테이너를 사용할 수 있어 이식성이 높습니다.
- 빠른 배포 : 컨테이너는 매우 가볍고 빠르게 실행되므로, 애플리케이션을 빠르게 배포하고, 빠르게 시작하고 종료할 수 있습니다.
- 효율성 : 컨테이너는 호스트 운영 체제의 커널을 공유하므로, 자원 소비가 적고, 여러 개의 컨테이너를 동시에 실행할 수 있습니다.
- 격리성 : 각 애플리케이션이 독립적인 환경에서 실행되기 때문에, 다른 애플리케이션에 영향을 미치지 않습니다.
- 확장성 : 많은 컨테이너를 쉽게 생성하고 확장할 수 있어, 부하 분산이나 다양한 환경에 대한 대응이 용이합니다.
도커의 필수 구성요소
도커는 앞서 설명했듯이 컨테이너라는 기술을 기반으로 합니다. 그 외에도 도커 플랫폼 운영의 필수적인 구성 요소에는 이미지, 도커 파일, 도커 엔진, 도커 허브와 같은 것들이 있는데요. 차례로 계속 살펴봅시다. 도커 이미지는 좀 길게 설명할 거기 때문에 나머지부터 살펴봅시다.
도커 파일
도커 파일(Dockerfile)은 도커 이미지를 빌드하는 설명서로, 이미지를 생성하는 구성 요소입니다. 여기서 이미지가 무엇인지만 알면 도커 파일이 무엇인지 알 수 있을 것이니 넘어갑시다.
도커 엔진
도커 엔진(Docker Engine)은 도커 컨테이너를 실행하고 관리하는 핵심 시스템입니다. 엔진이라는 단어에서 감이 오는데 그 정도만 이해하고 넘어갑시다.
도커 허브
도커 허브(Docker Hub)는 도커 이미지를 저장하고 공유하는 온라인 서비스인데요. 다음 블로그 도커 실습에서 실제로 다운로드 받아 사용할 서비스 입니다. 뭔지는 몰라도 이것 또한 도커 이미지가 무엇인지 이해하면 되겠네요.
도커 이미지
도커 이미지(Docker Image)는 애플리케이션과 필요한 모든 의존성을 포함한 템플릿으로, 컨테이너를 실행할 때 필요한 모든 정보를 포함하는 읽기 전용 파일 시스템입니다. 애플리케이션, 라이브러리, 시스템 도구 등 컨테이너가 필요로 하는 모든 것이 이미지 안에 포함됩니다. 이미지는 애플리케이션이 컨테이너로 실행되기 위한 청사진을 제공해줍니다. 즉, 컨테이너는 이미지를 기반으로 생성되며, 애플리케이션의 실행 환경과 그 의존성들이 포함되는 것입니다. 이때, 이미지는 레이어(layer)로 구성되며, 각 레이어는 독립적이고 변경 불가능합니다. 이미지를 빌드할 때 각 단계가 레이어로 추가됩니다.
아직 도커 이미지가 무엇인지 감이 덜 올 수 있습니다. 앞에서 배운 내용을 기반으로 연결해서 이해해봅시다.
위에서 도커가 무엇인지 살펴보며 애플리케이션에 의존성을 묶는 것이 도커의 큰 장점이라고 설명했는데, 바로 그 애플리케이션과 그 애플리케이션이 실행되는 데 필요한 의존성을 묶는 핵심 구성 요소가 도커 이미지입니다. 어디서 그런 이야기를 했는지 다시 보고 싶다면 컨테이너의 역할 항목을 다시 살펴봐주세요.
이러한 도커 이미지는 이식성을 제공하여, 개발자가 만든 환경을 그대로 다른 시스템에서도 실행할 수 있게 해줍니다. 애플리케이션을 실행하기 위한 모든 것이 이미지 안에 포함되어 있기 때문에, 이 이미지를 다른 시스템에 배포하면 동일한 환경에서 애플리케이션이 실행됩니다. 예를 들어, "내 컴퓨터에서는 잘 되는데 서버에서는 안 된다"는 문제를 해결할 수 있습니다. 이미지를 사용하면 환경 차이로 인한 문제를 최소화할 수 있는 것입니다.
아하, 도커 이미지 덕분에 생성된 컨테이너는 실행될 때 필요한 모든 것들이 이미 포함되어 있기 때문에, 컨테이너는 격리된 환경에서 애플리케이션을 실행할 수 있는 것이구나. 라고 이해할 수 있습니다.
도커 이미지의 핵심 포인트를 정리하고 마무리하겠습니다.
- 애플리케이션의 실행 환경을 정의하는 템플릿
- 애플리케이션과 그 의존성들을 묶어서 일관된 실행 환경을 제공
- 이 묶인 환경은 다른 컴퓨터에서 그대로 실행될 수 있기 때문에 이식성과 재현성 제공
도커를 돕는 이 외의 도구
도커의 핵심 구성 요소는 아니고 도커가 제공하는 기본적인 컨테이너화 기능을 사용하려면 필수도 아니지만, 실제로 도커를 사용하기 위한 초석으로 도커를 더 효율적으로 활용할 수 있게 해주는 유용한 도구를 추가로 살펴보려고 합니다.
도커 컴포즈
도커 컴포즈는 컨테이너의 실행 및 관리를 담당하는 도커 엔진 위에서 동작하는 도구로, 멀티 컨테이너 애플리케이션을 관리하고 실행하는 데 매우 편리한 도구로, 복잡한 시스템을 보다 쉽게 설정하고 관리할 수 있게 해줍니다.
즉, 도커 컴포즈를 사용하면 여러 컨테이너를 동시에 설정하고 실행할 수 있게 도와주는 것입니다. 예를 들어, 웹 서버와 데이터베이스를 포함하는 애플리케이션을 한 번의 명령어로 실행할 수 있기 때문에 효율적이고 일관된 환경을 제공합니다. 또한, docker-compose.yml 파일로 애플리케이션의 구성, 환경 설정, 종속성 등을 명확하게 정의할 수 있어, 여러 사람이 동일한 환경에서 작업할 수 있게 합니다. 아하, 그렇다면 여러 개의 컨테이너를 사용할 때 컴포즈를 사용하면 좋겠네요.
참고자료
타 블로그 : Docker의 개념 및 핵심 설명
'About Project > Tools' 카테고리의 다른 글
IntelliJ : 단축키 사용하기 (Windows, Linux, Mac) (1) | 2025.02.24 |
---|---|
Docker : 도커 실습해보기 (도커 설치, 도커 허브를 이용한 MySQL 도커 이미지 다운로드, 그리고 컨테이너 실행 및 데이터베이스 생성 방법) (0) | 2025.02.20 |
Git : 깃허브에 이미 올린 커밋 메세지 변경하는 방법 (0) | 2024.12.10 |
Github : 리드미 작성하는 방법 (toggle) (0) | 2024.08.12 |
Postman : 사용방법 (0) | 2024.08.09 |