Dockerfile

Docker Format

# Comment
INSTRUCTION arguments
  • λͺ…λ Ήμ–΄λŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κ΄€λ‘€λŠ” μΈμˆ˜μ™€ 더 μ‰½κ²Œ κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ λŒ€λ¬Έμžλ‘œ μ§€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • DockerfileλŠ” 무쑰건 FROMλͺ…λ Ήμ–΄λ‘œ μ‹œμž‘ν•΄μ•Ό ν•œλ‹€.

  • 이것은 parser directives, comments, 와 μ „μ—­ ARGs 뒀에 μžˆμ„ 수 μžˆλ‹€.

  • FROM λͺ…λ Ήμ–΄λŠ” λΉŒλ”©ν•˜λ €κ³  ν•˜λŠ” Parent Imageλ₯Ό μ§€μ •ν•œλ‹€

  • FROM μ•žμ—λŠ” Dockerfile 의 FROM 행에 μ‚¬μš©ν•˜λŠ” 인수λ₯Ό μ„ μ–Έν•˜λŠ” ν•˜λ‚˜ μ΄μƒμ˜ ARG λͺ…λ Ήμ–΄λ§Œ 올 수 μžˆλ‹€.

  • DockerλŠ” #으둜 μ‹œμž‘ν•˜λŠ” 쀄이 Parser directives이 μ•„λ‹ˆλ©΄ μ£Όμ„μœΌλ‘œ μ²˜λ¦¬ν•œλ‹€.

# Comment 
RUN echo 'we are running some # of cool things'

Parser directives

Parser directives은 선택 사항이며 Dockerfile의 ν•˜μœ„ 라인이 μ²˜λ¦¬λ˜λŠ” 방식에 영ν–₯을 μ€€λ‹€.

Parser directives은 # directive=value ν˜•μ‹μ˜ 특수 μœ ν˜•μ˜ μ£Όμ„μœΌλ‘œ μž‘μ„±λ©λ‹ˆλ‹€. 단일 μ§€μ‹œλ¬Έμ€ ν•œ 번만 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

주석, 빈 쀄 λ˜λŠ” λΉŒλ” λͺ…령이 처리되면 DockerλŠ” 더 이상 Parser directives을 μ°Ύμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.λ”°λΌμ„œ λͺ¨λ“  νŒŒμ„œ μ§€μ‹œλ¬Έμ€ Dockerfile의 맨 μœ„μ— μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

Invalid due to appearing twice:

# directive=value1
# directive=value2

FROM ImageName

Parser directives이 μ•„λ‹Œ 주석 뒀에 있으면 μ£Όμ„μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€.

# About my dockerfile
# directive=value
FROM ImageName

The following parser directives are supported:

syntax

이 κΈ°λŠ₯은 BuildKit λ°±μ—”λ“œλ₯Ό μ‚¬μš©ν•  λ•Œλ§Œ μ‚¬μš©ν•  수 있으며 ν΄λž˜μ‹ λΉŒλ” λ°±μ—”λ“œλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λ¬΄μ‹œλ©λ‹ˆλ‹€.

  • BuildKit은 λ ˆκ±°μ‹œ λΉŒλ”λ₯Ό λŒ€μ²΄ν•˜κΈ° μœ„ν•΄ κ°œμ„ λœ λ°±μ—”λ“œμž…λ‹ˆλ‹€. BuildKit은 버전 23.0λΆ€ν„° Docker Desktop 및 Docker Engine μ‚¬μš©μžλ₯Ό μœ„ν•œ κΈ°λ³Έ λΉŒλ”μž…λ‹ˆλ‹€.

escape

# escape=\ (backslash)
# escape=` (backtick)

escape μ§€μ‹œλ¬Έμ€ Dockerfileμ—μ„œ 문자λ₯Ό escapeν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 문자λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ κΈ°λ³Έ μ΄μŠ€μΌ€μ΄ν”„ λ¬ΈμžλŠ” \μž…λ‹ˆλ‹€.

Environment replacement

ν™˜κ²½ λ³€μˆ˜(ENV 문으둜 선언됨)λŠ” νŠΉμ • λͺ…λ Ήμ—μ„œ Dockerfileμ—μ„œ λ³€μˆ˜λ‘œ μ‚¬μš©λ  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

ν™˜κ²½ λ³€μˆ˜λŠ” Dockerfileμ—μ„œ $variable_name λ˜λŠ” ${variable_name}으둜 ν‘œμ‹œλ©λ‹ˆλ‹€.

${variable_name} syntax은 μ•„λž˜μ— μ§€μ •λœ λͺ‡ κ°€μ§€ ν‘œμ€€ bash μˆ˜μ •μžλ„ μ§€μ›ν•©λ‹ˆλ‹€.

  • ${variable:-word}λŠ” λ³€μˆ˜κ°€ μ„€μ •λ˜λ©΄ κ²°κ³Όκ°€ ν•΄λ‹Ή 값이 됨을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. λ³€μˆ˜κ°€ μ„€μ •λ˜μ§€ μ•ŠμœΌλ©΄ 단어가 κ²°κ³Όκ°€ λ©λ‹ˆλ‹€.

  • ${variable:+word}λŠ” λ³€μˆ˜κ°€ μ„€μ •λ˜λ©΄ 단어가 κ²°κ³Όκ°€ 되고, κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ κ²°κ³ΌλŠ” 빈 λ¬Έμžμ—΄μž„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€

ν™˜κ²½ λ³€μˆ˜λŠ” Dockerfile의 λ‹€μŒ μ§€μ‹œλ¬Έ λͺ©λ‘μ—μ„œ μ§€μ›ν•œλ‹€

  • ADD

  • COPY

  • ENV

  • EXPOSE

  • FROM

  • LABEL

  • STOPSIGNAL

  • USER

  • VOLUME

  • WORKDIR

  • ONBUILD (when combined with one of the supported instructions above)

.dockerignore

docker CLIλŠ” μ»¨ν…μŠ€νŠΈλ₯Ό docker 데λͺ¬μœΌλ‘œ 보내기 전에 μ»¨ν…μŠ€νŠΈμ˜ 루트 λ””λ ‰ν„°λ¦¬μ—μ„œ .dockerignoreλΌλŠ” νŒŒμΌμ„ μ°ΎμŠ΅λ‹ˆλ‹€.

FROM

FROM [--platform=<platform>] <image> [AS <name>]

Or

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]

Or

FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]

FROM λͺ…λ Ήμ–΄λŠ” μƒˆ λΉŒλ“œ 단계λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³  후속 λͺ…령어에 λŒ€ν•œ κΈ°λ³Έ 이미지λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

optional --platform ν”Œλž˜κ·ΈλŠ” FROM이 닀쀑 ν”Œλž«νΌ 이미지λ₯Ό μ°Έμ‘°ν•˜λŠ” 경우 μ΄λ―Έμ§€μ˜ ν”Œλž«νΌμ„ μ§€μ •ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예: linux/amd64, linux/arm64 λ˜λŠ” windows/amd64

RUN

RUN은 2κ°€μ§€ ν˜•νƒœ

  • RUN <command> (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)

RUN /bin/bash -c 'source $HOME/.bashrc && \
echo $HOME'
  • RUN ["executable", "param1", "param2"] (exec form)

RUN /bin/bash -c 'source $HOME/.bashrc && echo $HOME'

RUN --mount

RUN --mountλ₯Ό μ‚¬μš©ν•˜λ©΄ λΉŒλ“œκ°€ μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” 파일 μ‹œμŠ€ν…œ 마운트λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 호슀트 파일 μ‹œμŠ€ν…œ λ˜λŠ” 기타 λΉŒλ“œ 단계에 λ°”μΈλ“œ 마운트 생성

  • λΉŒλ“œ λΉ„λ°€ λ˜λŠ” ssh-agent μ†ŒμΌ“μ— μ•‘μ„ΈμŠ€

  • 영ꡬ νŒ¨ν‚€μ§€ 관리 μΊμ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬ λΉŒλ“œ 속도 ν–₯상

Mount types

Type
Description

bind (default)

λ°”μΈλ“œ 마운트 μ»¨ν…μŠ€νŠΈ 디렉토리(읽기 μ „μš©)

cache

컴파일러 및 νŒ¨ν‚€μ§€ κ΄€λ¦¬μžλ₯Ό μœ„ν•œ μΊμ‹œ 디렉터리에 μž„μ‹œ 디렉터리λ₯Ό λ§ˆμš΄νŠΈν•©λ‹ˆλ‹€.

secret

λΉŒλ“œ μ»¨ν…Œμ΄λ„ˆκ°€ 개인 킀와 같은 λ³΄μ•ˆ νŒŒμΌμ„ 이미지에 κ΅½μ§€ μ•Šκ³  μ•‘μ„ΈμŠ€ν•˜λ„λ‘ ν—ˆμš©

ssh

λΉŒλ“œ μ»¨ν…Œμ΄λ„ˆκ°€ μ•”ν˜Έλ₯Ό μ§€μ›ν•˜λŠ” SSH μ—μ΄μ „νŠΈλ₯Ό 톡해 SSH 킀에 μ•‘μ„ΈμŠ€ν•˜λ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€.

RUN --network

Network types

Type
Description

default (default)

κΈ°λ³Έ λ„€νŠΈμ›Œν¬μ—μ„œ μ‹€ν–‰

none

λ„€νŠΈμ›Œν¬ μ•‘μ„ΈμŠ€ 없이 μ‹€ν–‰

host

호슀트의 λ„€νŠΈμ›Œν¬ ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€

CMD

CMD λͺ…λ Ήμ—λŠ” μ„Έ κ°€μ§€ ν˜•μ‹μ΄ μžˆμŠ΅λ‹ˆλ‹€

  • CMD ["executable","param1","param2"] (exec form, this is the preferred form)

  • CMD ["param1","param2"] (as default parameters to ENTRYPOINT)

  • CMD command param1 param2 (shell form)

CMD의 μ£Όμš” λͺ©μ μ€ μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆμ— 기본값을 μ œκ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€

RUN은 이미지 λΉŒλ“œ λ‹¨κ³„μ—μ„œ μ‹€ν–‰λ˜λŠ” λͺ…령어이고, CMDλŠ” μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ λ‹¨κ³„μ—μ„œ μ‹€ν–‰λ˜λŠ” κΈ°λ³Έ λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

LABEL

LABEL <key>=<value> <key>=<value> <key>=<value> ...

LABEL λͺ…λ Ήμ–΄λŠ” 이미지에 메타데이터λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. LABEL은 ν‚€-κ°’ μŒμž…λ‹ˆλ‹€.

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

EXPOSE

EXPOSE <port> [<port>/<protocol>...]

EXPOSE λͺ…λ Ήμ–΄λŠ” μ»¨ν…Œμ΄λ„ˆκ°€ λŸ°νƒ€μž„ μ‹œ μ§€μ •λœ λ„€νŠΈμ›Œν¬ ν¬νŠΈμ—μ„œ μˆ˜μ‹  λŒ€κΈ°ν•¨μ„ Docker에 μ•Œλ¦½λ‹ˆλ‹€. ν¬νŠΈκ°€ TCP λ˜λŠ” UDPμ—μ„œ μˆ˜μ‹ ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό μ§€μ •ν•  수 있으며 ν”„λ‘œν† μ½œμ΄ μ§€μ •λ˜μ§€ μ•Šμ€ 경우 기본값은 TCPμž…λ‹ˆλ‹€.

ENV

ENV <key>=<value> ...

ENV λͺ…령은 ν™˜κ²½ λ³€μˆ˜λ₯Ό κ°’μœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€.

ADD

ADDμ—λŠ” 두 κ°€μ§€ ν˜•μ‹

ADD [--chown=<user>:<group>] [--chmod=<perms>] [--checksum=<checksum>] <src>... <dest>
ADD [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]

ADD λͺ…령은 <src>μ—μ„œ μƒˆ 파일, 디렉터리 λ˜λŠ” 원격 파일 URL을 λ³΅μ‚¬ν•˜μ—¬ <dest>κ²½λ‘œμ— μžˆλŠ” μ΄λ―Έμ§€μ˜ 파일 μ‹œμŠ€ν…œμ— μΆ”κ°€ν•©λ‹ˆλ‹€.

COPY

COPY [--chown=<user>:<group>] [--chmod=<perms>] <src>... <dest>
COPY [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]

COPY λ˜λŠ” ADD λͺ…λ Ήμ—μ„œ 이 ν”Œλž˜κ·Έλ₯Ό ν™œμ„±ν™”ν•˜λ©΄ 파일이 자체 λ ˆμ΄μ–΄μ—μ„œ λ…λ¦½μ μœΌλ‘œ μœ μ§€λ˜κ³  이전 λ ˆμ΄μ–΄μ˜ λͺ…령이 변경될 λ•Œ λ¬΄νš¨ν™”λ˜μ§€ μ•ŠλŠ” ν–₯μƒλœ 의미둜 νŒŒμΌμ„ 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€.

이전 λ ˆμ΄μ–΄κ°€ λ³€κ²½λœ κ²½μš°μ—λ„ --cache-from을 μ‚¬μš©ν•˜μ—¬ 후속 λΉŒλ“œμ—μ„œ 이미 λΉŒλ“œλœ λ ˆμ΄μ–΄λ₯Ό μž¬μ‚¬μš©ν•˜λ €λ©΄ --linkλ₯Ό μ‚¬μš©ν•œλ‹€

ENTRYPOINT

ENTRYPOINT 두 κ°€μ§€ ν˜•μ‹

The exec form, which is the preferred form:

ENTRYPOINT ["executable", "param1", "param2"]

The shell form:

ENTRYPOINT command param1 param2

ENTRYPOINTλ₯Ό μ‚¬μš©ν•˜λ©΄ μ‹€ν–‰ 파일둜 싀행될 μ»¨ν…Œμ΄λ„ˆλ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

CMD 및 ENTRYPOINT λͺ…령은 λͺ¨λ‘ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ μ‹€ν–‰λ˜λŠ” λͺ…령을 μ •μ˜ν•©λ‹ˆλ‹€. κ·Έλ“€μ˜ ν˜‘λ ₯을 μ„€λͺ…ν•˜λŠ” κ·œμΉ™.

  • Dockerfile은 CMD λ˜λŠ” ENTRYPOINT λͺ…λ Ή 쀑 ν•˜λ‚˜ 이상을 μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ 파일둜 μ‚¬μš©ν•  λ•Œ ENTRYPOINTλ₯Ό μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • CMDλŠ” ENTRYPOINT λͺ…령에 λŒ€ν•œ κΈ°λ³Έ 인수λ₯Ό μ •μ˜ν•˜κ±°λ‚˜ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μž„μ‹œ λͺ…령을 μ‹€ν–‰ν•˜κΈ° μœ„ν•œ λ°©λ²•μœΌλ‘œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • CMDλŠ” λŒ€μ²΄ 인수둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ μž¬μ •μ˜λ©λ‹ˆλ‹€.

VOLUME

VOLUME ["/data"]

VOLUME λͺ…령은 μ§€μ •λœ μ΄λ¦„μœΌλ‘œ 마운트 지점을 μƒμ„±ν•˜κ³  κΈ°λ³Έ 호슀트 λ˜λŠ” λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ™ΈλΆ€ 마운트된 λ³Όλ₯¨μ„ λ³΄μœ ν•˜λŠ” κ²ƒμœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

USER

USER <user>[:<group>]
USER <UID>[:<GID>]

USER λͺ…령은 μ‚¬μš©μž 이름(λ˜λŠ” UID) 및 μ„ νƒμ μœΌλ‘œ ν˜„μž¬ λ‹¨κ³„μ˜ λ‚˜λ¨Έμ§€ 뢀뢄에 λŒ€ν•΄ κΈ°λ³Έ μ‚¬μš©μž 및 그룹으둜 μ‚¬μš©ν•  μ‚¬μš©μž κ·Έλ£Ή(λ˜λŠ” GID)을 μ„€μ •ν•©λ‹ˆλ‹€.

WORKDIR

WORKDIR /path/to/workdir

WORKDIR λͺ…λ Ήμ–΄λŠ” Dockerfileμ—μ„œ 뒀에 μ˜€λŠ” RUN, CMD, ENTRYPOINT, COPY 및 ADD λͺ…령어에 λŒ€ν•œ μž‘μ—… 디렉터리λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

ARG

ARG <name>[=<default value>]

ARG λͺ…λ Ήμ–΄λŠ” μ‚¬μš©μžκ°€ --build-arg <varname>=<value> ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ docker build λͺ…λ ΉμœΌλ‘œ λΉŒλ“œ μ‹œ λΉŒλ”μ— 전달할 수 μžˆλŠ” λ³€μˆ˜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

ONBUILD

ONBUILD <INSTRUCTION>

ONBUILD λͺ…령은 이미지가 λ‹€λ₯Έ λΉŒλ“œμ˜ 기반으둜 μ‚¬μš©λ  λ•Œ λ‚˜μ€‘μ— μ‹€ν–‰ν•  트리거 λͺ…령을 이미지에 μΆ”κ°€ν•©λ‹ˆλ‹€.

μž‘λ™ 방식은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€

  1. ONBUILD λͺ…령을 λ§Œλ‚˜λ©΄ λΉŒλ”λŠ” λΉŒλ“œ 쀑인 μ΄λ―Έμ§€μ˜ 메타데이터에 트리거λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. λͺ…령은 ν˜„μž¬ λΉŒλ“œμ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  2. λΉŒλ“œκ°€ λλ‚˜λ©΄ λͺ¨λ“  트리거 λͺ©λ‘μ΄ 이미지 λ§€λ‹ˆνŽ˜μŠ€νŠΈμ˜ OnBuild ν‚€ μ•„λž˜μ— μ €μž₯λ©λ‹ˆλ‹€. docker inspect λͺ…λ ΉμœΌλ‘œ 검사할 수 μžˆμŠ΅λ‹ˆλ‹€.

  3. λ‚˜μ€‘μ— FROM λͺ…령을 μ‚¬μš©ν•˜μ—¬ 이미지λ₯Ό μƒˆ λΉŒλ“œμ˜ 기반으둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. FROM λͺ…λ Ή 처리의 μΌλΆ€λ‘œ λ‹€μš΄μŠ€νŠΈλ¦Ό λΉŒλ”λŠ” ONBUILD 트리거λ₯Ό μ°Ύκ³  λ“±λ‘λœ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€. 트리거 쀑 ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ FROM λͺ…령이 μ€‘λ‹¨λ˜μ–΄ λΉŒλ“œκ°€ μ‹€νŒ¨ν•©λ‹ˆλ‹€. λͺ¨λ“  νŠΈλ¦¬κ±°κ°€ μ„±κ³΅ν•˜λ©΄ FROM λͺ…령이 μ™„λ£Œλ˜κ³  ν‰μ†ŒλŒ€λ‘œ λΉŒλ“œκ°€ κ³„μ†λ©λ‹ˆλ‹€.

  4. νŠΈλ¦¬κ±°λŠ” μ‹€ν–‰ ν›„ μ΅œμ’… μ΄λ―Έμ§€μ—μ„œ μ§€μ›Œμ§‘λ‹ˆλ‹€. 즉, "μ†μž" λΉŒλ“œμ— μ˜ν•΄ μƒμ†λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

STOPSIGNAL

STOPSIGNAL λͺ…령은 μ’…λ£Œν•˜κΈ° μœ„ν•΄ μ»¨ν…Œμ΄λ„ˆλ‘œ 전솑될 μ‹œμŠ€ν…œ 호좜 μ‹ ν˜Έλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

HEALTHCHECK

HEALTHCHECK λͺ…λ Ήμ˜ 두 κ°€μ§€ ν˜•μ‹

  • HEALTHCHECK [OPTIONS] CMD λͺ…λ Ή(μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ λͺ…령을 μ‹€ν–‰ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆ μƒνƒœ 확인)

  • HEALTHCHECK NONE(κΈ°λ³Έ μ΄λ―Έμ§€μ—μ„œ μƒμ†λœ λͺ¨λ“  μƒνƒœ 확인 λΉ„ν™œμ„±ν™”)

SHELL

SHELL ["executable", "parameters"]

SHELL λͺ…령을 μ‚¬μš©ν•˜λ©΄ λͺ…λ Ήμ˜ μ…Έ ν˜•μ‹μ— μ‚¬μš©λ˜λŠ” κΈ°λ³Έ 셸을 μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Here-Documents

Here-documentsλŠ” 후속 Dockerfile 행을 RUN λ˜λŠ” COPY λͺ…λ Ήμ˜ μž…λ ₯으둜 λ¦¬λ””λ ‰μ…˜ν•˜λ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€.

Example

# syntax=docker/dockerfile:1
FROM debian
RUN <<EOT bash
  set -ex
  apt-get update
  apt-get install -y vim
EOT

Reference

Last updated

Was this helpful?