본문 바로가기

Back-End/Docker

Docker 파일(폴더) 복사/이동

[COPY : 파일 복사(이동)]

COPY는 호스트 컴퓨터에 있는 파일을 복사해서 컨테이너로 전달한다.

# 문법
COPY [호스트 컴퓨터에 있는 복사할 파일의 경로] [컨테이너에서 파일이 위치할 경로

# 예시
COPY app.txt /app.txt

[파일 복사해보기]

1. host.txt 만들기 (host.txt 파일 안에는 "host 입니다" 라는 메시지가 담겨짐)

2. Dockerfile 만들어서 이미지 생성 및 컨테이너 실행

FROM ubuntu

COPY host.txt /container.txt

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash

$ ls

container.txt 안에 Host 컴퓨터의 host.txt 파일이 복사된 것을 알 수 있다.


[폴더 안에 있는 모든 파일들 복사]

1. my-app 디렉토리 만들기, my-app 디렉토리 안에 파일 만들기

2. Dockerfile 만들어서 이미지 생성 및 컨테이너 실행

호스트에서 폴더 만들고 그 안에 파일까지 만들어주기

FROM ubuntu

COPY hostDir /containerDir/

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용 코드
$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash

$ ls

음.. 아주 잘 복사되었다.


[와일드 카드 사용해보기]

만약 내가 호스트 컴퓨터에 있는 .txt 파일들을 전부 복사해오고 싶어..! 이럴 땐 어떻게 해야해?

1. 일단 호스트 컴퓨터에 있는 .txt 파일들을 임의로 만들어준다.(Ex. app.txt, readme.txt ...)

2. Dockerfile 만들어서 이미지 생성 및 컨테이너 실행

FROM ubuntu

COPY *.txt /text-files/

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용 코드
  • 주의) /text-files 라고 적으면 안되고 /text-files/ 라고 적어야 text-files 라는 디렉토리 안에 파일들이 정상적으로 복사된다.
$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash

$ ls

[.dockerignore 사용해보기]

특정 파일 또는 폴더만 copy를 하고싶지 않아 이럴 때는 어떻게 해야할까?

1. .dockerignore 파일 만들기

# .dockerignore
readme.txt

2. Dockerfile 만들어서 이미지 생성 및 컨테이너 실행

# Dockerfile
FROM ubuntu

COPY ./ /

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"] # 디버깅용 코드
$ docker build -t my-server .
$ docker run -d my-server
$ docker exec -it [Container ID] bash

$ ls

실행해 보면 readme.txt 만 제외하고 잘 복사가 되었을 것이다!