도커 파일
: 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경 변수 설정 등을 기록한 파일
: 공식 허브에서 이미지를 받아서 컨테이너에서 작업 후 이미지로 커밋하는 것 보다 더 안정적
=> 명확한 패키지 설치
=> 이미지 생성의 자동화
=> 쉬운 배포
: 참조 (https://2mukee.tistory.com/198)
Docker file 속성
ㆍFROM
: 베이스 이미지 지정 (필수)
ㆍRUN
: 실행할 명령어 (이미지가 빌드되면서 실행)
ㆍCMD (필수)
: 이미지가 컨테이너로 실행될 때 실행할 명령
: 1개만 작성 가능 (여러 개 작성시 가장 마지막 명령만 실행)
: docker run 명령어에서 실행된 명령어가 더 높은 우선순위를 가짐
ㆍENTRYPOINT (필수)
: 이미지가 컨테이너로 실행될 때 실행할 명령
: 1개만 작성 가능 (여러 개 작성시 가장 마지막 명령만 실행)
: CMD보다 우선순위가 높으며 CMD와 같이 작성할 경우 CMD의 명령어는 ENTRYPOINT의 매개변수로 취급됨
: docker run 명령어에서 실행된 명령어가 덮어쓰기 되지 않음
ㆍLABEL
: 라벨 설정 (도커 파일의 별명)
: 버전 정보, 작성자 정보, 코멘트 등
: LABEL maintainer 2mukee
: LABEL title="mohaemookji"
: LABEL version="1.0"
ㆍEXPOSE
: 호스트에 열어둘 포트
ㆍENV
: 환경 변수
: ENV key value
: ENV key = value (여러 개를 설정할 때)
: \구문을 통해 한 번 에 설정 가능
ㆍADD
: 파일 및 디렉터리 추가
: 원격 파일의 다운로드 및 아카이브의 압축 해제 등 수행
: URL 끝에 /을 추가하면 파일명이 URL로 됨
ㆍCOPY
: 파일 및 디렉터리 복사
: 단순히 이미지 안에 파일을 배치
ㆍVOLUME
: 마운트할 디렉터리
: 영구적으로 저장할 데이터를 호스트OS에 저장하기 위함
ㆍUSER
: 사용자 지정
ㆍWORKDIR
: 명령어를 실행할 작업 디렉터리
ㆍARG
: docker file 내 변수
ㆍONBUILD
: 빌드 완료 후 실행되는 명령어
: 해당 도커 파일로 생성한 이미지를 베이스 이미지로 한 다른 도커파일을 빌드 할때 실행
: 개발한 프로그램을 전개하는 명령어를 주로 지정 (ADD / COPY)
ㆍSTOPSIGNAL
: 시스템 콜 시그널 설정
: 컨테이너를 종료할 때 송신하는 시그널
ㆍHEATHCHECK
: 컨테이너 상태 체크
: 헬스 체크 간격 및 타임아웃, 타임아웃 횟수 등 설정
ㆍSHELL
: 기본 쉘 설정
이미지 빌드
: docker build -t 도커허브아이디/이미지_명:태그명 도커파일_위치
: 이미지는 도커파일의 명령어 한 줄씩 읽어들이면서 임시로 컨테이너를 생성하고 지우는 방식으로 빌드가 수행 됨
: 도커 파일은 빈 디렉터리 안에 작성하는 것을 권장 (도커파일 내 모든 파일들이 빌드 되기 때문)
멀티스테이지 빌드
: 개발 환경용 이미지와 제품 환경용 이미지를 한 파일로 작성하여 이미지의 빌드 속도를 올리는 방법
: FROM을 두 개 작성하여 하나의 도커파일에서 두 개의 이미지가 빌드 되도록 설정
실행 명령어의 형식
ㆍShell 형식
: RUN apt-get install -y mongodb
: /bin/sh를 사용하여 실행
ㆍExec 형식
: RUN ["apt-get", "install", "-y", "mongodb"]
: 명령어, 매개변수, 매개변수... 구조
: 쉘을 경유하지 않고 직접 실행
※ RUN 명령어는 한 줄로 작성하는 것을 추천
: \을 이용하여 줄바꿈을 통해 가독성을 높이는 방법도 좋음
빌드 제외 파일 설정
: .dockerignore 파일에 설정
: .gitignore와 같은 형식
Refference
: 완벽한 IT 인프라 구축을 위한 Docker (http://www.yes24.com/Product/Goods/64728692)
'Container > Docker' 카테고리의 다른 글
클라우드 환경에서 Docker 컨테이너 오케스트레이션 환경 구축 (0) | 2021.10.19 |
---|---|
구글 클라우드 플랫폼을 이용하여 도커 private 이미지 관리 (0) | 2021.10.19 |
다시 정리해 보는 Docker - 명령어 편 (컨테이너 / 이미지 / 네트워크 관리) (0) | 2021.10.15 |
다시 정리해 보는 Docker - 개념편 (0) | 2021.10.15 |
컨테이너 끼리 RSA키 주고 받아 컨테이너 간 SSH 통신 수립하기 (0) | 2021.10.03 |