FROM 베이스 이미지 지정
- FROM [이미지명] | [이미지명]:[태그명] | [이미지명][다이제스트]
- docker image ls --digests
RUN 명령 실행
CMD 컨테이너 실행 명령
LABEL 라벨 설정
EXPOSE 포트 익스포트
ENV 환경변수
ADD 파일/디렉토리 추가
COPY 파일 복사
ENTRYPOINT 컨테이너 실행 명령
VOLUME 볼륨 마운트
USER 사용자 지정
WORKDIR 작업 디렉토리
ARG Dockerfile 안의 변수
ONBUILD 빌드 완료 후 실행되는 명령
STOPSIGNAL 시스템 콜 시그널 설정
HEALTHCHECK 컨테이너의 헬스 체크
SHELL 기본 쉘 설정
RUN
FROM에서 베이스 이미지에 환경 구축을 위한 명령을 실행하는 명령어, 이미지가 만들어질 때(빌드) 실행 된다. 주로 라이브러리 설치 등에 사용(RUN pip install -r requirements.txt)
- shell형식추가적으로 exec형식이 있다.
- 기본적으로 shell에서 입력하는거랑 똑같다, 기본쉘은 shell명령어로 변경 가능
- 팁같은 문법으로 하나의 레이어만 사용한다.
- RUN 명령어 한 줄 마다 이미지 레이어가 앃인다. 그러므로RUN yum install httpd\\ php\\..
CMD & ENTRYPOINT
두 명령어 모두 컨테어너가 최초로 실행될 때 트리거된다.
차이점이라면 CMD 명령어의 경우, 빌드됬더라도 컨테이너 실행 시에 명령어를 바꿔줄 수 있다.
- 팁
- 실제로 적용 시 entry point 명령어가 더 먼저 시작된다.
- run명령어와 같이 shell, exec 포맷 둘 다 가능하지만 shell 포맷의 경우 쉘 창을 올리고 명령어가 실행되므로 exec포맷이 더 안정적일 수 있고, 도커 독에서도 이 방법을 추천한다.
ONBUILD란?
자신의 도커파일로 이미지를 생성할 때 설정할 수 있는 옵션으로, 해당 이미지를 베이스로 가져가면 ONBUILD 옵션에 설정해둔 명령이 실행된다.
HEALTHCHECK
--interval --timeout --retries 을 통해 원하는 간격과 대기시간 체크 횟수 등을 정할수 있다.
ENV
환경 변수를 설정한다.
ENV name = das\\
id = das\\
...
으로 선언하여 레이어를 최적화한다.
WORKDIR
컨테이너에서 작업할 경로를 정해주고 없다면 만든다.
영향을 받는 명령들은 RUN CMD ENTRY POINT COPY ADD
이며, WORKDIR로 지정한 경로에서 실행된다.
USER
USER [사용자명/UID] 로 선언한다.
디폴트 사용자를 사용하지않으면 RUN명령어로 사용자를 먼저 만들어야한다.
LABEL
이미지에 정보를 설정한다.
LABEL version = "1.0"
LABEL builder = "jk"
EXPOSE
컨테이너가 listen한 네트워크를 알려준다.
ARG
ENV와 다르게 Dockerfile 내부 변수를 설정할 수 있다.
ADD & COPY
ADD <host_path> <docker_path>
- add와 copy의 차이점은 copy는 단순한 로컬 영역의 파일만을 옮기수 있다.
- add는 링크를 통한 다운로드까지 가능하다.
VOLUME
VOLUME [”/mount_path”]
멀티스테이징
# 생성할 이미지명으로 이미지 생성
docker build -t [생성할 이미지명]:[태그명] [Dockerfile 위치]
# from으로 부터 베이스이미지가 같으면 전부 같은 imageID를 가진다.
# 중간이미지를 가짐으로서 캐싱이미지를 가진다.
---dockerfile---
# 1. Build Image
FROM golang:1.8.4-jessie AS builder
# Install dependencies
WORKDIR /go/src/github.com/asashiho/greet
RUN go get -d -v github.com/urfave/cli
# build modules
COPY main.go .
RUN GOOS=linux go build -a -o greet .
# ------------------------------------------
# 2. Production Image
FROM busybox
WORKDIR /opt/greet/bin
# Deploy modules
COPY --from=builder /go/src/github.com/asashiho/greet/ .
ENTRYPOINT ["./greet"]
--------------------------------
# 결과
docker build -t greet .
1번 이미지에서 만든 파일을 2번 이미지가 가져와서 실행만 하므로 경량화해서 운영 가능하다.
2번 이미지에서 추가모듈만 생성된 greet 라는 새로운 이미지 생성
'DevOps > Docker' 카테고리의 다른 글
도커 레지스트리 사용하기 (0) | 2022.03.07 |
---|---|
도커 실행 중인 컨테이너 관리와 작업 컨테이너 저장 (0) | 2022.03.07 |
도커 네트워크 (0) | 2022.03.07 |
도커 컨테이너 기본 명령어 다루기 (0) | 2022.03.07 |
도커 기술과 리눅스에 설치하기 (0) | 2022.03.07 |