개요
로컬파일시스템과 컨테이너간에 파일 및 폴더를 복사하는 방법에 대해서 알아본다.
구성환경
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/ # |
'가상화 > Kubernetes' 카테고리의 다른 글
[kubernetes] Pod 재시작 (1) | 2020.04.08 |
---|---|
[kubernetes] 인그레스(Ingress)를 사용하여 HTTP(S) 부하 분산기 구성 #2 - HTTPS 부하 분산 (0) | 2020.04.07 |
[kubernetes] 인그레스(Ingress)를 사용하여 HTTP(S) 부하 분산기 구성 #1 - HTTP 부하 분산 (0) | 2020.04.05 |
[Docker] docker-compose 활용 (0) | 2020.04.04 |
[Docker] Priviate registry 구성 #3 - 인증 구성 (0) | 2020.04.03 |