도커는 컨테이너화 기술을 사용하여 애플리케이션을 개발, 배초 및 실행하기 위한 오픈소스 플랫폼이다.
애플리케이션과 실행 환경을 컨테이너 단위로 패키징하여 격리 후 일관되고 효율적인 환경에서 작업할 수 있다.
쉽게 말해서 같은 컴퓨터 내에서 독립적으로 환경을 구축할 수 있다.
VM(Virtual Machine)과 같은건가? 라고 생각할 수도 있다.
도커 컨테이너와 VM은 모두 이미지로 생성된다. 도커는 애플리케이션 환경의 백업을 생성하고, VM은 OS 백업을 생성한다. 또한 가상화 기술을 사용한다는 것에 대해 유사하다고 생각할 수 있지만 주요한 차이점은 가상화 방식이다.
VM은 하이퍼바이저를 사용하여 하드웨어를 시뮬레이션하고, VM마다 별도의 OS 인스턴스(Guest OS)를 실행한다.
도커는 호스트 OS의 커널을 공유하고, 여러 컨테이너가 하나의 OS를 공유한다.
이것이 도커의 낮은 자원 사용량과 VM 보다 빠르게 시작할 수 있는 원인 중 하나이다.
도커의 주요 특징
1. 컨테이너화
도커는 컨테이너라는 가벼운 가상화 단위를 사용하여 애플리케이션과 필요한 라이브러리, 종속성 등을 함께 패키징한다.
이로써 애플리케이션의 환경을 격리하고 이식성을 향상시킨다.
2. 일관성있는 환경
개발과 운영 환경의 차이로 인한 문제를 방지하기 위해 개발 환경에서 생성한 컨테이너를 운영 환경에서도 동일하게 실행할 수 있다.
3. 빠른 배포
컨테이너는 이미지로 관리되며, 이 이미지를 통해 애플리케이션을 빠르게 배포하고 확장할 수 있다.
4. MSA
도커를 사용하면 각각 독립적인 컨테이너로 구성된 마이크로 서비스 아키텍쳐를 쉽게 구축할 수 있다.
5. 인프라 스트럭쳐 버전 관리
도커 이미지는 코드와 함꼐 버전 관리되며, 이를 통해서 인프라 스트럭쳐의 변경 내역을 추적하고 롤백할 수 있다.
쉬운 예시를 들면 새롭게 배포한 환경에서 문제가 발생하면 이전의 이미지를 통해 롤백하여 대참사를 방지할 수 있다.
6. 클라우드 호환성
도커는 대부분 클라우드 플랫폼과 호환되며, 클라우드 환경에서 애플리케이션을 관리하고 배포하기도 쉽다.
도커의 구조
- 컨테이너는 OS의 일부 기능을 호스트 컴퓨터에 의존한다.
- OS는 소프트웨어나 프로그램의 명령을 하드웨어로 전달한다.
- 컨테이너는 새 버전이 나오면 변경하기 때문에 일회성에 가깝다.
- 도커는 기본적으로 리눅스에서만 동작한다.
- 컨테이너를 생성하기 위해서는 먼저 이미지를 만들어야 한다.
컨테이너를 새 버전으로 업데이트를 하면 해당 컨테이너 내에 편집했던 파일은 사라지는데, 이런 일을 방지하기 위해서는 보통 도커가 설치된 물리적 서버(호스트)의 디스크를 마운트해서 이 디스크에 데이터를 저장한다.
데이터를 외부에 저장하면 다른 컨테이너와 데이터를 공유할 수 있어서 편리하다.
컨테이너와 가상화 기술
가상화 기술은 가상의 물리서버를 만드는 것과 같다.
물리적인 대상을 소프트웨어로 대체 했다는 의미이다.
실질적으로 물리 서버와 동등한 것이므로 당연히 OS도 아무것이나 설치할 수 있고, 그 위에 어떤 소프트웨어를 구동해도 무방하다.
도커는 컨테이너에서 리눅스가 동작하는 것처럼 보이지만 실제로는 리눅스가 동작하는 것이 아닌, OS의 기능 중 일부를 호스트 역할을 하는 물리 서버에 맡겨 부담을 덜어둔 형태이다.
즉, 컨테이너는 OS의 일부 기능을 호스트 컴퓨터에 의존하기 때문에 물리 서버에도 리눅스 기능이 필요하며, 컨테이너의 내용도 리눅스 OS가 될 수 밖에 없다.
EC2의 인스턴스는 컨테이너와 마찬가지로 AMI(Amazon Machine Image)라는 이미지로 부터 생성하므로 인스턴스를 배포하는 방법은 도커와 비슷하다.
'Linux > Docker' 카테고리의 다른 글
도커(docker) 기본 명령어, 사용 예시 (0) | 2023.10.24 |
---|---|
도커(docker) dockerfile 인스트럭션 (0) | 2023.08.24 |
도커(docker) 파일 작성 방법 예시 feat.FastAPI (0) | 2023.08.10 |
도커(docker) 설치 방법 - 우분투(ubuntu) (0) | 2023.08.10 |
댓글