1. 개요

이 기사에서는 하위 디렉토리 구조를 유지하면서 디렉토리를 Docker 이미지에 복사하는 방법을 배웁니다.

2. 이미지에 로컬 디렉토리 복사

다음 파일 트리를 생성해 보겠습니다.

|   Dockerfile
|   
\---folder1
    +---subfolder1
    |       file1.txt
    |       
    \---subfolder2
            file2.txt

이는 다음 명령을 실행하여 수행할 수 있습니다.

$ mkdir folder1
$ cd folder1
$ mkdir subfolder1
$ cd subfolder1
$ touch file1.txt
$ cd ..
$ mkdir subfolder2
$ cd subfolder2
$ touch file2.txt
$ cd ../..

이제 다음을 사용하여 Dockerfile 을 엽니다.

$ touch Dockerfile

그런 다음 다음을 삽입해 보겠습니다.

FROM ubuntu:latest
COPY folder1/ /workdir/
RUN ls --recursive /workdir/

내용을 한 줄씩 이해해 봅시다.

  • 첫 번째 줄은 최신 우분투 이미지를 기본 이미지로 사용하고 있음을 나타냅니다.
  • 두 번째 행은 folder1 디렉토리의 내용을 이미지의 workdir 디렉토리로 복사합니다 . workdir 이 아직 존재하지 않으면 생성됩니다 .
  • 세 번째 줄은 이미지의 셸 내에서 ls 명령을 실행하여 workdir 폴더 의 모든 하위 디렉터리 콘텐츠를 재귀적으로 나열합니다.

이제 Docker 이미지를 빌드할 수 있습니다.

$ docker build .
#4 [1/3] FROM docker.io/library/ubuntu:latest
#6 [2/3] COPY folder1/ /workdir/
#7 [3/3] RUN ls --recursive /workdir/
#7 0.324 /workdir/:
#7 0.324 subfolder1
#7 0.324 subfolder2
#7 0.324
#7 0.324 /workdir/subfolder1:
#7 0.324 file1.txt
#7 0.324
#7 0.324 /workdir/subfolder2:
#7 0.324 file2.txt

예상대로 workdir 의 내용을 재귀적으로 인쇄하면 folder1 의 모든 하위 디렉터리와 파일이 포함되어 있음이 강조 표시 됩니다.

3. 로컬 디렉토리를 이미지에 병합

이제 다음과 일치하도록 파일 트리를 약간 업데이트하겠습니다.

|   Dockerfile
|   
+---folder1
|   +---subfolder1
|   |       file1.txt
|   |       
|   \---subfolder2
|           file2.txt
|           
\---folder2
        file3.txt

이 수정을 수행하기 위해 다음 명령을 실행합니다.

$ mkdir folder2
$ cd folder2
$ touch file3.txt
$ cd ..

이제 folder2 의 내용을 나중에 이미지 workdir 에 병합하려고 합니다. Dockerfile 을 완성해 봅시다 .

FROM ubuntu:latest
COPY folder1/ /workdir/
RUN ls --recursive /workdir/
COPY folder2/ /workdir/
RUN ls --recursive /workdir/

두 번째 COPY 명령은 이전에 추가된 파일을 제거하지 않습니다. 이 동작을 확인하기 위해 이미지를 빌드해 보겠습니다.

$ docker build .
#4 [1/5] FROM docker.io/library/ubuntu:latest
#6 [2/5] COPY folder1/ /workdir/
#7 [3/5] RUN ls --recursive /workdir/
#8 [4/5] COPY folder2/ /workdir/
#9 [5/5] RUN ls --recursive /workdir/
#9 0.398 /workdir/:
#9 0.398 file3.txt
#9 0.398 subfolder1
#9 0.398 subfolder2
#9 0.398
#9 0.398 /workdir/subfolder1:
#9 0.398 file1.txt
#9 0.398
#9 0.398 /workdir/subfolder2:
#9 0.398 file2.txt

로그에서 볼 수 있듯이 folder1folder2 의 모든 하위 디렉터리가 실제로 workdir 에 복사되었습니다 .

참고로 병합 동작을 보여주기 위해 이 예제를 선택했습니다. 우리가 원하는 것이 folder1folder2 의 내용을 이미지 의 workdir 디렉토리에 동시에 복사하는 것이라면 COPY 가 여러 소스를 허용할 수 있다는 사실을 이용할 것입니다 .

FROM ubuntu:latest
COPY folder1/ folder2/ /workdir/
RUN ls --recursive /workdir/

4. 결론

이 사용방법(예제)에서는 하위 디렉터리 구조를 유지하면서 로컬 디렉터리를 Docker 이미지에 복사하는 방법을 살펴보았습니다.

항상 그렇듯이 코드는 GitHub 에서 찾을 수 있습니다 .

Generic footer banner