컨테이너의 장점
- 물자를 싣고 내릴 때에, 선박이 입항해 있는 시간을 획기적으로 단축시켜준다
- 물자를 싣고 내릴 때 필요한 인력(분류하는 사람, 짐 옮기는 사람, 감독하는 사람)을 대폭 감소시킨다
개발자들은 이와 같이 물자의 수송에 획기적인 단축을 가져다 준 컨테이너 기술을 "소프트웨어 수송, 즉 배포에 사용할 수는 없을까?" -> 2013년에 도커 (Docker)가 등장하면서 쉽게 애플리케이션을 포장하고, 컨테이너 방식으로 실행할 수 있게 되었습니다.
왜 Docker인가? (1)
컨테이너 방식의 장점 :
1. ➡️의존성 충돌 문제를 해결해 준다
2. 개발과 배포 환경을 일치시킨다
3. 수평 확장을 쉽게 해준다
4. 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다
컨테이너는 무엇을 격리하나요?
하나의 컴퓨터 내에 서로 다른 버전의 php가 설치될 수 있는 것은, 컨테이너 하나하나가 애플리케이션 실행과 관련해서 높은 수준의 격리를 제공하기 때문입니다.
컨테이너는 무엇을 격리하고, 어떤 자원들을 독립적으로 소유할까요?
1. 프로세스
- 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있습니다.
- 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없습니다.
2. 네트워크
- 기본으로 컨테이너 하나에 하나의 IP 주소가 할당되어 있습니다.
3. 파일 시스템
- 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있습니다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있습니다.
컨테이너는 가상 머신인가요?
도커를 비롯한 리눅스 컨테이너 기술은 가상 머신의 접근 방법과는 조금 다릅니다.
왜 Docker인가? (2)
2. ➡️ 개발과 배포 환경을 일치시킨다
개발팀의 문제
다양한 언어, 애플리케이션들이 존재 하고 각 프로그램 마다 버전들이 다르고 각자가 본인의 운영체제에 설치해야하는 문제들이 많지만 도커 통해 어떠한 운영체제든 상관없이 설치 및 운영 할 수 있습니다.
도커는 다음 문제를 해결할 수 있습니다:
- OS에 상관없이 즉시 애플리케이션 실행 환경을 만들 수 있습니다.
- 개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있습니다.
왜 Docker인가? (3)
3. ➡️ 수평 확장을 쉽게 해준다
4. ➡️ 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다
매일같이 사용하는 글로벌 웹 서비스는 전 세계인들이 사용하므로 그 트래픽이 어마어마합니다. 그래서 서비스 제공자들은 이러한 트래픽 분산을 위해 프록시 서버를 운영하며, 프록시 서버는 여러 대의 동일한 검색 서버 중 한 군데를 이용할 수 있도록 돕습니다.
컨테이너 기술의 가장 큰 장점은 실행 환경의 일치입니다. 동일한 애플리케이션 구성(이미지)을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행하고, 로드 밸런서에 이 서버를 추가하기만 하면 됩니다. 새로운 버전의 애플리케이션을 여러 서버 중 몇 대에만 운영하여 테스트하는 방법도 가능합니다.
Docker 핵심 키워드
컨테이너 : 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자입니다.
이미지 : 실행되는 모든 컨테이너는 이미지로부터 생성됩니다. 이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 즉시 컨테이너를 만들 수 있습니다.
이미지를 이용해 여러 개의 컨테이너를 생성할 수 있습니다. 이를 이용해 앞서 설명한 애플리케이션의 수평 확장이 가능합니다.
레지스트리 : 이미지는 레지스트리에 저장됩니다. 대표적인 이미지 레지스트리로는 Docker Hub, Amazon ECR이 있습니다. 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면, 기본 레지스트리로부터 다운로드 받게 됩니다.
컨테이너와 VM의 비교
컨테이너 기술과 가상 머신(VM)은 둘 다 프로세스, 네트워크, 파일 시스템을 격리할 수 있다는 장점을 공유합니다. 하지만, 이 둘의 작동원리는 많이 다릅니다.
VM을 사용해본 경험이 있다면, VM을 만들고 실행하는 과정이 많은 컴퓨팅 자원을 필요로 한다는 점을 체감하였으리라 생각됩니다. 이에 비해, 도커는 한 호스트 컴퓨터에 여러 개의 컨테이너를 띄워도 크게 컴퓨터에 무리가 가지 않습니다.
도커 이미지는 (운영체제 이미지도 존재하지만) 보통 애플리케이션 단위로 만들어져 있음을 알 수 있습니다. 반면 VM을 사용하기 위해서는 해당 VM 위에 운영체제(OS, Operating System)를 설치해야 하는 과정을 반드시 거치게 되어 있습니다.
컨테이너에 OS를 올리지 않는데, Docker Hub에 존재하는 각종 OS 이미지는 무엇인가요?
OS 이미지는 컨테이너 내 애플리케이션 구성의 편의를 위해 존재하는 이미지입니다.
'Docker' 카테고리의 다른 글
DevOps Day 28 (4.13) DOCKER_실습 (0) | 2023.04.13 |
---|---|
DevOps Day 27 (4.12) DOCKER_Docker CLI (0) | 2023.04.13 |