Dockerfile Instructions - Part 2 đ ī¸ â
Dockerfile-āĻāϰ āĻĒā§āϰāĻĨāĻŽ āĻĒāĻžāϰā§āĻā§ āĻāĻŽāϰāĻž āĻŦā§āϏāĻŋāĻ āĻāĻŋāĻā§ āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύ āĻļāĻŋāĻā§āĻāĻŋāĨ¤ āĻāĻ āĻĒāĻžāϰā§āĻā§ āĻāĻŽāϰāĻž āĻāϰāĻ āĻāĻŋāĻā§ āĻ ā§āϝāĻžāĻĄāĻāĻžāύā§āϏāĻĄ āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύ āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰāĻŦā§ āϝā§āĻā§āϞ⧠āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ, āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋ āĻāĻŦāĻ āĻĄā§āĻāĻž āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻā§āϰ āĻāύā§āϝ āĻ āϤā§āϝāύā§āϤ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤
ā§§. ENV vs ARG (āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ) â
āĻĄāĻāĻžāϰ⧠āĻĻā§āĻ āϧāϰāύā§āϰ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§:
ENV(Environment Variable): āĻāĻāĻŋ āĻāĻŽā§āĻ āĻŦāĻŋāϞā§āĻĄ āĻšāĻā§āĻžāϰ āϏāĻŽā§ āĻāĻŦāĻ āĻāύā§āĻā§āĻāύāĻžāϰ āϰāĻžāύ āĻāϰāĻžāϰ āϏāĻŽā§âāĻāĻā§ āĻā§āώā§āϤā§āϰā§āĻ āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤dockerfileENV APP_COLOR=blueARG(Build-time Variable): āĻāĻāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻŽā§āĻ āĻŦāĻŋāϞā§āĻĄ āĻšāĻā§āĻžāϰ āϏāĻŽā§ āĻāĻžāĻ āĻāϰā§āĨ¤ āĻāύā§āĻā§āĻāύāĻžāϰ āϰāĻžāύ āĻšā§ā§ āĻā§āϞ⧠āĻāĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻāϰ āĻĒāĻžāĻā§āĻž āϝāĻžā§ āύāĻžāĨ¤dockerfileARG VERSION=1.0
⧍. EXPOSE (āĻĒā§āϰā§āĻ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ) â
āĻāĻĒāύāĻžāϰ āĻāύā§āĻā§āĻāύāĻžāϰāĻāĻŋ āĻā§āύ āĻĒā§āϰā§āĻā§ āϞāĻŋāϏā§āύ (Listen) āĻāϰāĻŦā§ āϏā§āĻāĻŋ āĻāĻžāύāĻžāύā§āϰ āĻāύā§āϝ EXPOSE āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§āĨ¤
EXPOSE 8080NOTE
āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ, EXPOSE āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āύāĻŋāĻā§ āĻĨā§āĻā§ āĻĒā§āϰā§āĻ āĻāĻĒā§āύ āĻāϰ⧠āύāĻžāĨ¤ āĻāĻāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤ āĻĒā§āϰā§āĻ āĻāĻĒā§āύ āĻāϰāϤ⧠āĻšāϞ⧠āϰāĻžāύ āĻāϰāĻžāϰ āϏāĻŽā§ -p āĻĢā§āϞā§āϝāĻžāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšā§āĨ¤
ā§Š. VOLUME (āĻŽāĻžāĻāύā§āĻ āĻĒāϝāĻŧā§āύā§āĻ) â
āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻā§āϤāϰā§āϰ āĻā§āύ⧠āĻĢā§āϞā§āĻĄāĻžāϰāĻā§ āĻšā§āϏā§āĻ āĻŽā§āĻļāĻŋāύā§āϰ āϏāĻžāĻĨā§ āĻāĻžāύā§āĻā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻŦāĻž āĻĄā§āĻāĻž āϏā§āĻ āϰāĻžāĻāĻžāϰ āĻāύā§āϝ VOLUME āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤
VOLUME ["/data"]āĻāĻāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰ āĻĄāĻŋāϞāĻŋāĻ āĻšā§ā§ āĻā§āϞā§āĻ āĻāĻĒāύāĻžāϰ āĻŽā§āϞā§āϝāĻŦāĻžāύ āĻĄā§āĻāĻž (āϝā§āĻŽāύ: āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĢāĻžāĻāϞ) āĻšāĻžāϰāĻŋā§ā§ āϝāĻžāĻā§āĻž āĻĨā§āĻā§ āϰāĻā§āώāĻž āĻāϰā§āĨ¤
ā§Ē. USER (āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋ) â
āĻĄāĻŋāĻĢāϞā§āĻāĻāĻžāĻŦā§ āĻĄāĻāĻžāϰ āĻāύā§āĻā§āĻāύāĻžāϰ root āĻāĻāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻāϞā§, āϝāĻž āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋāϰ āĻāύā§āϝ āĻā§āĻāĻāĻŋāĻĒā§āϰā§āĻŖāĨ¤ āĻāύā§āĻā§āĻāύāĻžāϰ⧠āĻāĻŽ āĻĒāĻžāĻā§āĻžāϰāĻĢā§āϞ āĻā§āύ⧠āĻāĻāĻāĻžāϰ⧠āϏā§āĻāĻ āĻāϰāϤ⧠USER āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤
RUN useradd -m myuser
USER myuserā§Ģ. ENTRYPOINT vs CMD (āϏāĻŦāĻā§āϝāĻŧā§ āĻāύāĻĢāĻŋāĻāĻāĻŋāĻ āĻĒāĻžāϰā§āĻ) â
āĻāĻ āĻĻā§āĻāĻŋ āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύā§āϰ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻŦā§āĻāĻž āĻĄāĻāĻžāϰ āĻļā§āĻāĻžāϰ āĻāύā§āϝ āĻā§āĻŦāĻ āĻāϰā§āϰāĻŋ:
ENTRYPOINT: āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĢāĻŋāĻā§āϏāĻĄ āĻāĻŽāĻžāύā§āĻĄ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰ āϰāĻžāύ āĻāϰāĻžāϰ āϏāĻŽā§ āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ āĻāĻāĻŋ āϏāĻšāĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āύāĻžāĨ¤dockerfileENTRYPOINT ["python"]CMD: āĻāĻāĻŋ āĻŽā§āϞāϤENTRYPOINT-āĻāϰ āĻāύā§āϝ āĻĄāĻŋāĻĢāϞā§āĻ āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤ āϰāĻžāύ āĻāϰāĻžāϰ āϏāĻŽā§ āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ āĻāĻĒāύāĻŋ āĻāĻāĻŋ āϏāĻšāĻā§āĻ āĻā§āĻā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤dockerfileCMD ["app.py"]
āĻāĻāϏāĻžāĻĨā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞā§:
ENTRYPOINT ["python"]
CMD ["app.py"]āĻāĻāύ āϰāĻžāύ āĻāϰāĻžāϰ āϏāĻŽā§:
docker run my-imageāĻĻāĻŋāϞ⧠āĻāϞāĻŦā§:python app.pydocker run my-image script.pyāĻĻāĻŋāϞ⧠āĻāϞāĻŦā§:python script.py(āĻāĻāĻžāύā§CMD-āĻā§ āĻāĻāĻžāϰāϰāĻžāĻāĻĄ āĻāϰāĻž āĻšā§ā§āĻā§)āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ āĻĒā§āϰā§āĻā§āĻā§āĻ (Advanced Dockerfile) â
FROM python:3.9-slim
# ā§§. āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āϏā§āĻ āĻāĻĒ
ENV PYTHONUNBUFFERED=1
# ⧍. āĻā§āĻžāϰā§āĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ
WORKDIR /code
# ā§Š. āĻāĻāĻāĻžāϰ āϤā§āϰāĻŋ āĻāĻŦāĻ āϏā§āĻāĻ
RUN useradd -m myuser
USER myuser
# ā§Ē. āĻĢāĻžāĻāϞ āĻāĻĒāĻŋ
COPY . .
# ā§Ģ. āĻĒā§āϰā§āĻ
EXPOSE 5000
# ā§Ŧ. āĻāύā§āĻā§āϰāĻŋ āĻĒā§ā§āύā§āĻ āĻāĻŦāĻ āĻĄāĻŋāĻĢāϞā§āĻ āĻāĻŽāĻžāύā§āĻĄ
ENTRYPOINT ["python"]
CMD ["main.py"]CAUTION
āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋāϰ āĻāĻžāϤāĻŋāϰ⧠āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻāĻŽā§āĻā§ āϏāĻŦāϏāĻŽā§ USER āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϰā§āĻ āĻāĻā§āϏā§āϏ āĻŦāύā§āϧ āϰāĻžāĻāĻž āĻāĻāĻŋāϤāĨ¤