도커는 애플리케이션을 격리된 컨테이너 환경에서 실행하여 개발과 운영의 효율성을 극대화하는 도구이다. 이번 글에서는 42서울 inception 과제 구현 및 평가 과정에서 배웠던 내용을 토대로 도커가 무엇인지, 왜 사용해야 하는지, 그리고 어떻게 동작하는지에 대해 정리해 보고, 특히 네트워크와 볼륨 관리 측면에서의 이점을 중점적으로 정리해 보았다.
WHAT: 도커 & 서비스 배포
도커 가상환경과 가상머신의 차이점
- 가상머신(VM)
가상머신은 하이퍼바이저를 통해 하드웨어를 가상화한 후, 그 위에 각기 다른 운영체제를 실행합니다.
→ 무겁고 부팅 시간이 길며, 자원 소모가 큽니다. - 도커 컨테이너
도커는 운영체제의 커널을 공유하면서, 애플리케이션을 격리된 컨테이너 내에서 실행합니다.
→ 경량화되어 빠른 부팅과 효율적인 자원 사용이 가능합니다.
아래 이미지를 통해 가상머신과 도커 컨테이너의 차이를 시각적으로 확인할 수 있습니다.
각 서비스(예: 서비스1, 서비스2)를 독립된 컨테이너에서 실행함으로써, 서비스 간의 의존성을 효과적으로 분리하고 관리할 수 있습니다.
Volume in Docker
도커에서 볼륨(Volume) 은 컨테이너 간 데이터 공유 및 데이터 영속성 유지에 필수적입니다.
- 데이터 영속성: 컨테이너가 재시작되거나 삭제되어도, 볼륨에 저장된 데이터는 그대로 유지됩니다.
- 데이터 공유: 여러 컨테이너가 동일한 볼륨을 마운트 하여 같은 데이터를 공유할 수 있습니다.
이러한 특징 덕분에, 개발 및 운영 환경에서 데이터 관리가 용이해지고, CI/CD 파이프라인 내에서 지속적인 데이터 활용이 가능해집니다.
WHY: 도커를 왜 써야 할까?
도커를 도입하는 주요 이유는 다음과 같습니다.
- 개발 생산성 향상
개발자는 특정 운영체제에 맞춰 코딩할 필요 없이, 동일한 컨테이너 환경에서 애플리케이션을 실행할 수 있습니다.
→ "내 컴퓨터에서는 잘 동작하는데"라는 문제를 줄일 수 있습니다. - CI/CD에 최적화
컨테이너 기반 배포는 자동화된 빌드, 테스트, 배포 파이프라인 구축에 매우 유리합니다. - 볼륨을 통한 데이터 관리
컨테이너와 별도로 데이터를 관리할 수 있어, 데이터의 일관성과 영속성을 보장할 수 있습니다.
이처럼 도커는 개발부터 운영까지 전반적인 프로세스를 간소화하고, 환경 재현성을 높여 줍니다.
HOW: 도커 동작 원리
도커는 리눅스 커널의 여러 기능(예: chroot, 네임스페이스, cgroups 등)을 활용해 격리된 환경을 만듭니다.
이로 인해 애플리케이션은 독립된 컨테이너 내에서 실행되며, 호스트 시스템과 분리되어 안전하게 운영될 수 있습니다.
자세한 동작 원리와 내부 메커니즘을 알고 싶다면, 아래 유튜브 영상을 참고해 보세요.
COMMENT: 도커 사용 팁 & 경험
이번 글을 준비하며 몇 가지 흥미로운 점들을 발견했습니다.
- Shutdown으로 wpadmin 종료 테크닉
컨테이너 종료 시 wpadmin과 같은 프로세스를 효과적으로 종료하는 방법을 배우면서, 서비스 관리의 중요성을 다시 한번 느꼈습니다. - Dockerfile의 EXPOSE 명령어
개인적으로 Dockerfile에 포함된 EXPOSE 명령어를 단순히 문서화 용도로만 알고 있었는데, 실제로는 ‘선호포트(preferred port)’를 명시하는 역할을 한다는 점을 새롭게 인식했습니다.
# 도커 공식문서 참고 내용
# EXPOSE instruction doesn't actually publish the port.
# It functions as a type of documentation between the person who builds the image
# and the person who runs the container, about which ports are intended to be published.
이처럼 도커는 단순히 컨테이너 실행 도구를 넘어, 서비스 배포와 데이터 관리, 그리고 운영 효율성을 극대화하는 다양한 기능들을 제공하고 있습니다.
42서울 Inception 과제를 통해 공부하면서 도커를 활용한 서비스 배포가 단순한 기술 도구 이상의 의미를 가진다는 것을 느꼈다. 실제 프로젝트에서 컨테이너를 통한 격리, 네트워크 구성, 볼륨 관리 등이 얼마나 빠르고 안정적인 개발 및 운영 환경을 만들어 주는지 직접 경험하면서, 도커의 강력한 기능들이 생산성과 효율성을 극대화하는 데 큰 역할을 한다는 점을 깨닫게 되었다.
다음 글에서는 실제 코드를 살펴보며 구현에 대해서 정리해보려 한다.
'대외활동 > 42서울' 카테고리의 다른 글
[42서울] inception 구현과 설명 (도커 이미지 설계하기) (0) | 2025.02.13 |
---|---|
[42서울] cpp08 구현 (1) | 2024.11.27 |
[42서울] cpp07 구현 (0) | 2024.11.26 |
[42서울] Netpractice LEVEL 8 문제 풀이 (1) | 2024.11.11 |
[42서울] minitalk 구현(Makefile 포함) (0) | 2024.08.22 |