Dokerfile은 이미지를 빌드하는데 필요한 모든 명령이 순서대로 포함된 텍스트 파일입니다.
키워드 | 설명 | 예시 |
기본 이미지 설정 | FROM alpine:latest | |
기본 쉘 지정 | SHELL ["/bin/sh", "-c"] | |
작업 디렉토리 변경 (default: /) | WORKDIR /app | |
실행 사용자 또는 그룹 설정 (default: root) | USER minjungk:42seoul | |
이미지 빌드 시 실행할 명령어
(이미지 레이어 생성) | RUN echo -n hello
RUN ["echo", "-n", "hello"] | |
로컬 파일 또는 URL을 컨테이너 내로 압축을 풀어서 복사 | ADD https://example.com/file.tar.gz /tmp/ | |
로컬 파일을 컨테이너 내로 복사 | COPY app.jar /app/ | |
Runtime 환경 변수 설정 | ENV DB_HOST=localhost | |
Build-time 환경 변수 설정 | ARG APP_VERSION=1.0 | |
컨테이너 시작 시 실행할 명령어 설정 | CMD ["java", "-jar", "app.jar"] | |
컨테이너 시작 시 실행할 주요 명령어 설정 | ENTRYPOINT ["nginx", "-g", "daemon off;"] | |
상속 이미지에서 실행할 기본 명령어 지정 | ONBUILD <INSTRUCTION>
ONBUILD ADD web.tar /var/www/html | |
컨테이너가 사용하는 포트 노출 예정
- docker run -P 호출 시에만 외부 랜덤 포트와 매핑됨 | EXPOSE 80 | |
이미지에 메타 데이터 레이블 추가 | LABEL version="1.0" description="My App" | |
볼륨을 마운트하거나 컨테이너에 연결 | VOLUME ["/data"] | |
컨테이너 종료 신호 (default: SIGTERM) | STOPSIGNAL SIGTERM | |
컨테이너 상태 확인
- 0(정상) 1(비정상) 2(예약된 코드)
--interval: 헬스체크 간격 (default: 30s)
--timeout: 타임아웃 시간 (default: 30s)
--retries: 타임아웃 횟수 (default: 3) | HEALTHCHECK NONE
HEALTHCHECK --timeout=10s CMD curl -f http://localhost || exit 1 |
1.
다단계 빌드
2.
.dockerignore
3.
임시 컨테이너 생성
4.
불필요한 패키지 제거
5.
애플리케이션 분리
6.
여러 줄 인수 정렬
7.
빌드 캐시 활용
1.
신뢰할 수 있는 소스에서 올바른 기본 이미지 선택하고 작게 유지
2.
다단계 빌드
3.
이미지 재구성
4.
이미지 취약점 확
Docker build 가이드
•
빌드 개념 소개
•
이미지 크기 최적화
•
빌드 속도 성능 개선
•
바이너리 빌드 및 내보내기
•
캐시 마운트 및 바인드 마운트
•
소프트웨어 테스팅
•
다중 플랫폼 빌드
Docker build 명령어
docker build 태그 지정이 안되는 버그가 간혹 있어서 <none>으로 뜰 수도 있습니다.
# PATH 기반 이미지 빌드
srcs/requirements/mariadb$ docker build --tag=mariadb:42 .
# 파일을 명시하여 이미지 빌드
srcs/requirements/mariadb$ docker build --tag=mariadb:42 < Dockerfile
# 이미지 목록 및 상세 정보 확인
srcs/requirements/mariadb$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 42 8b963556f4b6 4 seconds ago 315MB
srcs/requirements/mariadb$ docker image inspect mariadb:42
srcs/requirements/mariadb$ docker image inspect 8b963556f4b6
...
Shell
복사
# 일회용 컨테이너 생성
srcs/requirements/mariadb$ docker run -it --rm mariadb:42 /bin/sh
$> mariadb -uroot
$> exit
Shell
복사
번외)?
명령어어
Table
Search