4. 도커 빌드와 빌드 컨텍스트

1. 도커의 이미지를 만드는 방법 : 커밋과 빌드

도커의 이미지를 생성하는 방법은 크게 두 가지가 있다. 커밋과 빌드이다.

커밋은 생성된 컨테이너를 바탕으로 이미지를 만드는 방법을 말한다.

빌드는 커밋으로 기반으로 하되, 좀 더 자동화된 방식이라고 할 수 있으며 이미지 생성에 많이 쓰이는 방법이다.

etc-image-0
https://jungeeyou.github.io/docker-3-post/

이미지를 만들 때는 반드시 생성된 컨테이너를 바탕으로 커밋을 해야 한다. 이전 포스팅에서 언급하였듯이 이미지는

레이어 구조이기 때문에 필요한 기능을 추가할 경우, 새로운 레이어가 추가되는데 이 또한 커밋하여 새로운 이미지로 만들 수 있다.

 

이 이미지 방식은 치명적인 단점이 있는데, 바로 커밋을 할 때마다 새로운 컨테이너를 만들어야 한다.

따라서 10개의 커밋을 해야한다면, 하나의 커밋을 진행할 때마다 컨테이너 생성과 삭제를 반복한다.

또한 직접 커밋을 수동으로 하는 과정에서 개발자의 실수가 발생할 수도 있다. 따라서 이러한 방식을 보완하고자 나온 방법이 빌드 방식이며, 현재 가장 많이 사용되는 방식이다. 그리고 커밋은 레이어 단위로 동작하기 때문에 여러 레이어를 추가할 때마다 그만큼 커밋도 반복해야 한다.

 

빌드는 구현 코드를 실제 애플리케이션으로 구동될 수 있도록 하는 작업을 뜻하기도 한다. 이미지의 빌드는 DockerFile이라는 코드를 통해 이미지 빌드에 필요한 정보들을 담을 수 있다. 그리고 빌드 명령어를 입력하게 되면 도커는 해당 DockerFile의 내용을 읽은 뒤, 이미지를 생성한다. 이처럼 컨테이너, 가상머신 등을 코드로 관리하는 방식을 IaC(Infrastructure as Code)라고 한다. 대규모 프로젝트에서는 수많은 컨테이너, 가상머신을 일일이 개발자가 수정하는 것이 매우 번거롭다. 담당자가 바뀔 경우, 계속 인수인계를 해야하고 그 과정에서 누락된 내용이 있다면 관리하는 과정에서 문제가 생길 수도 있다. 하지만 코드를 기반으로 관리할 경우, 담당자가 바뀌더라도 코드는 그대로이기에 언제든지 같은 상태로 관리할 수 있다. 따라서 코드를 통해 자동화하는 방식은 어느 분야에서나 중요하다고 할 수 있겠다.

 

2. 빌드 컨텍스트

빌드 컨텍스트란, 빌드에 필요한 파일들이 저장된 곳을 말한다. 도커는 이미지를 빌드할 때, 빌드 컨텍스트의 위치를 확인한다. 따라서 빌드 명령어에 빌드 컨텍스트 경로를 입력해야 한다.

 

docker build .

 

.을 입력할 경우, 현재 위치를 뜻하며 빌드 컨텍스트의 경로로 이동한 상태에서 빌드 명령어를 수행할 때는 .만 입력하면 된다.

 

빌드 컨텍스트에서의 파일들을 잘 관리하는 것이 중요한데, 그 이유는 이미지의 용량을 최소한으로 해야 네트워크 용량을 줄일 수 있기 때문이다. 빌드를 하는 이유는 기본적으로 컨테이너를 실행하고, 목적에 맞는 애플리케이션을 구동하기 위함일 것이다. 그런데 이와 무관한 파일들이 빌드 컨텍스트에 섞이게 되면, 불필요한 리소스까지 이미지에 포함되는 것이다. 이는 이미지의 용량을 증가시키고, 리소스 낭비로 이어진다. 따라서 dockerignore 파일을 통해 빌드에 포함시키지 않을 파일들을 지정할 수 있다. (마치 .gitignore를 통해 커밋에서 제외시킬 파일을 지정하는 것과 비슷하다)

 

출처 : 

https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%89%AC%EC%9A%B4-%EB%8F%84%EC%BB%A4/dashboard

 

[2024 NEW] 개발자를 위한 쉬운 도커 강의 - 인프런

현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근본적인 질문

www.inflearn.com