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 명령어를 실행하도록 바뀌는 것이다.
반응형