Dockerfile 지시어
FROM
FROM <이미지>[:<태그>]
- 모든 Dockerfile은 FROM 지시어로 시작해야 합니다.
- 베이스 이미지를 지정하는 역할을 합니다.
- 태그를 지정하지 않으면 자동으로 'latest' 태그가 사용됩니다.
- 프로덕션 환경에서는 안정성을 위해 반드시 특정 버전을 지정하는 것이 좋습니다.
ENTRYPOINT와 CMD의 관계
기본 문법
ENTRYPOINT ["실행 파일", "파라미터1"] CMD ["파라미터2", "파라미터3"]
동작 방식
ENTRYPOINT와 CMD가 함께 사용될 때:
- ENTRYPOINT: 반드시 실행될 명령어를 지정
- CMD: ENTRYPOINT에 전달될 기본 파라미터를 지정
실제 예시
# 예시 1: 기본적인 echo 명령어 ENTRYPOINT ["echo"] CMD ["Hello, World!"] # 실행 결과: echo Hello, World! # docker run 이미지명 "안녕하세요!" 실행 시: echo 안녕하세요! # 예시 2: 웹 서버 실행 ENTRYPOINT ["nginx"] CMD ["-g", "daemon off;"] # 예시 3: Python 애플리케이션 ENTRYPOINT ["python"] CMD ["app.py", "--port", "8000"]
COPY vs ADD
COPY
COPY <호스트 경로> <컨테이너 경로>
- 단순히 로컬 파일이나 디렉토리를 컨테이너로 복사
- 투명하고 예측 가능한 동작
- 대부분의 경우 COPY 사용을 권장
ADD
ADD <호스트 경로> <컨테이너 경로>
- COPY의 모든 기능 포함
- 추가 기능:
- URL에서 파일 다운로드 지원
ADD http://example.com/file.tar.gz /app/
- 로컬의 tar 압축 파일 자동 해제
ADD app.tar.gz /app/
- URL에서 파일 다운로드 지원
- 주의사항:
- URL에서 다운로드한 파일은 자동으로 압축 해제되지 않음
- 불필요한 레이어가 생성될 수 있음
- 예측하기 어려운 동작이 발생할 수 있음
권장 사용법:
- 일반적인 파일 복사: COPY 사용
- 압축 파일 해제가 필요한 경우: ADD 사용
- URL 다운로드가 필요한 경우: curl이나 wget 사용을 권장
RUN curl -O http://example.com/file.tar.gz \ && tar -xzf file.tar.gz \ && rm file.tar.gz
기타 주요 지시어
WORKDIR
WORKDIR <경로>
작업 디렉토리를 설정합니다. 이후의 모든 명령어는 이 디렉토리를 기준으로 실행됩니다.
ENV
ENV <키> <값> ENV <키>=<값>
환경 변수를 설정합니다. 이미지 빌드 시점과 컨테이너 실행 시점 모두에서 사용 가능합니다.
EXPOSE
EXPOSE <포트> [<포트>...]
컨테이너가 실행 중에 리스닝할 포트를 지정합니다.
VOLUME
VOLUME ["<경로>", ...] VOLUME <경로>
컨테이너의 데이터를 영구적으로 저장할 볼륨을 지정합니다.
USER
USER <사용자>[:<그룹>]
RUN, CMD, ENTRYPOINT 등의 명령어를 실행할 사용자를 지정합니다. 보안을 위해 root가 아닌 사용자로 실행하는 것이 좋습니다.
'Cloud > Docker' 카테고리의 다른 글
도커 컨테이너의 7단계 라이프사이클 (0) | 2024.10.06 |
---|---|
Docker 기본 명령어 정리 (4) | 2024.10.06 |
Dockerfile 지시어
FROM
FROM <이미지>[:<태그>]
- 모든 Dockerfile은 FROM 지시어로 시작해야 합니다.
- 베이스 이미지를 지정하는 역할을 합니다.
- 태그를 지정하지 않으면 자동으로 'latest' 태그가 사용됩니다.
- 프로덕션 환경에서는 안정성을 위해 반드시 특정 버전을 지정하는 것이 좋습니다.
ENTRYPOINT와 CMD의 관계
기본 문법
ENTRYPOINT ["실행 파일", "파라미터1"] CMD ["파라미터2", "파라미터3"]
동작 방식
ENTRYPOINT와 CMD가 함께 사용될 때:
- ENTRYPOINT: 반드시 실행될 명령어를 지정
- CMD: ENTRYPOINT에 전달될 기본 파라미터를 지정
실제 예시
# 예시 1: 기본적인 echo 명령어 ENTRYPOINT ["echo"] CMD ["Hello, World!"] # 실행 결과: echo Hello, World! # docker run 이미지명 "안녕하세요!" 실행 시: echo 안녕하세요! # 예시 2: 웹 서버 실행 ENTRYPOINT ["nginx"] CMD ["-g", "daemon off;"] # 예시 3: Python 애플리케이션 ENTRYPOINT ["python"] CMD ["app.py", "--port", "8000"]
COPY vs ADD
COPY
COPY <호스트 경로> <컨테이너 경로>
- 단순히 로컬 파일이나 디렉토리를 컨테이너로 복사
- 투명하고 예측 가능한 동작
- 대부분의 경우 COPY 사용을 권장
ADD
ADD <호스트 경로> <컨테이너 경로>
- COPY의 모든 기능 포함
- 추가 기능:
- URL에서 파일 다운로드 지원
ADD http://example.com/file.tar.gz /app/
- 로컬의 tar 압축 파일 자동 해제
ADD app.tar.gz /app/
- URL에서 파일 다운로드 지원
- 주의사항:
- URL에서 다운로드한 파일은 자동으로 압축 해제되지 않음
- 불필요한 레이어가 생성될 수 있음
- 예측하기 어려운 동작이 발생할 수 있음
권장 사용법:
- 일반적인 파일 복사: COPY 사용
- 압축 파일 해제가 필요한 경우: ADD 사용
- URL 다운로드가 필요한 경우: curl이나 wget 사용을 권장
RUN curl -O http://example.com/file.tar.gz \ && tar -xzf file.tar.gz \ && rm file.tar.gz
기타 주요 지시어
WORKDIR
WORKDIR <경로>
작업 디렉토리를 설정합니다. 이후의 모든 명령어는 이 디렉토리를 기준으로 실행됩니다.
ENV
ENV <키> <값> ENV <키>=<값>
환경 변수를 설정합니다. 이미지 빌드 시점과 컨테이너 실행 시점 모두에서 사용 가능합니다.
EXPOSE
EXPOSE <포트> [<포트>...]
컨테이너가 실행 중에 리스닝할 포트를 지정합니다.
VOLUME
VOLUME ["<경로>", ...] VOLUME <경로>
컨테이너의 데이터를 영구적으로 저장할 볼륨을 지정합니다.
USER
USER <사용자>[:<그룹>]
RUN, CMD, ENTRYPOINT 등의 명령어를 실행할 사용자를 지정합니다. 보안을 위해 root가 아닌 사용자로 실행하는 것이 좋습니다.
'Cloud > Docker' 카테고리의 다른 글
도커 컨테이너의 7단계 라이프사이클 (0) | 2024.10.06 |
---|---|
Docker 기본 명령어 정리 (4) | 2024.10.06 |