바인드 마운트 * 호스트 컴퓨터 파일 시스템의 디렉터리를 컨테이너 파일 시스템의 디렉터리로 사용 * 호스트 컴퓨터에서 접근 가능한 파일 시스템(SSD 디스크, 고사용성 디스크 어레이, 분산 스토리지)이라면 무엇이든 컨테이너에서도 사용할 수 있다.
바인드 마운트를 사용한 컨테이너 실행
001) ➜ source="$(pwd)/databases" && target='/data'
002) ➜ echo $source
003) /Users/woogie/databases
004) ➜
005) ➜ mkdir ./databases
006) ➜
007) ➜ docker container run --mount type=bind,source=$source,target=$target -dp 8012:80 diamol/ch06-todo-list
008) 10d660c33baceb59e325c167717ff82104843e6c9021ec3910e423c70560fb82
009) ➜
010) ➜ curl http://localhost:8012
011)
012) <!DOCTYPE html>
013) <html lang="en">
014) <-- 생략 -->
015) </html>
016) ➜
017) ➜ ls ./databases
018) todo-list.db
- 001: 변수선언
- 007: 바인드 마운트를 적용해 컨테이너 실행
- 010: 8012번 포트로 요청을 보내면 애플리케이션이 시작되면서 데이터베이스 파일이 생성된다.
-
017: 컨테이너에서 생성한 파일
-
바인드 마운트는 양방향으로 동작한다. (컨테이너 <-> 호스트 컴퓨터)
- 바인드 마운트를 사용하면 호스트 컴퓨터 파일에 접근하기 위해 권한 상승이 필요하다.
- 그래서 Dockerfile 스크립트에서 USER 인스트럭션을 사용해 컨테이너에 관리자 권한을 부여한다
- 리눅스는 root
- 윈도는 ContainerAdministrator
호스트 컴퓨터의 디렉터리를 읽기 전용으로 컨테이너 실행
001) ➜ source="$(pwd)/config" && target='/app/config'
002) ➜ echo $source
003) /Users/woogie/Desktop/real/080258/ch06/exercises/todo-list/config
004) ➜
005) ➜ docker container run --name todo-configured -dp 8013:80 --mount type=bind,source=$source,target=$target,readonly diamol/ch06-todo-list
006) ➜
007) ➜ curl http://localhost:8013
008)
009) <!DOCTYPE html>
010) <html lang="en">
011) <-- 생략 -->
012) </html>
013)
014) ➜ docker container logs todo-configured
015)
016) ...
017) dbug: Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets[6]
018) Connection id "0HMRLBRKNB2MK" received FIN.
019) dbug: Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets[7]
020) Connection id "0HMRLBRKNB2MK" sending FIN because: "The client closed the connection."
021) ...