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
로그에서 볼 수 있듯이 folder1 및 folder2 의 모든 하위 디렉터리가 실제로 workdir 에 복사되었습니다 .
참고로 병합 동작을 보여주기 위해 이 예제를 선택했습니다. 우리가 원하는 것이 folder1 과 folder2 의 내용을 이미지 의 workdir 디렉토리에 동시에 복사하는 것이라면 COPY 가 여러 소스를 허용할 수 있다는 사실을 이용할 것입니다 .
FROM ubuntu:latest
COPY folder1/ folder2/ /workdir/
RUN ls --recursive /workdir/
4. 결론
이 사용방법(예제)에서는 하위 디렉터리 구조를 유지하면서 로컬 디렉터리를 Docker 이미지에 복사하는 방법을 살펴보았습니다.
항상 그렇듯이 코드는 GitHub 에서 찾을 수 있습니다 .