목차
- Docker란?
- Docker 개념
- 개발자가 Docker를 사용하는 과정
- Docker 이미지 레이어
- 컨테이너의 한계
- 마치며
Docker란?
Docker는 2013년에 처음 등장한 컨테이너 기반 가상화 도구입니다. 이를 통해 컨테이너를 쉽게 관리하고 이미지를 생성하여 외부 서버에 배포할 수 있습니다. Docker는 애플리케이션을 빠르게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Linux 컨테이너를 생성하고 사용할 수 있게 해주는 컨테이너화 기술입니다. Docker를 사용하면 가상 머신과 같은 독립적인 실행 환경을 만들 수 있지만 실제로 운영 체제를 설치하지 않고도 설치 크기가 작아지고 실행 속도가 빨라집니다.
Docker는 Docker 엔진, Dockerfile 및 Docker 허브를 비롯한 다양한 구성 요소로 구성됩니다. Docker 엔진은 컨테이너를 구축, 실행 및 관리할 수 있게 해주는 핵심 구성 요소입니다. Dockerfile은 Docker 이미지 생성을 자동화하는 스크립트입니다. Docker 허브는 Docker 이미지용 리포지토리로, 미리 빌드된 이미지를 찾거나 자신의 이미지를 업로드하여 다른 사람과 공유할 수 있습니다.
Docker의 주요 이점 중 하나는 응용 프로그램 및 서비스를 쉽게 생성, 관리 및 배포할 수 있습니다는 것입니다. Docker를 사용하면 종속성 및 구성을 포함하여 애플리케이션을 실행하는 데 필요한 모든 것이 포함된 이미지를 만든 다음 Docker가 설치된 모든 서버에 배포할 수 있습니다. Docker 컨테이너는 이식 가능합니다. 즉, 기본 운영 체제나 하드웨어에 관계없이 모든 시스템에서 동일한 컨테이너를 실행할 수 있습니다.
Docker 개념
Docker는 애플리케이션을 패키징, 배포, 실행하기 위한 플랫폼입니다. 애플리케이션을 전체 환경과 함께 패키지화할 수 있습니다. 애플리케이션에서 필요한 몇 가지 라이브러리나 운영체제의 파일 시스템에 설치되는 모든 파일을 포함시킬 수 있습니다. Docker를 사용하면 이 패키지를 중앙 저장소로 전송할 수 있으며, Docker를 실행하는 모든 컴퓨터에 전송할 수 있습니다.
Docker의 주요 3가지 개념은 다음과 같습니다.
- 이미지
애플리케이션과 해당 환경을 패키지화한 것 입니다. 여기에는 애플리케이션에서 사용할 수 있는 파일 시스템과 이미지가 실행될 때 실행될 때 실행돼야 하는 실행파일 경로와 같은 메타데이터가 포함돼 있습니다. - 레지스트리
Docker 이미지를 저장하고 다른 사람이나 컴퓨터 간에 해당 이미지를 쉽게 공유할 수 있는 저장소입니다. 이미지를 빌드할 때 빌드하는 컴퓨터에서 이미지를 실행하거나 이미지를 레지스트리로 푸시(업로드)한 다음 다른 컴퓨터에서 이미지를 풀(다운로드)할 수 있습니다. 일부 공개 레지스트리는 누구나 이미지를 가져올 수 있으며, 비공개 레지스트리는 특정 살마이나 컴퓨터만 액세스할 수 있습니다. - 컨테이너
Docker 기반 컨테이너 이미지에서 생성된 일반적인 리눅스 컨테이너입니다. 실행중인 컨테이너는 Docker를 실행하는 호스트에서 실행되는 프로세스이지만 호스트와 호스트에서 실행 중인 다른 프로세스와 완전히 격리돼 있습니다. 또 프로세스는 리소스 사용이 제한돼 있으므로 할당된 리소스의 양(GPU, RAM 등)만 사용할 수 있습니다.
개발자가 Docker를 사용하는 과정
Docker 이미지 레이어
Docker 이미지는 이미지 인스턴스를 실행하는 컨테이너의 청사진과 같습니다. 이미지는 서로 위에 쌓인 여러 레이어로 구성되며 각 레이어는 이미지의 다른 부분을 나타냅니다.
케이크처럼 생각하세요. 케이크의 각 층은 다른 재료 또는 구성 요소이며 모두 함께 쌓으면 완전한 케이크가 됩니다. 마찬가지로 Docker 이미지의 각 계층은 이미지에 추가되는 서로 다른 지침 집합을 나타냅니다.
이미지를 기반으로 컨테이너를 실행할 때 Docker는 최상위 계층 아래의 모든 계층에 대해 읽기 전용 파일 시스템을 사용합니다. 최상위 계층은 변경을 허용하는 유일한 계층이므로 컨테이너가 실행되는 동안 변경된 사항은 해당 최상위 계층에 기록됩니다.
이 계층 구조는 Docker 이미지를 효율적으로 만듭니다. 일부 계층이 로컬에 이미 캐시되어 있는 경우 Docker가 매번 처음부터 시작하는 대신 해당 계층을 재사용하여 새 이미지를 빌드할 수 있기 때문입니다. 즉, 더 적은 디스크 공간으로 더 빠르게 이미지를 구축하고 배포할 수 있습니다.
컨테이너의 한계
"컨테이너 이미지의 제한된 이식성" 이라고 표현하는 이 유형은 시스템 또는 플랫폼용으로 생성된 이미지가 다른 유형의 시스템 또는 플랫폼에서 제대로 작동하지 않을 수 있다는 사실을 나타냅니다. 이는 운영 체제 또는 아키텍처와 같은 기본 인프라의 차이 때문입니다.
예를 들어 Linux 기반 시스템용으로 생성된 이미지는 Windows 기반 시스템에서 제대로 작동하지 않을 수 있습니다. 이러한 제한된 이식성은 다른 환경 또는 클라우드 플랫폼 간에 컨테이너화된 애플리케이션을 이동하기 어렵게 만들 수 있으며 다른 시스템 간의 호환성을 보장하기 위해 추가적인 노력이 필요할 수 있습니다.
그러나 컨테이너화는 기존의 모놀리식 애플리케이션에 비해 여전히 더 높은 수준의 이식성을 제공합니다. 종속성 및 런타임 환경이 이미지 자체 내에 패키징되어 다양한 호스트 및 환경 간에 애플리케이션을 더 쉽게 이동할 수 있기 때문입니다.
이러한 특징을 가지고 있는 Docker는 점점 사용량이 많아지면서, 보안, 복잡성 등 여러 문제에 직면하게 되었습니다. 이에 따라 이 문제들을 해결할 수단을 개발하게 되는데 그것이 바로 "쿠버네티스"입니다. 다음 시간에는 도커의 문제점과 쿠버네티스에 대해 알아보도록 하겠습니다. 오늘도 읽어주신 모든 여러분들께 감사합니다.
'Container > Container 이론' 카테고리의 다른 글
[Container 이론] 6. 파드를 구성하기 위해 생각해봐야 할 것들 (0) | 2023.04.03 |
---|---|
[Container 이론] 5. 컨테이너 파드(pod)와 사이드카 (0) | 2023.03.31 |
[Container 이론] 4. 도커에서 쿠버네티스로 (0) | 2023.03.28 |
[Container 이론] 2. 컨테이너 기술 그리고 가상화 장치와의 차이점 (0) | 2023.03.28 |
[Container 이론] 1. 왜 컨테이너가 사용되는가? 이전에 사용되온 기술들 (0) | 2023.03.27 |