이 글은 프로젝트를 진행하며 도커를 사용해보고 도커에 대해 정리한 글입니다.
Docker란?
도커는 컨테이너화 기술을 사용하여 애플리케이션을 패키징하고 실행하기 위한 오픈소스 플랫폼입니다. 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와주며, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 해줍니다.
도커를 사용하면 이 이미지를 기반으로 컨테이너를 실행할 수 있으며, 다시 특정 컨테이너의 상태를 변경해 이미지로 만들 수도 있습니다. 이렇게 만들어진 이미지는 파일로 보관하거나 원격 저장소를 사용해 쉽게 공유할 수 있으며, 도커만 설치되어 있다면 필요할 때 언제 어디서든 컨테이너로 실행이 가능합니다.
도커 이미지란?
도커 이미지는 애플리케이션과 그 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임, 라이브러리, 환경설정 파일 등)을 포함하는 경량의, 불변의, 실행 가능한 소프트웨어 패키지입니다. 이미지는 컨테이너를 생성하는 데 사용되는 템플릿으로 생각할 수 있으며, 이미지 자체는 "실행 중"이 아닙니다. 이미지는 일반적으로 도커 허브와 같은 레지스트리에 저장되고, 거기서 필요할 때 다운로드(또는 pull)됩니다.
도커 컨테이너란?
컨테이너는 도커 이미지를 바탕으로 실행된, 격리된 환경에서 동작하는 애플리케이션의 인스턴스입니다. 간단히 말해, 컨테이너는 이미지를 "실행" 상태로 만든 것입니다. 컨테이너는 시스템의 다른 부분과 격리되어 있지만, 동일한 운영 체제 커널을 공유하고 필요한 최소한의 리소스만을 사용합니다. 컨테이너는 시작되고, 중지될 수 있으며, 삭제되거나 새로운 환경설정으로 재생성될 수 있습니다.
Docker를 Giftipie에 사용해 얻을 수 있었던 이점들
1. 개발과 운영 환경의 일관성. 즉, 이를 통해 “팀원 컴퓨터에서는 작동하는 내 컴퓨터에서는 작동하지 않는” 환경에서 발생하는 문제를 줄일 수 있었습니다.
2. 배포, 확장 및 관리를 용이하게 다룰 수 있었습니다.
도커의 일관성에 대한 이해
개발자 A는 자신의 컴퓨터에서 새로운 웹 애플리케이션을 개발하고, 모든 것이 완벽하게 작동한다고 합니다. 그러나, 개발자 A가 자신의 코드를 개발자 B에게 보내면, 개발자 B의 컴퓨터에서는 애플리케이션이 제대로 작동하지 않습니다. 왜 그럴까요? 바로 환경 설정 때문입니다. 개발자 A의 컴퓨터와 개발자 B의 컴퓨터는 운영 체제, 설치된 라이브러리, 환경 변수 등이 서로 다를 수 있습니다. 이러한 차이는 애플리케이션이 각자의 컴퓨터에서 다르게 동작하게 만듭니다.
이제 여기서 도커가 등장합니다. 도커는 이 문제를 해결하기 위해 "컨테이너화"라는 개념을 사용합니다. 컨테이너화란 애플리케이션과 그것을 실행하는데 필요한 모든 것(코드, 런타임, 라이브러리 등)을 컨테이너라는 격리된 환경에 포장하는 것을 말합니다. 이 컨테이너는 어느 컴퓨터에서나 동일하게 실행될 수 있습니다.
도커와 컨테이너를 사용하면, 개발자 A가 자신의 애플리케이션을 컨테이너에 포장하여 개발자 B에게 보낼 수 있습니다. 개발자 B는 도커를 사용하여 이 컨테이너를 자신의 컴퓨터에서 실행할 수 있으며, 애플리케이션이 개발자 A의 컴퓨터에서 실행될 때와 정확히 동일한 방식으로 작동함을 확인할 수 있습니다. 이는 도커가 애플리케이션과 그 의존성을 포함하여 컨테이너 안에 '일관된 환경'을 만들어 주기 때문입니다.
이렇게 도커는 "내 컴퓨터에서는 작동하는데요.."라는 고전적인 문제를 해결함으로써, 개발자들이 환경 차이로 인한 문제 없이 어디서나 애플리케이션을 똑같이 실행할 수 있게 해 줍니다. 이는 개발, 테스트, 배포 과정에서의 일관성을 보장하며, 개발의 복잡성을 대폭 줄여줍니다.
'DevOps > Infra' 카테고리의 다른 글
[k8s] 1. 쿠버네티스란 무엇인고? (0) | 2025.05.19 |
---|---|
Nginx, Let's Encrypt로 HTTPS 적용, 프론트 도메인 연결 방법 (AWS Route53 X) (1) | 2024.05.28 |
Github Actions, Docker로 가볍게 CI/CD 구현하기 (1) | 2024.05.28 |
블루그린으로 무중단배포를 구현할때 Docker Compose를 왜 사용했나요? (0) | 2024.02.20 |
Docker를 왜 사용하나요? (0) | 2024.02.20 |