Dockerfile?
- 도커 이미지를 빌드하기 위한 명령어가 들어 있는 텍스트 파일
- Docker는 Dockerfile에서 명령어를 읽어 이미지를 빌드
- default 파일 이름 : (파일 확장자 없이) Dockerfile
- 도커파일 빌드 명령어 : $ docker build
Dockerfile 지시어
instruction | description |
FROM <image> | 베이스 이미지 정의 * 도커파일은 FROM으로 시작 |
RUN <command> | 명령어를 실행하여 현재 이미지 위의 새로운 레이어 생성 |
WORKDIR <directory> | 다음의 모든 RUN, CMD, ENTRYPOINT, COPY, ADD 명령어에 대한 작업 디렉터리를 설정 |
COPY <src> <dest> | <src>경로에 있는 새로운 파일이나 디렉토리를 컨테이너 파일 시스템의 <dest>경로에 복사하고 추가 * 빌드 컨텍스트 또는 멀티스테이지 빌드 안에서 한스테이지에서 컨테이너로 파일을 복사할 때 사용 (build context: docker build 명령어를 실행할 때의 현재 디렉토리) |
ADD <src> <dest> | <src>경로에 있는 새로운 파일이나 디렉토리를 컨테이너 파일 시스템경로에 복사하고 추가 * COPY와 유사 * 원격 HTTPS와 Git URL에서 파일을 가져오거나, 빌드 컨텍스트에서 파일을 추가할 때 tar파일을 자동으로 추출하는 기능 지원 |
CMD <command> | 컨테이너가 실행될 때 실행할 명령어 설정, ENTRYPOINT와 함께 쓰일 때는 ENTRYPOINT의 인자를 지정 * 도커파일에서 하나만 존재 (여러개면 가장 마지막 CMD만 실행됨) * 명령어를 &&로 묶어 여러 명령어 실행 가능 |
ENTRYPOINT ["excutable", "param1", "param2"] | 컨테이너가 실행될 때 기본적으로 실행되는 프로그램을 지정 CMD와 함께 쓰일 때, ENTRYPOINT는 컨테이너의 주 실행 파일을 고정하고 CMD는 기본 인자를 설정 |
LABEL <key>=<value> | 이미지에 다양한 key-value 쌍으로 메타데이터 추가 |
ENV <key>=<value> | 환경변수 key값에 value값 설정 * 컨테이너 실행 시(docker run) -e <varname>=<value> 옵션으로 변경 가능 |
ARG <name>[=<default value>] | 빌드 시 빌더에게 전달해 사용할 변수 정의 * Docker 빌드 과정에서만 사용되며, 컨테이너 실행 후에는 사용할 수 없음 (ENV와 함께 사용하면 실행 시점에도 값 유지 가능) * 컨테이너 빌드 시(docker build) --build-arg <varname>=<value> 옵션으로 값 전달, 변경 가능 |
EXPOSE <port> | 컨테이너 내부에서 사용할 네트워크 포트 지정 * TCP, UDP 선택가능 (default: TCP) * 실제 포트를 개방하려면 컨테이너 실행시(docker run) -p(수동포트매핑) / -P(자동포트매핑) 옵션으로 포트 개방 해야함 |
Dockerfile 예시
- Node.js 기반 웹 애플리케이션 Dockerfile (from gpt) 작성
# 1. 베이스 이미지 설정
FROM node:18-alpine
# 2. 빌드 시 사용할 변수 정의
ARG NODE_ENV=production
# 3. 환경 변수 설정
ENV NODE_ENV=${NODE_ENV}
# 4. 컨테이너 내부 작업 디렉토리 설정
WORKDIR /app
# 5. 프로젝트 파일 복사
COPY package.json package-lock.json ./
# 6. 의존성 설치
RUN npm install --only=production
# 7. 앱 소스 코드 복사
COPY . .
# 8. 포트 설정 (기본적으로 Node.js 앱은 3000번 포트 사용)
EXPOSE 3000
# 9. 실행 명령어 설정
CMD ["node", "server.js"]
- node:18-alpine 이미지는 Node.js 18 버전이 설치된 Alpine Linux 기반 경량 이미지
- NODE_ENV=production은 기본값으로 설정
- ARG NODE_ENV 값을 ENV NODE_ENV로 설정하여 컨테이너 실행 시에도 환경 변수를 유지
- 이후 모든 RUN, COPY, CMD 등의 명령어는 /app 디렉토리에서 실행
- package.json과 package-lock.json을 컨테이너의 /app 디렉토리에 복사
- 컨테이너 내부에서 npm install 명령어를 실행
- 현재 디렉토리(.)의 모든 파일을 컨테이너의 /app 디렉토리에 복사
- 컨테이너가 사용할 포트를 3000번으로 지정
- 컨테이너가 실행될 때 node server.js 명령어를 실행하여 웹 서버를 시작
Dockerfile 실행 방법
1. 작성한 도커파일로 Docker 이미지 빌드
$ docker build -t myapp .
- -t : 빌드할 이미지에 태그/이름을 지정
- . : 현재 디렉토리를 빌드 컨텍스트로 사용
2. 빌드 완료 후 생성된 이미지 확인
$ docker images
3. 해당 이미지로 컨테이너 실행
$ docker run -d -p 8080:3000 myapp
- -d : 컨테이너를 백그라운드에서 실행됨
- -p : 컨테이너의 3000 포트를 호스트의 8080 포트로 연결 (http://localhost:8080 으로 접근 가능)
4. 컨테이너 상태 확인
$ docker ps
* dockerfile overview
https://docs.docker.com/build/concepts/dockerfile/#dockerfile-syntax
* dockerfile reference
https://docs.docker.com/reference/dockerfile/
'! > docker' 카테고리의 다른 글
docker compose (0) | 2025.05.29 |
---|---|
docker network (0) | 2025.04.15 |
docker volume, bind mounts (0) | 2025.04.12 |
Docker CLI 명령어 (0) | 2024.11.14 |
Docker 설치 (MacOS) (0) | 2022.09.05 |