본문 바로가기
풀스택 개발 들여다보기

[Docker] 도커 이미지 빌드 - Dockerfile 기본 구조

by 영바이트 2022. 3. 15.

 

앞의 포스팅에서 도커 이미지를 생성하는 방법에 대해 살펴보았고 Dockerfile이라는 스크립트를 이용해서 도커 이미지 생성 과정을 관리하는 예에 대해서도 간단히 살펴보았다.

2022.03.09 - [풀스택 개발 들여다보기] - [Docker] 컨테이너를 이미지로 저장하기 - 도커 이미지 생성

 

[Docker] 컨테이너를 이미지로 저장하기 - 도커 이미지 생성

컨테이너 실행 중에 업데이트된 내용은 컨테이너를 제거하면 사라진다. 특정 상태의 컨테이너를 보관하고 싶다면 도터 이미지로 만들어야 한다. 이미지를 도커 컨테이너 프로세스를 실행하기

youngbyte.tistory.com

 

실행중인 도커 컨테이너를 docker commit 명령어를 이용해서 이미지로 저장할 수도 있지만 자동화된 이미지 생성, 그리고 관리의 편리함 때문에 Dockerfile이라는 스크립트에 이미지 생성 과정을 기술하여 관리한다. 이번 포스팅에서는 Docker 파일의 기본 구조에 대해 살펴보도록 하자.

 

1. Dockerfile의 기본 구조

Dockerfile은 베이스 이미지Base image 위에서 해야할 작업들을 시간 순서로 기술한 스크립트다. 베이스 이미지 위에 작업 내용들이 추가되고 새로운 이미지로 만들어진다. 따라서 Dockerfile에서 필수적인 내용은 베이스 이미지 지정과 추가적인 작업들이라고 할 수 있다.

 

FROM ubuntu:latest
MAINTAINER smith@matrix.net
RUN apt-get update
RUN apt-get install -y git

 

위 내용은 ubuntu 최신 release 위에 git을 설치한 이미지를 만드는 Dockerfile 스크립트다.

 

- FROM ubuntu:latest

FROM 항목은 베이스 이미지를 지정한다. 위 예는 ubuntu:latest 이미지 위에서 이어지는 작업들을 진행한다. 만약 해당 이미지가 없다면 docker hub(도커의 git hub이라고 보면 된다)에서 다운로드 한다.


- MAINTAINER smith@matrix.net

MAINTAINER 항목은 반드시 필요한 것은 아니다. 하지만 누가 작성했는지 명시하기 위해 사용한다.


- RUN apt-get update

RUN 항목은 컨테이너 위에서 실행할 내용을 지정한다. 일반적으로 컨테이너의 기본 쉘 환경 위에서 실행된다. 


RUN apt-get install -y git

Dockerfile을 이용해서 이미지를 생성하면 생성 과정에 사용자가 간섭할 수 없다. 즉 배치batch 과정으로 작업이 진행된다. 따라서 -y 옵션과 같이 작업에 필요한 사용자의 결정 내용을 미리 알려주어야 한다.

 

Dockerfile 명령어들을 다른 내용들과 구분하기 위해 대문자로 적어준다. 소문자로 적어도 실행은 가능하지만 그렇게 기술한 Dockerfile을 한 번도 본적이 없다.

 


 

2. Dockerfile을 이용한 이미지 생성 명령 - docker build

docker build 명령을 이용하면 Dockerfile 스크립트를 이용해서 이미지를 생성할 수 있다.

$> docker build [-f Dockerfile] -t <생성될 이미지 이름:태그> <작업 디렉토리>

 

docker build 명령은 기본으로 Dockerfile 이름의 스크립트를 찾는다. 만약 다른 이름의 스크립트를 지정하려한다면 -f 옵션을 이용해서 파일을 지정한다. -t 옵션을 이용해서 생성될 이미지의 이름과 태그tag를 설정한다. 그리고 마지막으로 작업 디렉토리를 지정해 준다. 일반 적으로 현재 위치 ./.나 .를 기술해 준다. 예를 하나 살펴보면 아래와 같다.

$> docker build -t ubuntu:git .

 

작업 디렉토리에는 이미지를 만들기 위해 컨테이너로 복사해야할 외부 파일이 있다면 해당 파일들이 보관된다. 따라서 반드시 지정해주어야 한다.

 


 

3. Dockerfile을 구성하는 명령어 살펴보기 - part 1 of 2

 

이미지를 만들기 위해 수행되어야 할 작업들이 시간 순서로 기술되어 있는 파일이 Dockerfile임을 살펴보았다. Dockerfile의 다양한 명령어들을 살펴보면 Dockerfile이 할 수 있는 작업들을 함께 알 수 있을 것이다. 앞서 살펴보았던 FROM, MAINTAINER 명령어들은 제외하였다.

 

◆ RUN

이미지가 빌드될 때 실행할 명령을 지정한다.

RUN <명령어>

예) RUN apt-get install -y git

※ 이미지 빌드 과정 중에는 사용자가 개입할 수 없으므로 batch 옵션인 -y(=yes)를 반드시 붙여준다.

 

특정 쉘(예, bash)을 이용해서 명령을 실행할 경구 아래와 같이 array 형식([ ]사용)으로 기술하고 쉘을 명시해준다.

예) RUN ["/bin/bash", "-c", "source venv/bin/activate"]

※ -c: command

 

◆ COPY

호스트의 파일을 도커 이미지 안으로 복사한다. 작업 디렉토리에 안(아래)에 있는 파일들만 추가할 수 있다.

COPY <복사할 파일> <도커 이미지 안에서 파일이 추가될 경로>

예) COPY data.txt /tmp/data.txt

 

◆ ADD

데이터를 도커 이미지 안으로 복사한다. COPY와 달리 URL로 지정된 파일, 압축된 파일 해제 및 복사가 가능하다. ADD 명령 보다는 COPY 명령이 지시하는 바가 명확하기 때문에 COPY 명령이 더 선호된다.

ADD <추가할 파일> <도커 이미지 안에서 파일이 추가될 경로>

예) ADD data.txt /tmp/data.txt

 

◆ WORKDIR

RUN 명령어가 실행될 디렉토리를 지정(변경)한다.

WORKDIR <디렉토리>

예) WORKDIR /tmp

 


 

글이 지나치게 길어지는 것이 좋지 않을 것 같아 이어지는 포스팅에서 Dockerfile에서 사용되는 명령어들을 이어서 살펴보도록 하겠다.

 

댓글