1. Docker 등장 배경
- “내 컴퓨터에선 되는데, 서버에선 안 돼” (협업 쉽게)
- 개발 환경과 운영 환경(라이브러리 버전, OS 설정 등)의 불일치로 인한 문제
- 배포 복잡도 증가 (배포 설정 간편)
- 여러 서비스, 여러 버전 공존 시 수동 설정 반복
- 리소스 효율성 (메모리 많이 필요한 VM보다는 컨테이너화로 리소스 적게)
- 전통적 VM은 커널부터 OS 전체를 복제하므로 메모리·디스크를 많이 소모
→ Docker 컨테이너를 사용하면
- 동일한 이미지를 어디서든 실행 가능 → “환경 일관성” 확보
- 경량 가상화 → 빠른 빌드/배포, 리소스 절약
- 마이크로서비스 구조 지원 → 서비스 단위로 격리·스케일링
2. Docker (리눅스 컨테이너 기술)
Docker는 Docker Hub이라는 소프트웨어 저장소와 함께 성장했고 개발자들이 쉽게 애플리케이션을 포장하고 컨테이너 방식으로 실행할 수 있게 된다.(실행 환경에 구애받지 않고 애플리케이션을 실행할 수 있음)
컨테이너 기술을 바탕으로 한 컴퓨터 안에 여러 대의 컨테이너가 존재하고, 이를 통해 애플리케이션 실행 환경이 격리되어 있다.
3. 컨테이너 방식의 장점
- 의존성 충돌 문제를 해결
컨테이너 기술은 애플리케이션을 컨테이너 내에 구성함
컨테이너에서 실행 중인 애플리케이션은 어떠한 의존성도 공유하지 않고, 각자 고유의 의존성을 포함하고 있음
하나의 컴퓨터 내에 서로 다른 버전의 php가 설치될 수 있음, 컨테이너 하나하나가 애플리케이션 실행과 관련해서 높은 수준의 격리를 제공
컨테이너가 격리하고 독립적으로 소유하는 자원들
- 프로세스
- 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 할 수 있음
- 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없음
- 네트워크
- 기본으로 컨테이너 하나에 하나의 IP주소가 할당되어 있음
- 파일시스템
- 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있음, 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있음