공부합시다!/Container

Docker: cp & tar 다중 파일 복사

간서치 2023. 1. 5. 00:14
728x90

디렉토리내에 많은 파일이 존재한다거나 /proc, /sys, /dev/, tmpfs와 컨테이너내에 사용자가 생성한 디렉토리를 local 시스템으로 가져온다거나 local system의 디렉토리를 container로 복사하기 위해서는 tar를 사용하셔야 합니다.

 

1.  container -> local system

2. local system -> container

순서로 진행 합니다.

 

1. mysql container 생성 후 /var/lib/mysql 디렉토리내의 모든 파일을 local system의 /root/mysql 로 이동

 1.1. /root/mysql 디렉토리 생성

 1.2. mysql:5.7 image를 이용하여 m1 container 생성

 1.3. m1 container의 /var/lib/mysql 내의 모든 파일을 /root/mysql 디렉토리 이동 후 파일 확인

 1.4. m1 container의 /var/lib/mysql 내의 mysql 파일 확인

# mkdir ./mysql
# ls ./mysql/
# docker run -itd -p 63306:3306 -e MYSQL_ROOT_PASSWORD=It1 --name m1 mysql:5.7

사용 예시
#docker exec CONTAINER tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | tar Cxf DEST_PATH -

# docker exec m1 tar Ccf /var/lib/mysql - . | tar Cxf ./mysql -
# ls ./mysql/
auto.cnf    client-cert.pem  ib_logfile0  ibtmp1      performance_schema  server-cert.pem
ca-key.pem  client-key.pem   ib_logfile1  mysql       private_key.pem     server-key.pem
ca.pem      ib_buffer_pool   ibdata1      mysql.sock  public_key.pem      sys
# docker exec m1 ls /var/lib/mysql

 

 

2. local system의 /root/mysql 디렉토리내의 모든 파일을 container의 /var/mysql 디렉토리로 이동

 2.1. /root/mysql 디렉토리의 파일을 tar 후 m1 container의 /tmp 디렉토리로 복사

 2.2. m1 container의 /var/mysql/디렉토리 확인

사용 예시
# tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | docker exec -i CONTAINER tar Cxf DEST_PATH -

# tar Ccf ./mysql - mysql | docker exec -i m1 tar Cxf /tmp -
# docker exec m1 ls /tmp
mysql
# docker exec m1 ls /tmp/mysql
columns_priv.MYD
columns_priv.MYI
columns_priv.frm
db.MYD
db.MYI
db.frm
db.opt
engine_cost.frm
engine_cost.ibd
event.MYD

-------중략-------

 

굳이 이 작업한 이유는 Kubernet에서의 복사 작업이 이런 형태로 이루어지기 때문입니다.

728x90