본문 바로가기

가상화/Kubernetes

[Docker] 컨테이너와 로컬 파일 시스템간에 파일 / 폴더 복사

반응형

개요

로컬파일시스템과 컨테이너간에 파일 및 폴더를 복사하는 방법에 대해서 알아본다.

구성환경

docker 19.03.5

 

1. 단일 파일 복사

Usage : docker cp CONTAINER:<src_path> <dst_path>

          docker cp <src_path> container:<dst_path>

예시 1) busyboxtest 컨테이너의 /etc/hosts 파일을 로컬 /tmp/hosts로 복사

shell> docker run -it --name busyboxtest busybox:latest
shell> docker cp busyboxtest:/etc/hosts /tmp/hosts
shell> cat /tmp/hostname
shell> cat hosts 
127.0.0.1       localhost 
::1     localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.7      15ebe905fe3c 
shell> 

예시 2) 로컬 /tmp/issue 파일을 busyboxtest 컨테이너의 /etc/issue 파일로 복사

shell> cat /tmp/issue
Hello, This is copyed from local to container
shell> docker cp /tmp/issue busyboxtest:/etc/issue
shell> docker exec -it busybox sh
shell> docker exec -it busyboxtest sh
/ # cat /etc/issue
Hello, This is copyed from local to container
/ # exit
shell> 

 

2. 멀티 파일 복사

Usage : docker exec CONTAINER tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | tar Cxf DEST_PATH -

           tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | docker exec -i CONTAINER tar Cxf DEST_PATH -

예시 1) mysql 컨테이너의 /var/lib/mysql 폴더의 모든 파일을 로컬 /tmp/mysql 디렉토리로 복사

shell> mkdir /tmp/mysql          => 로컬 파일시스템 /tmp/mysql 폴더 생성 
shell> docker exec mysql tar Ccf /var/lib/mysql - . | tar Cxf /tmp/mysql -          => 컨테이너의 폴더를 로컬로 복사
shell> cd /tmp/mysql 
shell> ls -F          => 컨테이너에서 복사된 파일 확인
#innodb_temp/  binlog.000002  binlog.000005  binlog.index  client-cert.pem  ib_logfile0  ibtmp1     performance_schema/  server-cert.pem  undo_001 
auto.cnf       binlog.000003  binlog.000006  ca-key.pem    client-key.pem   ib_logfile1  mysql/     private_key.pem      server-key.pem   undo_002 
binlog.000001  binlog.000004  binlog.000007  ca.pem        ib_buffer_pool   ibdata1      mysql.ibd  public_key.pem       sys/ 
shell> 
 

예시 2) 로컬 /tmp/mysql 폴더 포함 모든파일을 mysql 컨테이너 /tmp 디렉토리로 복사

shell> ls          => 로컬 파일시스템 /tmp/mysql 폴더내 파일 리스트   
#innodb_temp   binlog.000007    ib_logfile1         server-cert.pem
auto.cnf       binlog.index     ibdata1             server-key.pem
binlog.000001  ca-key.pem       ibtmp1              sys
binlog.000002  ca.pem           mysql               undo_001
binlog.000003  client-cert.pem  mysql.ibd           undo_002
binlog.000004  client-key.pem   performance_schema
binlog.000005  ib_buffer_pool   private_key.pem
binlog.000006  ib_logfile0      public_key.pem
shell> tar Ccf /tmp - mysql | docker exec -i mysql tar Cxf /tmp -     =>파일 복사
shell> docker exec -it mysql sh          => 컨테이너 shell 접속     
# cd /tmp/mysql          => 복사된 폴더 이동
ls         => 컨테이너에 복사된 파일 확인
'#innodb_temp'/   binlog.000007     ib_logfile1          server-cert.pem
 auto.cnf        binlog.index      ibdata1              server-key.pem
 binlog.000001   ca-key.pem        ibtmp1               sys/ 
 binlog.000002   ca.pem            mysql/                undo_001
 binlog.000003   client-cert.pem   mysql.ibd            undo_002
 binlog.000004   client-key.pem    performance_schema
 binlog.000005   ib_buffer_pool    private_key.pem
 binlog.000006   ib_logfile0       public_key.pem
exit
shell>

 

3. kubectl 명령어로 pod에 파일 복사

Usage : kubectl cp <src_path> <NameSpace>/<POD>:<dst_path>

* namespace가 default 인경우 namespace를 생략할 수 있다.

단일 파일 복사

예시 1) 로컬 hello.html 파일을 POD의 /var/lib/nginx/ 폴더에 복사

shell> kubectl cp hello.html nginx-deployment-5d9b77cbff-dzxp5:/usr/share/nginx/html/
shell> kubectl exec -it nginx-deployment-5d9b77cbff-dzxp5 sh
cd /usr/share/nginx/html
ls
50x.html  hello.html  index.html
#

예시 2) 컨테이너의 /usr/share/nginx/html/index.html 파일을 로컬 /tmp/html/index.html로 복사

shell> kubectl cp nginx-deployment-5d9b77cbff-dzxp5:/usr/share/nginx/html/index.html /tmp/html/index.html
tar: Removing leading `/' from member names
shell> cd /tmp/html
shell> ls
index.html
shell>

멀티 파일 복사

예시 1) 컨테이너의 /usr/share/nginx/html 폴더의 모든 파일을 로컬 /tmp/html 폴더로 복사

shell> kubectl exec nginx-deployment-5d9b77cbff-dzxp5 tar Ccf /usr/share/nginx/html/ - . | tar Cxf /tmp/html -
shell> cd /tmp/html 
shell> ls
50x.html  hello.html  index.html

예시 2) 로컬 examples 폴더내의 모든 파일을 tomcat 컨테이너의 /usr/local/tomcat/webapps 폴더아래에 복사

shell> tar cf - examples | kubectl exec -i tomcat-deployment-777dbfff5f-p8n9n tar Cxf /usr/local/tomcat/webapps -
shell> kubectl exec -it tomcat-deployment-777dbfff5f-p8n9n sh
# cd /usr/local/tomcat/webapps/
# ls -F
examples/
#

 

반응형