개발박사가 되고싶은 척척학사

[Docker] Docker Image 이해하기 (도커 이미지란, 이미지의 종류, Docker Hub, 도커 이미지의 특징) 본문

Docker

[Docker] Docker Image 이해하기 (도커 이미지란, 이미지의 종류, Docker Hub, 도커 이미지의 특징)

척척학사 2024. 1. 10. 18:28

 

 

도커 이미지(Docker Image) 란?

 

도커 이미지는 도커 컨테이너를 실행하기 위한 모든 정보를 포함하는 패키지이다. 이 패키지는 애플리케이션의 실행환경, 코드, 라이브러리, 설정 등을 담고 있으며 컨테이너가 동작할 때 필요한 모든 것을 이미지 안에 포함한다. 도커 이미지는 컨테이너화된 애플리케이션의 배포, 공유, 백업 및 확장을 쉽게 할 수 있도록 도와준다.

(예를 들어, Tomcat 이미지라고 하면 Tomcat을 실행하는데 필요한 모든 파일, 명령어, 포트 등의 정보를 갖고 있는 것) 

 

쉽게 말해, 이미지는 컨테이너를 만드는데 사용하며, 빵틀과도 같은 컨테이너의 설계도 역할을 한다. 빵을 먹고 싶은 사람에게 빵틀을 주면 아무런 소용이 없듯이 이미지 자체로는 그다지 쓸모가 없다. 이미지는 하나만 있으면 똑같은 컨테이너를 여러 개 만들 수 있으며, 이로 인해 동일한 컨테이너를 여러 개 배치하기 편리하다.

 

이미 만들어져있는 컨테이너로도 이미지를 만들어낼 수 있다. 컨테이너로 이미지를 만들 수 없었다면 여러 개의 컨테이너를 일일히 수정해야했을텐데, 개조된 컨테이너로부터 이미지를 만들면 이미지를 사용해 개조된 컨테이너를 여러 개 만들 수 있다.


도커 이미지의 종류

도커 이미지는 공식 이미지와 사용자 정의 이미지로 나뉜다.

  • 공식 이미지 (Official Images , 공개 컨테이너 이미지)
    도커 커뮤니티나 소프트웨어 개발자가 제공하는 이미지로, 널리 사용되는 애플리케이션과 운영체제의 베이스 이미지이다. 이런 공식 이미지는 공식 도커 허브(도커 이미지 레지스트리-도커 이미지를 배포하는 서비스)에서 확인할 수 있는데, 도커 허브에 대한 내용은 뒤에서 자세히 설명하려고 한다.

  • 사용자 정의(커스텀) 이미지
    개발팀/운영팀이 직접 만든 이미지로, 특정 애플리케이션 또는 서비스를 실행하기 위해 필요한 모든 구성과 설정을 담고 있다. 이런 이미지는 공식 이미지를 기반으로 만들거나 완전히 새로 작성할 수 있으며, 특정 프로젝트나 요구사항에 맞게 최적화된다.

Docker Hub

Docker Hub 홈페이지 (https://hub.docker.com)

 

Docker Hub는 위에서도 간단히 설명했지만, 스마트폰의 앱스토어와 같은 존재로, 공개된 컨테이너 이미지가 모여있는 곳이다. 누구든지 이미지를 등록하고 공개할 수 있으므로 이미지의 종류도 아주 많다.

 

도커 허브에는 운영체제만 들어있는 이미지부터 여러가지 소프트웨어가 함께 포함된 것까지 다양한 이미지가 제공되는데, 같은 소프트웨어라도 다양한 이미지가 제공된다. 예를 들어 리눅스에는 다양한 배포판이 있는데, 배포판의 버전마다 운영체제만 들어간 컨테이너도 별도로 제공된다. 여기에 다시 소프트웨어가 들어가므로 조합 가능한 가짓수는 매우 많아진다.

 

아파치와 MySQL외에도 nginx, PostgreSQL 등 오픈소스 소프트웨어는 대부분 이미 만들어진 이미지를 제공중이다.

 

다만, 도커 허브는 위에서 말했다시피 누구나 자유롭게 이미지를 등록할 수 있기 때문에 안전하지 못한 이미지가 있을 수 있기 때문에 신중하게 선택하여 사용해야한다.


도커 이미지의 특징

 

불변성 (Immutable) 

도커 이미지는 불변성을 갖는다. 한 번 생성되면 이미지 내의 파일 및 설정은 변경되지 않으며 읽기 전용이다. 따라서 이미지를 변경하려면 새로운 이미지를 생성해야한다. 그렇다면 왜 이런 특성을 가져야하는걸까? 그 이유는 아래와 같다.

  • 애플리케이션의 일관성 유지 : 애플리케이션 배포 및 실행 중에 이미지가 변경되지 않음을 보장한다.
  • 보안 강화 : 이미지가 변경되지 않으므로 이미지에 포함된 코드와 설정에 대한 무결성을 유지하여 악의적인 사용자나 프로세스가 이미지를 변조하는 것을 방지할 수 있다.
  • 롤백 용이성 : 불변한 이미지를 사용하면 이전 버전의 이미지로 간단하게 롤백할 수 있다. 이미지가 변경되지 않으므로 신규 이미지에서 문제가 발생할 경우 이전 버전의 이미지로 컨테이너를 새로 생성하여 문제를 해결할 수 있다.
  • 이미지 공유 및 협업 : 불변한 이미지는 팀 간에 공유 및 협업이 용이하다. 이미지가 변경되지 않으므로 동일한 이미지를 여러 환경에서 공유하고 재사용할 수 있다.
  • 이미지 관리 간소화 : 이미지가 불변하므로 이미지의 관리가 단순화된다. 새로운 버전 생성시 이미지 빌드 후 태그를 붙이면 되므로 이미지 버전 관리가 용이하다
  • 캐싱 및 효율성 : 도커는 이미지 레이어를 캐싱하고 중복 데이터를 공유하기 때문에 이미지가 변경되지 않으면 동일한 레이어를 재사용하여 빠른 이미지 다운로드 및 컨테이너 생성이 가능하다.

불변성은 도커와 같은 컨테이너 기술을 사용하는 데 중요한 개념 중 하나이다. 컨테이너화된 애플리케이션의 안정성, 예측 가능성 및 보안을 강화하는데 기여하는데, 이러한 특성은 도커 이미지를 효과적으로 관리하고 배포하는데 큰 장점을 제공한다.

 

 

계층(Layer) 구조

불변성 특성을 설명하면서 한 번 언급이 되었는데, 도커 이미지는 레이어로 나누어서 관리된다. 이로써 이미지 빌드 및 관리를 용이하게 만들고, 이미지를 빠르게 생성/공유하는데 중요한 역할을 한다.

  • 베이스 이미지 (Base Image) : 계층 구조의 맨 하단에 위치하는 이미지로, OS 환경을 제공한다. 베이스 이미지는 보통 공식 이미지 (Ubuntu, CentOS 등)를 사용하며, 이 이미지 위에 다른 계층을 쌓아 올린다.
  • 도커 이미지 레이어 (Docker Image Layer) : 이미지의 변경 내용을 나타내는 여러 개의 계층으로 구성된다. 각 계층은 이미지의 파일 시스템에 대한 변경 사항을 포함하며, 컨테이너 실행 시에 이러한 계층을 합치고 중첩하여 이미지를 생성한다.
  • 계층의 불변성 : 각 계층은 변경되지 않으며 불변하게 유지된다. 이미지 변경되면 새로운 계층이 생성되며, 변경 내용은 새 계층에만 반영되는데, 이로 인해 이전 버전의 이미지와 계층은 변경되지 않고 그대로 유지된다.
  • 캐시(Cache) 활용 : 이미지 빌드 중에 이전에 빌드한 이미지 레이어카 캐싱되어 재사용된다. 이미지 빌드 속도를 높이고 중복 데이터를 줄여 이미지 다운로드와 관리에 효율성을 제공하기 위함이다.

 

태그 (Tags)

이미지에는 태그가 할당된다. 태그는 이미지 버전 또는 라벨로 사용되며, 같은 이미지에 대한 다양한 버전을 구분할 때 유용하다. 예를 들어 ‘ubuntu:20.4’ 에서 ‘20.4’ 부분은 태그다.

 

 

재사용 가능

도커 이미지는 재사용 가능하다. 위에서 빵틀과 비슷한 개념이라고 설명했는데, 한 번 빌드한 이미지는 여러 컨테이너를 생성하는데 사용할 수 있으며, 이것은 개발팀과 운영팀 간의 협업을 쉽게 만들어준다. 또한 이미지를 도커허브에 업로드하여 다른 사용자와 공유할 수도 있다.

'Docker' 카테고리의 다른 글

[Docker] Docker란? (컨테이너, 도커의 개념 및 장단점)  (0) 2023.12.29