[Infra] 도커(docker)(4) 컨테이너 <-> 호스트 파일 전송

업데이트:

도커(docker)(4) 컨테이너 <-> 호스트 파일 전송

참고링크

운영체제 프론트엔드 백엔드 데이터베이스 인프라
리눅스구조 js필터 아파치에러로그 행삭제 아파치스쿱
프로세스 헬로월드 웹서버개념 ES기초 로그분석
네임스페이스 프로젝트생성 아파치설치 MySQL기초 beeline
디렉토리 헤더생성 flask연동 큐브리드 하둡기초
리다이렉션 async-get 장고MsSQL연결 null공백 나이파이
쓰레드 async-post 장고MySQL연결 MySQL설치(win) 백본
라즈베리파이설치 로그인페이지 장고inpectdb MySQL테이블생성 제플린
OSI7계층소개   장고read   SSL인증
OSI1계층   장고insert   커버로스
OSI2계층   장고put   도커개념
OSI3계층   장고del   도커설치
OSI4계층   flask한글요청   도커기초
OSI5,6,7계층       도커이미지
DNS서버       컨테이너네트워크
DHCP       도커API
bashrc       도커컴포즈
bash       도커볼륨
ifconfig       장고이미지
소켓프로그래밍       도커postgre
리눅스유저생성       도커이미지삭제
netstat포트열기       도커Redis
컴파일러       k8s구조
운영체제vs커널       k8s설치
작업스케쥴링       k8s서비스배포
디스크추가       POD네트워크
aws유저추가       퍼시스턴트볼륨
기초명령어       k8s에러
포트번호        

참고 링크

1. 호스트 -> 컨테이너로 파일 옮기기

1.1. 호스트에 파일 생성

먼저 도커 호스트에서 컨테이너로 파일을 옮겨보겠습니다. 그러기 위해 먼저 호스트에서 파일을 하나 만들어 줍니다. 저는 work 디렉토리에 text123.txt라는 파일을 만들어보겠습니다.

(터미널1)$ mkdir work
(터미널1)$ cd work
(터미널1)$ vim text123.txt
Hello, nice to meet you
(터미널1)$ pwd
/home/dlinfo/work

1.2. 컨테이너 실행

이번에는 터미널2에서 우분투 컨테이너를 실행해봅니다.

(터미널2)$ sudo -i
(터미널2)# docker run -it ubuntu bash
(터미널2)root@225051b687b3:/#

그리고 터미널1에서 컨테이너 ID를 확인합니다.

(터미널1)$ sudo -i
(터미널1)# # docker container ps -a
CONTAINER ID   IMAGE           COMMAND    CREATED             STATUS                      PORTS     NAMES
225051b687b3   ubuntu          "bash"     5 minutes ago       Up 5 minutes                          loving_grothendieck

1.3. 호스트 -> 컨테이너 파일 전송

그리고 다음 명령어로 해당 컨테이너의 /home 경로로 파일을 전송해 봅니다.

(터미널1)# docker cp /home/dlinfo/work/text123.txt 225051b687b3:/home

도커를 이용해 파일을 전송하는 방법은 ‘docker cp ' 입니다. 잘 보면 호스트 주소는 '/'로 시작하고 컨테이너 주소는 컨테이너ID로 되어 있는것을 알 수 있습니다. 위와 같이 입력했다면 터미널2로 이동해 파일이 복사되었는지 확인합니다.

(터미널2)root@225051b687b3:# cd /home
(터미널2)root@225051b687b3:/home# ls
text123.txt
(터미널2)root@225051b687b3:/home# cat text123.txt
Hello, nice to meet you  

2. 컨테이너 -> 호스트 파일 전송

이번에는 반대로 컨테이너에서 호스트로 파일을 전송해봅니다.

(터미널1)# docker cp 225051b687b3:/home/text123.txt /home/dlinfo/work/test

중요한건 컨테이너에서 호스트로 파일 전송한다고 해서 컨테이너가 실행중이 터미널2에서 커맨드를 입력하는 것이 아닌 터미널1에서 커맨드를 입력하는 것입니다. 생각해보면 실행중인 우분투 컨테이너에서는 docker 명령어를 쓸수가 없습니다. 왜냐면 이곳에는 도커가 설치되어 있지 않기 때문입니다.

위와 같은 코드를 입력하면 컨테이너의 /home 경로에 있던 text123.txt 파일이 호스트의 /home/dlinfo/work/test 경로로 이동한 것을 볼 수 있습니다.