Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
[Docker] Dockerfile(1) FROM LABEL ARG ENV
devops
docker

[Docker] Dockerfile(1) FROM LABEL ARG ENV

Jay Kim
Jay Kim 03 Feb 2024
[Docker] 도커 간단하게 시작해보기 [Docker] Dockerfile(2) RUN CMD ENTRYPOINT

Table of Contents

  • 도커 이미지 만들기
  • Dockerfile
  • FROM
  • LABEL
  • ARG
  • ENV

도커 이미지 만들기

  • 도커 이미지는 우리가 원하는 애플리케이션을 실행하는데 필요한 변수, 명령어, 파일 등이 정의되어 있는 프로그램과 같다
  • 도커 컨테이너는 도커 이미지가 실행된 프로세스와 같다

Dockerfile

  • 도커 이미지는 Dockerfile 이라는 파일로 만들 수 있다
  • Dockerfile에 도커 이미지를 만들기 위한 인스트럭션을 작성한 후, docker build 명령어를 이용하면 도커 이미지가 만들어진다
  • 도커 인스트럭션 목록은 아래와 같다
Instruction Description
ADD Add local or remote files and directories.
ARG Use build-time variables.
CMD Specify default commands.
COPY Copy files and directories.
ENTRYPOINT Specify default executable.
ENV Set environment variables.
EXPOSE Describe which ports your application is listening on.
FROM Create a new build stage from a base image.
HEALTHCHECK Check a container’s health on startup.
LABEL Add metadata to an image.
ONBUILD Specify instructions for when the image is used in a build.
RUN Execute build commands.
SHELL Set the default shell of an image.
STOPSIGNAL Specify the system call signal for exiting a container.
USER Set user and group ID.
VOLUME Create volume mounts.
WORKDIR Change working directory.

FROM

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
  • FROM은 빌드를 위한 stage를 초기화하고 이후의 인스트럭션을 위한 기본 이미지를 설정한다
  • 그렇기 때문에 유효한 Dockerfile은 반드시 FROM 명령어로부터 시작해야 한다
  • AS 뒤에 이름을 설정함으로써 이후 나오는 FROM 인스트럭션이 만드는 stage에 COPY --from=<name> 인스트럭션을 통해 데이터를 전달할 수 있다
  • 이 때 각각의 FROM은 이전 인스트럭션이 만든 상태를 없앤다
FROM <image> AS apple
...

FROM <image2>
...
# <image>의 빌드 결과로 생성된 파일 중 원하는 파일만 복사
COPY --from=apple /dir/you/want/from/apple /dir/of/image2
  • FROM 앞에 올 수 있는 유일한 인스트럭션은 ARG로, ARG는 이미지 빌드 시간동안 사용될 임시 변수를 저장할 수 있다
ARG  CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD  /code/run-app

LABEL

LABEL <key>=<value> <key>=<value> <key>=<value> ...
  • LABEL 인스트럭션은 이미지에 메타데이터를 추가하기 위해 사용된다
LABEL "com.example.vendor"="ACME Incorporated" ╲
com.example.label-with-value="foo" ╲
version="1.0" 

ARG

ARG <name>[=<default value>]
  • 이미지 빌드 단계에서 사용될 변수를 정의한다
ARG author=kim
  • docker build --build-arg author=lee 이런식으로 빌드 명령어에서 덮어쓸 수도 있다
  • ENV 인스트럭션에서 같은 이름의 변수를 정의하면, ENV가 덮어쓰게 된다

ENV

ENV <key>=<value> ...
  • 환경변수를 정의한다
  • 지정한 환경변수는 빌드 단계와 컨테이너 실행 단계에서 사용 가능한 변수다
ENV MY_NAME="John Doe"
ENV MY_CAT=fluffy
[Docker] 도커 간단하게 시작해보기 [Docker] Dockerfile(2) RUN CMD ENTRYPOINT

You may also like

See all docker
10 Feb 2024 [Docker]: 진화하는 컨테이너 표준
devops
docker

[Docker]: 진화하는 컨테이너 표준

09 Feb 2024 [Docker] 네트워크 이해하기
devops
docker

[Docker] 네트워크 이해하기

도커에서 외부와의 통신, 컨테이너 간 통신 방법에 대해 배운다

08 Feb 2024 [Docker] 퍼시스턴시한 어플리케이션 만들기
devops
docker

[Docker] 퍼시스턴시한 어플리케이션 만들기

도커에서 데이터를 영구적으로 저장하는 방법에 대해 배운다

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.