파일 복사
HTML 파일, CSS 파일, 각 아티클에포함된 텍스트나 이미지 등의 파일들은 워드프레스 상의 조작을 통해 서버에 저장되지만 때로는 소프트웨어의 개입 없이 서버와 로컬 컴퓨터 간에 파일을 주고 받아야 할 떄가 있다.
- 파일 복사는 컨테이너 -> 호스트, 호스트 -> 컨테이너로 양방향 모두 가능하다. 호스트 쪽 파일은 어디에 위치한 파일이라도 복사가 간으하고 ,컨테이너 쪽에서도 파일을 복사할 경로를 지정할 수 있다.
파일 복사 커맨드 docer cp(docker container cp)
윈도우나 macOS에서는 드래그 앤드 드롭으로 파일을 복사할 수 있지만 도커에서는 파일 복사 커맨드를 사용한다.
컨테이너로 파일을 복사하는 커맨드 사용(호스트 -> 컨테이너)
docekr cp 호스트_경로 컨테이너_이름:컨테이너_경로
호스트로 파일을 복사하는 커맨드 사용(컨테이너 -> 호스트)
docekr cp 컨테이너_이름:컨테이너_경로 호스트_경로
파일 복사 명령어
docker cp 원본_경로 복사할_경로
호스트 경로의 예
호스트(도커 엔진을 실행하는 컴퓨터) 내 파일 위치는 어디라도 괜찮다.
파일의 위치는 '경로' 형태로 작성한다. 경로는 컴퓨터 속 파일이나 폴더(디렉터리)의 주소를 나타낸 것이다.
경로의 예
| 항목 | 값 |
|---|---|
| 문서 폴더(윈도우) | C:\Users\사용자명\Documents\파일명 |
| 문서 폴더(macOS) | /Users/사용자명/Documents/파일명 |
| 리눅스의 홈 디렉터리 | /home/사용자명/파일명 |
실습 때 필요한 index.html 생성
<html>
<meta charset="utf-8">
<body>
<div> 안녕하세요~!</div>
</body>
</html>
[실습] 호스트의 파일을 컨테이너 속으로 복사
아파치 컨테이너 생성 및 실행 -> 파일 복사 ==> 확인
| 항목 | 값 |
|---|---|
| 컨테이너 이름 | apa000ex19 |
| 이미지 이름 | httpd |
| 포트 설정 | 8089:80 |
커맨드에서 사용할 옵션, 대상, 인자
파일 복사 명령어
docker cp 원본_경로 복사대상_컨테이너_이름:컨테이너_경로
| 항목 | 값 |
|---|---|
| 윈도우 원본 경로 | C:\Users\사용자명\Documents\index.html |
| macOS 원본 경로 | /Users/사용자명/Documents/index.html |
| 리눅스 원본 경로 | /home/사용자명/index.html |
| 컨테이너 경로 | /usr/local/apache2/htdocs |
아파치 컨테이너 생성
docker run --name apa000ex19 -d -p 8089:80 httpd
파일 복사 명령어(윈도우)
docker cp C:\Users\사용자명\Documents\index.html apa000ex19:/usr/local/apache2/htdocs/

컨테이너의 파일을 호스트로 복사
이번에는 반대 방향으로 복사를 해보겠다.
- 앞서 복사한 아파치 컨테이너의 index.html 파일을 호스트쪽으로 다시 복사한다.
새로 복사한 파일을 구별할 수 있도록 먼저 호스트에 있는 파일의 이름을 index2.html로 변경하거나 삭제한다.
리눅스에서 파일명 변경하기(index.html -> index2.html)
mv /home/사용자명/index.html /home/사용자명/index2.html
리눅스에서 파일 삭제하기
rm /home/사용자명/index.html
파일 복사 명령어(윈도우)
docker cp apa000ex19:/usr/local/apache2/htdocs/index.html C:\Users\사용자명\Documents\
파일 복사 명령어(macOS)
docker cp apa000ex19:/usr/local/apache2/htdocs/index.html /Users/사용자명/Documents/
파일 복사 명령어(리눅스)
docker cp apa000ex19:/usr/local/apache2/htdocs/index.html /home/사용자명/
| 항목 | 값 |
| 윈도우 대상 경로 | C:Users\사용자명\Documents\ |
| macOS 대상 경로 | /Users/사용자명/DOcuments/ |
| 리눅스 대상 경로 | /home/사용자명/ |
| 컨테이너 경로 | /usr/local/apache2/htdocs/index.html |

볼륨 마운트
- 볼륨 : 스토리지의 한 영역을 분할한 것
- 마운트 : '연결하다'라는 의미 그대로 대상을 연결해 운영체제 또는 소프트웨어의 관리하에 두는 일
지금까지 여러 번 컨테이너를 생성하고 삭제해왔는데, 실제로 컨테이너를 사용하려면 스토리지 영역을 마운트해야 한다.
왜냐하면 데이터가 이 스토리지에 있기 때문이다.
컨테이너를 종료해도 바로 삭제되지는 않지만 성격상 '쓰고 버려야'하기 때문에 소프트웨어 업그레이드 등의 이유로 언젠가는 삭제된다.
- 이런 상황에서 컨테이너 속에 데이터가 있다면 컨테이너와 함께 데이터도 소멸된다.
컨테이너 역시 외부로 데이터를 대피시킨다. 다만 컨테이너는 생성 및 폐기가 매우 빈번하기 때문에 매번 데이터를 옮기는 대신 처음부터 컨테이너 외부에 둔 데이터에 접근해 사용하는 것이 일반적이다.
이를 데이터 퍼시스턴시라고 한다. 데이터를 두는 장소가 마운트된 스토리지 영역이다.
스토리지 마운트 종류
- 도커에서 스토리지의 마운트는 두 가지 종류가 있다. 하나는 볼륨 마운트이고, 다른 하나는 바인드 마운트다.
볼륨 마운트
도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 컨테이너에 디스크 형태로 마운트한다.
이름만으로 관리가 가능하므로 다루기 쉽지만 볼륨에 비해 직접 조작하기 어려우므로 '임시 목저의 사용''이나 '자주 쓰지는 않지만 지우면 안 되는 파일'을 두는 목적으로 많이 사용한다.
바인드 마운트
도커가 설치된 컴퓨터의 문서 폴더 또는 바탕화면 폴더 등 도커 엔진에서 관리하지 않는 영역의 기존 디렉터리를 컨테이너에 마운트하는 방식이다. 디렉터리가 아닌 파일 단위로도 마운트가 가능하다.
폴더(디렉터리) 속에 파일을 직접 두거나 열어볼 수 있기 때문에 자주 사용하는 파일을 두는 데 사용한다.
두 가지 마운트 방식의 차이점
- 갇단한지 복잡한지, 호스트 컴퓨터에서 파일을 다룰 필요가 있는지, 환경의 의존성을 배제해야 하는지 세 가지가 포인트다.
볼륨 마운트는 도커 엔진의 관리하에 있으므로 사용자가 파일 위치를 신경 쓸 필요가 없다.
볼륨 마운트는 익숙해지면 손쉽게 사용할 수 있다. 그런만큼 도커 제작사에서도 볼륨 마운트 사용을 권장한다.
- 볼륨 마운트는 도커 컨테이너를 경유하지 않고 직접 볼륨에 접근할 방법이 없다.
- 억지로 볼륨을 수정하려고 하면 볼륨 자체가 깨질 우려도 있다. 백업을 하려고 해도 복잡한 절차가 필요하다.
바인드 마운트는 도커가 관리하지 않는 영역 어디라도 파일을 둘 수 있으며, 기존과 동일한 방식으로 파일을 사용할 수 있으므로 다른 소프트웨어를 사용해 쉽게 편집할 수 있다.
- 도커 엔전과 무관하게 파일을 다룰 수 있다.
※ 파일을 직접 편집해야 할 일이 많다면 바인드 마운트를 사용하고, 그렇지 않다면 볼륨 마운트를 사용하면 된다.
| 항목 | 볼륨 마운트 | 바인드 마운트 |
| 스토리지 영역 | 볼륨 | 디렉터리 또는 파일 |
| 물리적 위치 | 도커 엔진의 관리 영역 | 어디든지 가능 |
| 마운트 절차 | 볼륨을 생성한 후 마운트 | 기존 파일 또는 폴더를 마운트 |
| 내용 편집 | 도커 컨테이너를 통해서 | 일반적인 파일과 같이 |
| 백업 | 절차가 복잡합 | 일반적인 파일과 같이 |
임시 메모리(tmpfs)마운트
마운트 방식이 하나 더 있는데 이 마운트는 디스크가 아닌 주 메모리 영역을 마운트한다. 디스크보다 훨씬 빠른 속도로 읽고 쓰기가 가능하기 때문에 접근 속도를 높일 목적으로 사용하지만 도커 엔진이 정지되거나 호스트가 재부팅하면 소멸한다.
'도커' 카테고리의 다른 글
| 4. 도커 - 여러 개의 컨테이너 연동해 보기 (3) | 2025.07.31 |
|---|---|
| 3. 도커 커맨드 실습하기 (4) | 2025.07.29 |
| 2. 도커 엔진 (3) | 2025.07.28 |
| 1. 도커 개념 정리 (0) | 2025.07.26 |