Tools/Docker

<Docker> 이미지 빌드 지시어

dataart 2024. 10. 14. 17:06

# Dockerfile 지시어(기본)

 

FROM 이미지명(필수)

  • 빌드하려는 이미지의 베이스 이미지를 지정
  • 이미지 커밋에서 기존 컨테이너 실행 후 컨테이너레이어의 Write 작업을 기반으로 새로운 이미지를 빌드한 것 처럼,
  • 기본적으로 실행할 컨테이너를 위한 베이스 이미지가 필요함

COPY 빌드컨텍스트경로 복사할경로

  • 원하는 파일을 레이어에 복사
  • 새로운 레이어 추가

RUN 명령어

  • 컨테이너 안에서 명령어를 실행하고, 결과를 새로운 레이어로 저장

CMD ["명령어"]

  • 컨테이너 실행 시 명령어 지정
  • 컨테이너 실행할 때에만 실행되므로, 별도로 이미지 레이어에 추가되지 않음
  • 명령어 지정 시 이미지 메타데이터의 CMD 필드에 저장됨

 

# Dockerfile 지시어(시스템)

 

WORKDIR 폴더명

  • 작업 디렉토리를 지정하고, 레이어를 추가
  • 이 지시어가 명시된 이후 모든 레이어 작업은 이 디렉토리 경로에서 실행됨

USER 유저명

  • 명령을 실행할 사용자 변경(기본은 root)하고, 레이어를 추가

EXPOSE 포트번호

  • 컨테이너가 사용할 포트를 명시해줌
  • 명시하지 않으면 컨테이너는 기본적으로 모든 포트 사용 가능
  • 다른 사람이 이 도커파일을 읽을 때, 애플리케이션이 사용하는 포트를 확인하도록 하기 위함

# Dockerfile 지시어(환경변수)

DB 접속 정보를 환경변수로 설정할 수도 있음.

 

ARG 변수명 변수값

  • 이미지 빌드시점의 환경변수 설정
  • 이미지 빌드할 때에만 환경변수를 사용하고, 컨테이너 실행 시점엔 설정되지 않음
  • docker build -build-arg 변수명 = 변수값 으로 덮어쓰기

ENV 변수명 변수값

  • 이미지 빌드 시점에서 환경변수 사용, 컨테이너 실행 시점에도 환경변수 설정 유지
  • docker run -e 변수명=변수값 으로 덮어쓰기

# Dockerfile 지시어(프로세스 실행)

엔트리포인트는 반복적으로 사용하는 명령어를 고정으로 박아두는거다.

예를 들어 도커 명령어를 사용할 땐 docker 로, 파이썬 명령어를 사용할 땐 python 으로 시작하는데,
이 때 엔트리포인트가 docker 또는 python이 된다.

 

엔트리포인트를 박아두면, CMD 부분에서는 엔트리포인트에 박힌 텍스트를 제외한 명령어만 입력하면 된다.
ENTRYPOINT ["python"]

CMD["--version"]

이렇게 작성하면 결과적으로 --version 명령어를 실행한다.

 

컨테이너를 실행하는 docker run 명령어에서, CMD 명령어 부분을 수정하면, 그 CMD로 수정되어 실행된다.

docker run --name container-app app:tag list

예를 들어 위 명령어 처럼 docker run 명령어 맨 뒤에 list 를 입력하면

결과적으로 컨테이너는 python list 명령어를 실행하도록 바뀌는 것이다.

반응형