본문 바로가기
도커/개발자를 위한 쉬운 도커

4.3 도커(Docker) 이미지 빌드: 이미지 빌드(Build)

by limdae94 2024. 6. 29.
 

개발자를 위한 쉬운 도커 강의 | 데브위키 - 인프런

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

www.inflearn.com

 

1. IaC와 이미지 빌드

IaC 와 이미지 빌드

 

IaC(Infrastructure as Code)는 인프라 상태를 코드로 관리하는 것을 의미한다.
도커에서도 IaC 방법을 활용해서 코드로 이미지를 관리한다. 이러한 방식 이미지 빌드라고 한다.

 

사람이 화면 혹은 CLI 를 통해 관리 및 운영하는 이전 방식

회사의 가상 머신을 관리한다고 가정하자. 가상 머신을 관리하는 대시보드에서 클릭 혹은 명령으로 작업을 수행한다. 이때 다른 사람에게 인계하는 경우에 해당 프로그램의 메뉴얼을 작성하기 위해 어느 부분을 클릭해야 되는지 캡처해서 도식화해야 한다. 이 과정에서 많은 자원이 소모되고 운영 실수 혹은 누락이 될 수 있다.

 

Dockerfile

이러한 문제점을 극복하고자 인프라 상태를 코드로 관리하는 IaC 방식이 등장한다. 원하는 이미지 상태를 Dockerfile 파일 안에 코드를 작성하고 docker build 명령을 통해 이미지를 생성한다. 모든 Image는 Dockerfile에 따라서 임시 컨테이너를 생성하고, 변경사항을 적용한 후에 커밋을 수행하고(새로운 레이어 생성), 임시적으로 생성된 컨테이너를 삭제하여 자원을 자동으로 관리한다. 그리고 이미지 버전 관리를 지원한다.

 

docker build -t 이미지명 Dockerfile경

docker build -t 이미지명 Dockerfile경로 # 도커파일을 통해 이미지 빌드

도커파일을 통해 이미지를 빌드는 build 명령이다.

 

FROM 이미지명, COPY 파일경로 복사할경로, CMD ["명령어"]

FROM 이미지명 # 베이스 이미지를 지정
COPY 파일경로 복사할경로 # 파일을 레이어에 복사
CMD ["명령어"] # 컨테이너 실행 시 명령어 지정

도커파일의 문법은 지시어와 옵션으로 구성된다.

 

Dockerfile 파일 안에 지시어

FROM nginx:1.23

COPY index.html /usr/share/nginx/html/index.html

CMD [ "nginx", "-g", "deamon off;" ]

도커 파일 작성을 위해서는 dockerfile 파일을 생성해야 한다. 실습 파일은 github에서 clone 받아서 수행하자. 01.buildnginx 파일 안에 Dockerfile 파일을 생성하고 안에 그림과 같이 작성한다.

 

docker build -t 레지스트리계정명/buildnginx

docker build -t limdaeil94/buildnginx .

도커 파일이 존재하는 경로로 이동하고 build 명령을 수행한다. 마지막의 . 이 의미는 현재 폴더를 의미한다. 현재 폴더를 나타낸 이유는 명령을 실행하는 경로인 01.buildnginx 안에 빌드에 사용할 도커 파일이 존재한다는 것을 지정하는 부분이다. 지금은 도커 파일이 있는 경로에서 명령을 실행하기 때문에 현재 경로를 의미하는 . 만 입력해도 도커 파일을 인식하고 실행할 수 있다.

 

docker run -d -p 80:80 --name build-nginx

docker run -d -p 80:80 --name build-nginx 레지스트리계정명/buildnginx # 빌드로 제작한 이미지로 컨테이너 실행

 

commit 과 build

커밋은 사용자가 직접 새로운 이미지를 만드는 방식이고 빌드는 도커 데몬이 도커파일에 작성된 코드에 따라서 새로운 이미지를 자동으로 생성하는 방식이다. 도커 빌드는 IaC 개념으로 인프라의 상태를 도커파일이라는 코드로 관리가 가능하다. 커밋 빌드에서 사용자가 직접 수행했던 일들을 도커파일 안에 지시어를 작성하고 도커 데몬에게 빌드를 위임한다. 도커파일을 사용하면 여러 개의 레이어 구조를 활용할 수 있다.