본문 바로가기
DevOps/Docker

[Docker] : Dockerfile 작성하기

by 오주현 2022. 2. 24.
반응형

Dockerfile에는 컨테이너에서 수행해야 할 작업을 명시하기 때문에 사용되는 명령어를 알아야 한다.

 

디렉터리를 생성하고 그 안에 HTML 파일을 미리 만들어 두었다.

 

그 안에 Dockerfile이라는 이름의 파일을 저장해 준다.

 

이미지에 아파치 웹 서버를 설치하고 로컬에 있는 test.html 파일을 웹 서버로 접근할 수 있는 컨테이너의 디렉터리인 /var/www/html에 복사한다.

 

도커 엔진은 Dockerfile을 읽을 때 현재 디렉터리에 있는 Dockerfile이라는 이름을 가진 파일을 읽는다. Dockerfile은 Empty(빈) 디렉터리에 저장하는 것이 좋은데 이미지를 빌드할 때 사용되는 Context 때문이다.

 

우선, FROM, RUN, ADD 기초 명령어를 우선 학습한다. Dockerfile은 한 줄이 하나의 명령어가 된다. 소문자로 써도 상관은 없지만 주로 대문자로 표기한다.

 

FORM은 생성할 이미지의 베이스가 될 이미지를 뜻한다. FROM 명령어는 Dockerfile을 작성할 때 반드시 한 번 이상 입력해야 한다.

 

MAINTAINER은 이미지를 생성한 개발자의 정보를 나타낸다. 보통은 Dockerfile을 작성한 사람과 연락이 가능한 이메일 등을 입력한다. 하지만 도커 1.13.0 버전 이후로는 사용하지 않으며 LABEL로 교체해 표현이 가능하다.

 

LABEL maintainer "alicek106 <ohju96@naver.com>"

이런식으로 이메일 주소를 넣어서 사용이 가능하다. LABEL은 이미지에 메타데이터를 추가하며 키:값 형태로 저장이 된다.

 

RUN은 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행한다. 단, Dockerfile을 빌드하는 과정에서 별도 입력이 불가능하기 때문에 -y 옵션을 넣어주어야 한다. 따로 입력을 받아야 하는 RUN은 오류로 간주하고 빌드를 종료한다.

 

ADD는 파일을 이미지에 추가한다. 추가하는 파일은 Dockerfile이 위치한 디렉터리인 Context에서 가져온다. 이 명령어는 JSON 배열 형태로 [”추가파일이름”,..”컨테이너에추가될위치”]와 같이 사용할 수 있다.

 

WORKDIR 명령어는 명령어를 실행할 디렉터리를 나타낸다. WORKDIR /var/www/html이 실행되고 RUN touch test를 실행하면 /var/www/html 디렉터리에 test 파일이 생성이 된다.

 

WORKDIR /var
WORKDIR www/html

WORKDIR 명령어를 여러번 사용하면 cd 명령어를 여러번 사용한 것과 같다.위와 같이 입력해도 WORKDIR /var/www/html과 같다고 한다.

 

EXPOSE 명령어는 Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정한다. 생성했다고 무조건 이 포트가 호스트의 포트와 바인딩 되는 것은 아니다. 단지, 컨테이너의 80번 포트를 사용할 것을 나타내는 것이다.

 

CMD 명령어는 컨테이너가 시작될 때 마다 실행할 명령어를 설정하고 Dockerfile에서 한 번만 사용할 수 있다. apachectl -DFOREGROUND라는 커맨드를 내장하면 컨테이너를 생성할 때 별도 커멘드를 입력하지 않아도 이미지에 내장된 apachectl -DFOREGROUND 커맨드가 적용되어 컨테이너가 시작될 때 자동으로 아파치 웹 서버가 실행이 되는 것이다.

 

FROM ubuntu:14.04
MAINTAINER alicek106
LABEL "purpose"="practice"

FROM에서 Dockerfile에서 사용할 베이스 이미지를 ubuntu:14.04로 설정한다.

 

MAINTAINER를 통해 이름을 alicek106으로 설정하고 Dockerfile에서 생성될 이미지의 라벨을 purpose=practice로 설정한다.

 

RUN apt-get update
RUN apt-get install apache2 -y
ADD test.html /var/www/html

RUN 명령어를 차례대로 실행하고

ADD로 Dockerfile이 위치한 디렉터리에서 text.html 파일을 이미지의 /var/www/html 디렉터리에 추가한다.

 

WORKDIR /var/www/html
RUN ["/bin/bash", "-c", "echo hello >> test2.html"]

WORKDIR로 작업 디렉터리를 /var/www/html로 바꾸고 RUN[”/bin/bash. . . .로 test2.html파일을 생성하는데, 작업 디렉터리가 /var/www/html로 변경됐으므로 해당 디렉터리에 test2.html 파일이 생성된다.

 

EXPOSE 80
CMD apachectl -DFOREGROUND

EXPOSE를 통해 컨테이너가 사용해야 할 포트를 80번으로 설정하고 CMD로 컨테이너의 명령어를 apachectl -DFOREGROUND로 설정해 이미지 빌드를 마친다.


📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다.

반응형

댓글