본문 바로가기

방법론과 DevOps/Docker

이미지 빌드

이미지를 만드는 방법

 이미지를 만드는 방법은  현재 실행 중인 컨테이너 그 상태 그대로 이미지로 만들어 내는 이미지 커밋 방식과 도커 파일을 통해 이미지를 저장하는 이미지 빌드 두가지 방법이 있습니다. 정확히 말하자면 이미지 빌드도 이미지 커밋 방식을 포함한다고 볼 수 있지만, 실행중인 상태를 저장하느냐 아니냐에 따라 두가지고 분류 된다고 보면 됩니다

  • 이미지 커밋 : 현재 컨테이너 상태를 이미지로 저장
  • 이미지 빌드 : Dockerfile을 통해 이미지를 저장

 

이미지 커밋

이미지 커밋은 현재 컨테이너 상태를 이미지로 저장합니다.  보통 이미지 커밋을 사용하는 경우는  이미지로 띄운 컨테이너 동작 확인 중  수정사항이 발생하였을 경우 사용 되게 됩니다. 이미지 커밋의 과정은 아래와 같습니다.

  1. 이미지를 컨테이터로 실행
  2. 컨테이너의 내부 파일 변경
  3. Commit 으로 새로운 이미지 저장 

하지만 이러한 이미지 커밋은 결국 이미지를 생성하기 위해선 컨테이너를 실행하여야 하며 커밋 하나당 이미지의 레이어가 하나씩 추가 되기 때문에 이미지 하나당 불필요한 레이어를 다수 생성할 수 있습니다.

 

IaC( Infrastructure as Code

 Iac(Infrastructure as Code) 는 직역하면 코드를 통한 인프라 구성을 의미합니다. 현대 인프라 구성 과정에 중요한 방법론 이라 할 수 있으며, 인프라를 코드로 통해 관리하는 방법을 말합니다.

 도커의 이미지 빌드를 설명하기 앞서 IaC에 대해 설명하는 이유는  이미지 빌드에 필요한 도커파일이 이 IaC 방법론에 따른  빌드 방식이기 때문입니다.

기존의 인프라 관리는 대시보드와 같은 GUI를 제공하여 좀더 사용자 친화적인 관리 방식을 지원해왔습니다. 이러한 방법은 인프라 구성에 효과적일 수는 있지만 이 업무를 다른 사람에게 인수인계 하거나 작업 방식의 변경이 생길 시  몇가지 문제가 발생합니다. 

 담당자가 바뀌어  이를 인수인계 해준다고 가정해 본다면 각각의 GUI 화면별로 매뉴얼을 만들어  주어야 하며 새로운 담당자가 이를 숙지하기 위한 시간이 소요 됩니다. 또한 새로운 담당자가 작업 중 실수로 인해 클릭이나 명령을 잘못 입력하였을 경우 장애가 발생할 위험을 수반합니다.  즉 사람이 직접 인프라를 관리하다보면 인간의 실수가 개입할 수 있습니다.

 IaC는 이러한 단점을 해결하기 위해 등장한 방법론 입니다. 인프라르 구성하는 요소를 프로그래밍 소스로 하여  사람이 실수할 수 있는 경우를 줄이고 더욱 빠르고 정확하게 인프라를 구성하는 것이 가능 합니다.

 도커는 빌드 방식으로 IaC 방식을 채택한 프로그램 입니다. 도커파일이라는 코드 파일을 통해 원하는 이미지 상태를 코드로 작성후 도커 빌드 명령을 통해 도커가 이를 이미지로 빌드 해주는 방식을 사용합니다.

 

이미지 빌드 

이미지 빌드는 앞서 IaC 개념에서 설명 했든 도커 파일이라는 소스 명세를 통해 원하는 이미지 상태를 코드로 작성합니다.  도커 이미지 빌드의 과장은 아래와 같습니다 

  1.  원하는 이미지 상태를 코드(Dockerfile) 로 작성
  2.  docker build 명령을 통해 원하는 이미지 생성
  3.  임시 컨테이너 생성 
  4.  변경사항 적용 후 커밋 
  5.  임시 컨테이너 삭제

 

빌드 컨텍스트

 빌드 컨텍스트는 이미지를 사용할 때 사용 되는 디렉토리(폴더) 입니다. 이미지 빌드 방식은 도커 데몬이 임시컨테이너를 실행시키며 레이러를 하나씩 추가 해주는 방식입니다. 이때 도커 데몬에 추가할 레이어에 필요한 파일을 담아두고 전달 해주는 공간을 빌드 컨텍스트로 칭합니다.

 도커 빌드 명령을 사용하면 빌드 컨텍스트 전체가 도커 데몬에게 통째로 전달 됩니다. 정리하자면 도커 이미지 빌드를 위해서는 빌드 컨텍스트 공간에 파일을 위치 시켜야 빌드가 가능하며, 지정한 컨텍스트 이외의 공간에 있는 파일은 빌드 할 수 없습니다.  반대로 로 빌드 해야할 공간에 필요하지 않은 파일이 존재할 경우 이도 같이 빌드가 될 수 있기 때문에 빌드 컨텍스트를 지정할 때는 빌드에 필요한 파일만을 존재시킨 후  빌드하는 확인이 필요합니다.

'방법론과 DevOps > Docker' 카테고리의 다른 글

멀티 스테이지 빌드  (0) 2025.05.15
도커파일 지시어  (0) 2025.05.14
이미지와 레이어  (0) 2025.05.13
이미지 레지스트리  (0) 2025.04.24
이미지  (0) 2025.04.17