도커 이미지와 컨테이너의 차이점은 무엇인가요?

도커 이미지와 컨테이너는 애플리케이션 배포 기술입니다. 기존에는 애플리케이션을 실행하려면 머신의 운영 체제와 일치하는 버전을 설치해야 했습니다. 하지만 이제 모든 유형의 디바이스 및 운영 체제에서 실행되는 단일 소프트웨어 패키지 또는 컨테이너를 만들 수 있습니다. 도커는 소프트웨어를 컨테이너에 패키징하는 소프트웨어 플랫폼입니다. 도커 이미지는 컨테이너 생성 지침이 포함된 읽기 전용 템플릿입니다. 도커 이미지는 컨테이너 내에서 애플리케이션을 실행하는 데 필요한 라이브러리 및 종속성의 스냅샷 또는 청사진입니다.

도커에 대해 읽어보기 »

도커 이미지와 컨테이너가 사용되는 이유는 무엇인가요?

컨테이너를 사용하면 개발자가 소프트웨어를 패키징하여 모든 대상 시스템에서 실행할 수 있습니다. 이전에는 서로 다른 대상 시스템에 맞게 소프트웨어를 패키징해야 했습니다. 예를 들어 macOS와 Windows에서 애플리케이션을 실행하려면 애플리케이션 설계를 변경하고 다른 시스템에 맞게 패키징해야 했습니다.

컨테이너화는 분산된 크로스 플랫폼 하드웨어 아키텍처 전반에서 소프트웨어 애플리케이션을 마이크로서비스로 실행할 수 있게 해 줍니다. 컨테이너는 이동성이 매우 높기 때문에 이러한 소프트웨어 애플리케이션을 거의 모든 머신에서 신속하게 배포할 수 있습니다. 예를 들어 엔터프라이즈 애플리케이션에는 수백 개의 마이크로서비스가 포함될 수 있습니다. 이러한 마이크로서비스를 전용 데이터 센터와 클라우드의 여러 머신 및 가상 머신(VM)에서 컨테이너로 실행할 수 있습니다.

작동 방식: 도커 이미지와 생성 및 관리

도커는 컨테이너에 소프트웨어를 패키징하고 대상 머신에서 실행하는 데 사용할 수 있는 컨테이너화 플랫폼입니다. 도커 컨테이너는 도커 엔진이 설치된 모든 머신 또는 가상 머신에서 실행됩니다. 또한 기반 시스템 아키텍처에 대한 정보 없이도 실행됩니다. 도커 엔진은 Linux 운영 체제에서만 실행됩니다. 도커 컨테이너는 도커 컨테이너화 플랫폼을 사용하여 생성된 컨테이너입니다. 상대적으로 잘 사용되지 않는 다른 컨테이너화 플랫폼도 있습니다.

컨테이너화에 대해 읽어보기 »

도커 컨테이너의 작동 방식

도커 컨테이너는 호스트 머신 종속성을 사용하지 않고 애플리케이션 코드를 실행하는 데 필요한 코드, 종속성, 라이브러리 등의 모든 필수 구성 요소가 포함된 런타임 환경입니다. 이 컨테이너 런타임은 서버, 머신 또는 클라우드 인스턴스의 엔진에서 실행됩니다. 엔진은 사용 가능한 기반 리소스에 따라 여러 컨테이너를 실행합니다. 

여러 머신 또는 가상 머신 간에 효과적으로 통신할 수 있도록, 컨테이너 세트를 배포하고 확장하려면 Kubernetes와 같은 컨테이너 오케스트레이션 플랫폼이 필요합니다. 이는 머신이 온프레미스에 있든 클라우드에 있든 상관없이 도움이 됩니다. Kubernetes는 컨테이너 운영 환경 내에서 클러스터라고 하는 여러 머신을 관리합니다.

Kubernetes에 대해 읽어보기 »

도커 이미지 작동 방식

도커 이미지 또는 컨테이너 이미지는 컨테이너를 생성하는 데 사용되는 독립형 실행 파일입니다. 이 컨테이너 이미지에는 컨테이너가 실행해야 하는 모든 라이브러리, 종속성 및 파일이 포함되어 있습니다. 도커 이미지는 공유 및 이동이 가능하므로, 소프트웨어 바이너리 파일처럼 동일한 이미지를 한 번에 여러 위치에 배포할 수 있습니다. 

레지스트리에 이미지를 저장하여 복잡한 소프트웨어 아키텍처, 프로젝트, 비즈니스 부문 및 사용자 그룹 액세스를 추적할 수 있습니다. 예를 들어 퍼블릭 Docker Hub 레지스트리에는 운영 체제, 프로그래밍 언어 프레임워크, 데이터베이스 및 코드 편집기와 같은 이미지가 포함되어 있습니다. 

주요 명령: 도커 이미지와 생성 및 관리

도커 컨테이너는 명령과 파라미터를 사용하여 조작합니다. 표준 명령 형식은 docker [options] [command] [arguments]입니다.

컨테이너 명령

다음 표에는 자주 사용되는 컨테이너 명령이 나와 있습니다. 도커 설명서에 몇 가지가 더 나열되어 있습니다.

명령

설명

docker ps -a

모든 컨테이너를 나열합니다. -a 플래그는 실행 중인 컨테이너와 실행 중이 아닌 컨테이너를 모두 표시합니다. 실행 중인 컨테이너만 표시하려면 이 플래그를 생략하면 됩니다.

docker rename [container] [new_name]

지정한 컨테이너의 이름을 new_name으로 바꿉니다.

docker start [container]

지정한 컨테이너를 실행합니다.

docker stop [container]

지정한 컨테이너를 중지합니다.

docker wait [container]

실행 중인 다른 컨테이너가 중지될 때까지, 지정한 컨테이너가 대기하게 합니다.

이미지 명령

컨테이너 명령에 비해 이미지 명령은 그 수가 적습니다.

Docker build -t image_name .

현재 디렉터리의 파일에서 image_name으로 태깅된 도커 이미지를 빌드합니다.

docker create [image]

지정한 이미지에서 실행 중이 아닌 컨테이너를 생성합니다.

docker run [image] 

지정한 이미지를 기반으로 컨테이너를 생성하고 실행합니다.

도커 이미지에서 도커 컨테이너 생성

특정 도커 이미지에서 컨테이너를 생성하려면 머신에서 엔진을 시작합니다. 그런 다음 기본 Docker 실행 명령을 사용합니다.

출력 예는 다음과 같습니다.

docker run -it MyImage bash

이 명령은 MyImage라는 이미지 파일에서 컨테이너를 생성합니다. -it는 실행 중인 컨테이너 내에 가상 터미널을 생성합니다. 그리고 bash를 명령으로 지정하면 컨테이너 내에서 bash 터미널이 열립니다.

주요 차이점: 도커 이미지와 생성 및 관리

도커 컨테이너는 독립적이고 실행 가능한 소프트웨어 애플리케이션 또는 서비스입니다. 반면 도커 이미지는 컨테이너를 실행하기 위해 컨테이너에 로드되는 템플릿(예: 명령 세트)입니다.

이미지는 공유하고 재사용하기 위해 저장하지만, 컨테이너는 애플리케이션의 수명 주기 동안 계속 생성하고 폐기합니다. 다음으로 추가적인 차이점을 살펴보겠습니다.

소스

도커 이미지는 구성 파일과 유사한, 사람이 읽을 수 있는 텍스트 파일인 Dockerfile에서 생성합니다. Dockerfile에는 이미지를 빌드하기 위한 모든 명령이 포함되어 있습니다. 이미지를 빌드하려면 Dockerfile을 모든 관련 라이브러리 및 종속성과 같은 폴더에 넣어야 합니다.

반대로 도커 컨테이너는 도커 이미지 파일에서 바로 생성합니다. 

구성

도커 이미지 파일은 파일 크기를 작게 유지하기 위해 이미지 계층으로 구성됩니다.  각 계층은 이미지의 변경 사항을 나타냅니다. 계층은 읽기 전용이며 여러 컨테이너 간에 공유될 수 있습니다.

이미지 인스턴스인 도커 컨테이너에도 계층이 포함되어 있습니다. 하지만 최상위에 쓰기 가능한 추가 계층인 컨테이너 계층이 있습니다. 컨테이너 계층은 읽기-쓰기 액세스를 허용합니다. 또한 컨테이너 내에 적용된 모든 변경 사항을 동일한 이미지를 기반으로 하는 다른 컨테이너와 분리할 수 있습니다.

가변성

도커 이미지는 변경할 수 없습니다. 즉, 생성된 후에는 수정할 수 없습니다. 이미지를 변경해야 하는 경우 원하는 수정 사항을 적용한 새 이미지를 만들어야 합니다.

반면 컨테이너는 변경 가능하며 런타임 중에 수정할 수 있습니다. 컨테이너 내에 적용된 변경 사항은 해당 컨테이너에만 국한되며 연결된 이미지에는 영향을 미치지 않습니다. 변경 사항의 예로는 새 파일을 작성하거나 소프트웨어를 설치하거나 구성을 수정하는 것 등이 있습니다.

사용 사례: 도커 이미지와 생성 및 관리

소프트웨어를 만들고 배포할 때 도커 이미지와 컨테이너를 서로 조합하여 사용할 수 있습니다.

컨테이너를 사용하여 애플리케이션을 한 번 빌드한 후 어디서나 실행할 수 있습니다. 필요에 따라 컨테이너를 빠르게 시작, 중지 및 재시작할 수 있습니다. 따라서 애플리케이션의 수요에 따라 손쉽게 스케일 업 또는 스케일 다운할 수 있습니다.

즉, 이미지와 컨테이너를 모두 사용하면 관리하기가 더 쉬워집니다. 함께 사용하는 방법의 예는 다음과 같습니다.

  • 동일한 이미지를 기반으로 여러 컨테이너 인스턴스를 실행하여 애플리케이션을 수평으로 확장합니다.
  • 개발, 테스트 및 프로덕션 환경에 다양한 이미지를 사용하여 지속적 통합 및 지속적 전달(CI/CD) 파이프라인을 자동화합니다.
  • 다양한 버전의 이미지에 태그를 지정하고 관리합니다. 따라서 필요에 따라 특정 버전을 롤백하거나 배포할 수 있습니다.

차이점 요약: 도커 이미지와 생성 및 관리

 

도커 이미지

도커 컨테이너

무엇인가요?

컨테이너를 생성하는 데 사용되는 재사용 및 공유가 가능한 파일입니다.

런타임 인스턴스, 독립형 소프트웨어.

다음에서 생성됨:

소프트웨어 코드, 종속성, 라이브러리 및 Dockerfile

이미지

구성

읽기 전용 계층

읽기 전용 계층과 그 상위의 추가 읽기/쓰기 계층

가변성

변경 불가능. 변경 사항이 있는 경우 새 파일을 빌드해야 합니다.

변경 가능. 필요에 따라 런타임에 변경할 수 있습니다.

사용 사례

애플리케이션 구성 세부 정보를 템플릿으로 저장하는 경우 

애플리케이션을 실행하는 경우

AWS는 컨테이너 및 이미지 요구 사항을 어떻게 지원하나요?

Amazon Web Services(AWS)는 컨테이너 이미지를 안전하게 저장하고 관리할 수 있는 다양한 서비스를 제공합니다.

컨테이너 실행 시점 및 위치를 관리하는 오케스트레이션과 컨테이너를 구동하는 유연한 컴퓨팅 엔진을 제공합니다. AWS를 통해 컨테이너 및 컨테이너 배포를 관리하면 기반 인프라에 대해 걱정할 필요가 없습니다. 자세한 내용은 AWS 기반 컨테이너를 참조하세요.

Amazon Elastic Container Registry(Amazon ECR)는 고성능 호스팅을 제공하는 완전관리형 컨테이너 레지스트리입니다. 따라서 애플리케이션 이미지와 아티팩트를 어디에나 안정적으로 배포할 수 있습니다. 컨테이너 기반 애플리케이션을 구축하는 개발자는 이제 Amazon ECR Public에서 직접 도커 공식 이미지를 검색하고 다운로드할 수 있습니다.

Amazon Elastic Container Service(Amazon ECS)는 완전관리형 컨테이너 오케스트레이션 서비스입니다. 이 서비스를 통해 컨테이너화된 애플리케이션을 보다 쉽게 배포, 관리 및 확장할 수 있습니다. Amazon ECS는 작업 정의에서 도커 이미지를 사용하여 컨테이너를 시작합니다.

지금 계정을 만들어 AWS에서 도커를 시작하세요.

AWS 활용 다음 단계

도커 이미지를 사용하여 구축 시작
Amazon Elastic Container Service를 시작하는 방법 알아보기 
컨테이너를 사용하여 구축 시작
AWS에서 컨테이너를 시작하는 방법 알아보기