호스트에서 Docker 컨테이너로 파일 복사

  1. docker cp를 사용하여 호스트에서 Docker 컨테이너로 파일 복사
  2. docker volume을 사용하여 호스트에서 Docker 컨테이너로 파일 복사
호스트에서 Docker 컨테이너로 파일 복사

이 기사에서는 호스트 시스템에서 Docker의 실행 중인 컨테이너로 파일을 전송하는 데 사용할 수 있는 방법을 논의하고 시연합니다.

docker cp를 사용하여 호스트에서 Docker 컨테이너로 파일 복사

docker cp 명령은 호스트 시스템에서 Docker 컨테이너로 파일과 디렉토리를 복사하는 데 사용할 수 있는 가장 쉬운 방법 중 하나입니다. 우리는 Ubuntu 20.4.5와 그 당시 최신 버전의 Docker(v 19.03)를 사용할 것입니다.

통사론:

docker cp {options} PATH_HOST CONTAINER:PATH_TO_CONTAINER 

어디에:

  • PATH_HOST는 복사하려는 파일이 호스트에서 있는 소스 경로를 지정합니다.
  • PATH_TO_CONTAINER는 컨테이너에 파일을 저장하려는 대상 경로입니다.

예시:

먼저 대상 컨테이너를 생성합니다. 이 기사에서는 공식 Nginx 이미지를 사용할 것입니다. 이 이미지는 아래 명령을 실행하여 Docker 데스크톱 또는 터미널을 통해 가져올 수 있습니다.

$ docker pull nginx

출력:

Using default tag: latest
latest: Pulling from library/nginx
5eb5b503b376: Pull complete
1ae07ab881bd: Pull complete
78091884b7be: Pull complete
091c283c6a66: Pull complete
55de5851019b: Pull complete
b559bad762be: Pull complete
Digest: sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

다음 명령을 사용하여 레지스트리에서 이미지를 성공적으로 가져왔는지 확인합니다.

$ docker images

출력:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    c316d5a335a5   2 weeks ago   142MB

이제 컨테이너를 만들 수 있습니다. run 명령을 사용하여 컨테이너를 만들고 외부 포트 8080 및 내부 포트 80에서 수신 대기하도록 분리 모드로 배포합니다.

아래 명령은 Nginx 기본 이미지를 사용하여 컨테이너를 생성합니다.

$ docker run -d -p 8080:80 nginx

docker ps -a 명령을 실행하여 새 컨테이너를 성공적으로 생성했는지 확인할 수 있습니다. 여기에는 최근 및 과거에 만든 모든 컨테이너가 컨테이너 ID 및 해당 이미지와 함께 나열됩니다.

여기에 표시된 대로 실행할 수 있습니다.

docker ps -a

출력:

CONTAINER ID   IMAGE   COMMAND                  CREATED              STATUS              PORTS                  NAMES
0c57de10362b   nginx   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   lucid_booth

docker cp 명령을 사용하기 전에 호스트에서 방금 만든 컨테이너로 복사할 파일을 만들어야 합니다.

new_file.txt라는 파일을 만들고 ’touch’ 명령을 사용하여 홈 디렉토리에 저장합니다.

다음은 이를 수행하는 명령입니다.

$ touch new_file.txt

여기에 표시된 대로 ls 명령을 사용하여 파일을 성공적으로 생성했는지 확인하기 위해 디렉터리를 볼 수 있습니다.

isaac@DESKTOP-HV44HT6:~$ ls
new_file.txt

물론 new_file.txt는 빈 파일입니다. 그러나 docker cp 명령을 사용하여 호스트에서 이전에 만든 컨테이너로 이동하는 데 집중하고 싶습니다.

그런 다음 이 파일을 생성한 컨테이너에 복사합니다.

$ docker cp new_file.txt 0c57de10362b:/usr/share

마찬가지로 new_file.txt/usr/share 폴더 아래 ID 0c57de10362b인 컨테이너에 복사했습니다.

docker exec 명령과 -it 플래그를 사용하여 대화식 SSH 세션을 통해 실행 중인 컨테이너에 들어가 대화식으로 명령을 실행함으로써 이를 확인할 수 있습니다.

$ docker exec -it 0c57de10362b /bin/bash

이제 컨테이너에 로그인했으므로 이 파일을 이 컨테이너에 복사했는지 확인하기 위해 파일을 나열하려고 합니다. ls 명령을 다시 사용할 수 있지만 액세스하려는 폴더를 지정합니다.

root@0c57de10362b:/# ls -lh /usr/share/

출력:

호스트에서 도커 컨테이너로 복사된 파일 보기

마찬가지로, 아래와 같이 디렉토리에서 읽을 파일의 위치를 ​​변경하기만 하면 많은 파일이 포함된 디렉토리를 복사할 수도 있습니다.

$ docker cp src/directory/. container-id:/target_location/directory

docker cp 명령은 사용하기 쉽지만 몇 가지 제한 사항이 있습니다. 그 구문은 Unix cp 명령과 다르며 제한된 수의 태그만 지원합니다.

또한 이것은 호스트에서 컨테이너로 파일을 복사하는 데만 사용할 수 있으며 컨테이너 간에는 복사할 수 없습니다.

docker volume을 사용하여 호스트에서 Docker 컨테이너로 파일 복사

컨테이너 간에 파일을 복사하는 더 나은 방법은 docker volume을 사용하는 것입니다.

-v 또는 -mount 플래그 중 하나를 사용하여 컨테이너 생성 프로세스 중에 컨테이너에 복사하려는 파일이 포함된 볼륨을 연결할 수 있습니다.

Docker에서 볼륨을 사용하려면 먼저 아래와 같이 docker volume 명령을 사용하여 볼륨을 만듭니다.

$ docker volume create volume_one

docker volume ls를 사용하여 볼륨이 성공적으로 생성되었는지 확인할 수 있습니다. 이것은 현재 및 과거에 생성된 볼륨의 이름과 드라이버의 이름을 나열합니다.

isaac@DESKTOP-HV44HT6:~$ docker volume ls
DRIVER    VOLUME NAME
local     volume_one

볼륨을 생성했으므로 다음 단계는 run 명령을 사용하여 새 컨테이너를 만들고 -v 플래그를 사용하여 생성한 볼륨을 연결하는 것입니다.

-v 플래그를 사용하면 생성한 컨테이너에 새 볼륨을 연결할 수 있습니다. Nginx 기본 이미지의 최신 버전을 사용하여 이 컨테이너를 만들 것입니다.

$ docker run -d -v volume_one:/app nginx:latest
f2457d3eb8fe14645b9e3938017c02c46a657c9ad3323ff4c03924d2fddd7046

Docker inspect 명령을 사용하여 Docker 객체에 대한 하위 수준 정보를 반환할 수 있습니다. 볼륨이 생성한 컨테이너에 성공적으로 연결되었는지 조사할 것입니다.

이 컨테이너에 이름을 할당하지 않았으므로 컨테이너 ID를 사용하여 검사합니다. 이전 컨테이너 ID가 아닌 가장 최근의 컨테이너 ID를 사용합니다.

$ docker ps -a

출력:

CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                  NAMES
f2457d3eb8fe   nginx:latest   "/docker-entrypoint.…"   4 minutes ago       Up 4 minutes       80/tcp                 brave_kirch
0c57de10362b   nginx          "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8080->80/tcp   lucid_booth

이제 이 컨테이너 ID를 사용하여 컨테이너를 검사할 수 있습니다.

$ docker inspect f2457d3eb8fe

출력:

도커 컨테이너에서 마운트된 볼륨 검사

docker volume 명령의 장점 중 하나는 여러 컨테이너와 공유되는 단일 디렉토리를 생성한다는 것입니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
작가: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

관련 문장 - Docker Container