[Docker / Kubernetes] 5. Dockerfile & Dockerfile 명령어

서준교·2021년 8월 24일
0

Docker / Kubernetes

목록 보기
5/15
post-thumbnail

👉 이 게시글은 도커 / 쿠버네티스 온라인 부트캠프 with 카카오엔터프라이즈 강의를 바탕으로 작성되었습니다.

1. Dockerfile

dockerfile새로운 이미지를 빌드하는 데에 필요한 이미지와 설정들을 작성한 파일이다. dockerfile은 베이스 이미지, 미들웨어, 환경변수, 데몬 등과 같은 다양한 정보를 담고 있으며, 이는 도커 이미지의 근본이 된다.

dockerfile에서 컨테이너가 실행되기까지의 과정은 다음과 같다.

dockerfile을 기반으로 이미지를 생성하는 과정을 build라고 하고, 생성된 이미지를 기반으로 컨테이너를 실행하는 것을 run이라고 한다. 이제부터 dockerfile에서 이미지를 빌드하는 방법에 대해서 자세히 알아보도록 하자.

dockerfile은 베이스 이미지를 기반으로 한다. 베이스 이미지로는 보통 centOS, ubuntu와 같은 OS 이미지를 사용한다. 그 다음 명령을 실행할 때마다 이미지가 생성이 되는데, 이를 이미지 레이어 구조라고 한다.

위와 같이 각각의 command line이 개별적인 하나의 레이어를 구성하게 되고, 모든 명령어가 성공적으로 실행되면 이미지 빌드가 완료된다. 이후에 이 이미지로 컨테이너를 구동하게 되면 run 명령어가 실행된 상태로 구동이 되는 것이다.

dockerfile을 빌드하는 명령어는 다음과 같다.

$ docker build -t <이미지명:태그> <dockerfile 경로>

만약 Dockerfile이 아닌 다른 이름을 가진 파일을 빌드하기 위해서는 -f 옵션을 통해 빌드 대상을 특정해야 한다.

$ docker build -t <이미지명:태그> -f <파일명> <파일 경로>

dockerfile이 현재 위치하고 있는 디렉토리에 존재한다면 . 으로 표시한다.

동일한 도커 엔진 환경에서 dockerfile에 이미 사용되었던 이미지가 존재한다면, 이를 다시 받아오지 않고 로컬에 캐싱되어 있는 이미지를 사용한다. 즉, 동일한 영역에서 중복되는 이미지를 다시 받지 않기 때문에 효율적으로 공간 관리가 가능하다.


2. Dockerfile 명령어

- FROM

dockerfile의 베이스 이미지를 지정할 때 사용하는 명령어이다.

- RUN

이미지를 빌드할 때 실행되는 명령어로, 컨테이너가 실행되기 전에 실행된다.

- CMD

이미지를 통해 생성된 컨테이너 내부에서 실행되는 명령어이다. 하나의 dockerfile에는 단 한 줄의 CMD 명령어가 있어야 하며, 만약 여러 개라면 마지막 CMD 명령어만 유효하다.
CMD 명령어는 dockerfile에 입력된 값을 default로 가지며, 컨테이너 실행 시 다른 인자를 가변적으로 넘겨줄 수 있다.

- ENTRYPOINT

이미지를 통해 생성된 컨테이너 내부에서 실행되는 명령어라는 점에서 CMD와 유사하나, ENTRYPOINT를 통해 수행 명령을 정의한 경우, 해당 컨테이너가 실행될 때 반드시 ENTRYPOINT에서 지정한 명령을 수행한다.

- ONBUILD

이미지 빌드가 완료된 후에 실행되는 명령어이다. 기존에 생성된 이미지를 기반으로 새로운 이미지를 생성할 때 사용된다.

- HEALTHCHECK

컨테이너의 작동 상태를 체크하는 명령어이다.

- ENV

환경 변수를 설정하는 명령어이다.

- WORKDIR

작업 디렉토리를 할당하는 명령어이다.

- USER

이미지에 할당할 유저를 정하는 명령어이다.

- LABEL

이미지 버전 정보, 작성자 등의 레이블을 지정하는 명령어이다. inspect 명령어를 통해 확인 가능하다.

- EXPOSE

이미지 내부에 포트를 할당하는 명령어이다.

- ARG

dockerfile 내부에서 변수를 할당하는 명령어이다.

- SHELL

이미지에 기본 쉘을 할당하는 명령어이다.

- ADD

이미지에 파일 및 디렉토리를 추가할 때 사용하는 명령어이다.

- COPY

이미지 내부에서 파일을 특정 디렉토리 내부로 복사할 때 사용하는 명령어이다.

- VOLUME

이미지를 생성할 때 특정 영역을 볼륨으로 할당하는 명령어이다.

profile
매일 성장하는 개발자가 되고 싶습니다. 😊

0개의 댓글