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(3) COPY ADD VOLUME WORKDIR
devops
docker

[Docker] Dockerfile(3) COPY ADD VOLUME WORKDIR

Jay Kim
Jay Kim 04 Feb 2024
[Docker] Dockerfile(2) RUN CMD ENTRYPOINT [Docker] Docker Compose

Table of Contents

  • WORKDIR
  • VOLUME
  • COPY
  • ADD
  • 참고

WORKDIR

  • WORKDIR 인스트럭션은 Docker 파일에서 이어지는 모든 RUN, CMD, ENTRIPOINT, COPY 및 ADD 인스트럭션에 대한 작업 디렉토리를 설정한다
  • WORKDIR을 명시하지 않은 경우, 베이스 이미지의 WORKDIR을 이어받는다. 베이스 이미지에도 없으면 디폴트로 루트 경로(/)가 된다
  • 명시한 경로가 없으면 경로에 필요한 디렉터리를 만든다

  • WORKDIR 명령은 Docker 파일에서 여러 번 사용할 수 있다
  • 상대 경로가 제공되는 경우 이전 WORKDIR 명령의 경로에 상대적이다. 예를 들어 다음 RUN 인스트럭션의 작업 디렉토리는 /a/b/c이다
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
  • 또한 ENV를 이용해 Dockerfile에서 명시한 환경 변수의 경우 WORKDIR 명령어에서 해석할 수 있다
  • 아래의 $DIRPATH/$DIRNAME은 /path/$DIRNAME으로 해석된다
ENV DIRPATH=/path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd

VOLUME

  • 컨테이너의 마운트 지점을 생성한다
  • 데이터베이스 같은 유상태 애플리케이션의 경우 사용자가 볼륨을 지정하지 않더라도 데이터를 유실하지 않기 위한 안전장치 용도이다
VOLUME /data

COPY

  • COPY 인스트럭션은 호스트 파일 시스템의 파일을 컨테이너에 복사한다
  • COPY <source> <target>
    • source에는 파일 하나가 올 수도 있고, 와일드카드로 여러 파일을 매치할 수도 있다
    • target에는 절대경로가 올 수도 있고, 상대경로가 올 수도 있다. 상대경로가 올 경우 WORKDIR에 대한 상대경로가 된다
# t로 시작하는 모든 txt파일을 <WORKDIR>/relativeDir/ 로 복사한다
COPY t*.txt relativeDir/
# test.txt, teso.txt, tesi.txt과 같은 파일을 /absoluteDir/ 로 복사한다
COPY tes?.txt /absoluteDir/

ADD

  • COPY 인스트럭션과 비슷하다
  • ADD는 추가로 URL을 통해 파일을 다운로드할 수 있고, 압축된 파일을 자동으로 추출할 수 있는 기능도 가지고 있다
  • COPY가 더욱 명료하고 예측 가능하다는 점 때문에 도커에서 권장한다. 특별한 경우에만 ADD를 사용하는 것이 좋다

  • 아래 예시는 big.tar.xz 파일을 http://example.com에서 다운로드하고, /container_directory에 압축 해제하여 추가한다
ADD http://example.com/big.tar.xz /container_directory

참고

  • Docker 공식문서
  • [Docker] Dockerfile의 COPY와 ADD 명령어 비교, 김징어의 Devlog
[Docker] Dockerfile(2) RUN CMD ENTRYPOINT [Docker] Docker Compose

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.