Dockerfile 이란
- Docker Image를 만드는 스크립트이다.
- Docker Hub에서 미리 만들어져있는 Image를 사용하는 것이 아니라 사용자가 직접 Custom 하여 Image를 만들 수 있는 파일
Dockerfile 명령어
FROM
- 생성할 이미지의 베이스가 되는 이미지
- ex) Ubuntu, CentOS, JDK, Node.js
WORKDIR
- 컨테이너 내에서 작업할 디렉토리 설정
COPY
- host에서 이미지에 파일 복사하여 추가
ADD
- host안에 있는 파일/디렉토리 추가
- copy와 다른 점은 압축파일은 해제하여 추가해준다
EXPOSE
- host와 연결할 포트 번호를 설정
- 컨테이너 실행 시 -p 로 대체 가능
ENV
- 환경변수 설정
RUN
- 컨테이너 내부에서 돌아갈 명령어 이미지가 생성 되기 전에 실행 되는 명령어
CMD & ENTRYPOINT
- 컨테이너가 실행되었을 때 바로 실행되는 명령어 설정
- 차이점 : CMD는 추가 인자로 명령어를 덮어쓸 수 있지만, ENTRYPOINT는 추가 인자로 덮어쓸 수 없다.
// CMD
FROM ubuntu
CMD ["echo", "Hello, World!"]
docker run my-image echo "Goodbye, World!"
결과 : 'Goodbye, World!'
// ENTRYPOINT
FROM ubuntu
ENTRYPOINT ["echo", "Hello,"]
CMD ["World!"]
docker run my-image "Extra, arguments"
결과 : 'echo Hello, Extra, arguments, World!'
- ENTRYPOINT : 항상 실행해야 하는 명령을 해야할 경우
- CMD : 도커 컨테이너가 실행될 때 인자값을 지정하거나 기본 명령어 인자를 설정할 경우
VOLUME
- host 주소와 mount
- 도커 컨테이너에서 만든 데이터 저장소 영역, 설정 파일 및 폴더 등을 host로 노출해야할 경우 사용
Dockerfile 작성 예시
- 해당 예시는 Ubuntu 베이스 이미지에 JDK를 설치하는 예시
# 베이스 이미지 명시
# FROM {baseImage}:{version}
From ubuntu:20.04
# JDK 설치
RUN apt-get update && \\
apt-get install -y openjdk-11-jdk && \\
apt-get clean && \\
rm -rf /var/lib/apt/lists/*
# 환경 변수 설정 (선택 사항)
# ENV {환경 변수명}={변수}
ENV URL = 192.168.10.111
# 기본 작업 디렉토리 설정 (선택 사항)
WORKDIR /app
# 컨테이너가 시작될 때 실행할 명령을 지정 (선택 사항)
CMD ["bash"]
Dockerfile 빌드
# Dockerfile 빌드하기
$ docker build -t {이미지명} {작성한 경로}
# 해당 디렉토리에서 실행하고 이름이 dockerfile 인 경우
$ docker build -t {이미지명} .
# dockerfile로 빌드 후 실행
docker run --name {컨테이너명} 이미지명 [ARG..]