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

Isaac Tony 2024년2월15일
  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 명령의 장점 중 하나는 여러 컨테이너와 공유되는 단일 디렉토리를 생성한다는 것입니다.

작가: 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