바인드 마운트는 양방향으로 동작한다. 컨테이너에서 만든 파일을 호스트 컴퓨터에서 수정할 수도 있고, 반대로 호스트에서 만든 파일도 컨테이너에서 수정할 수 있다. 호스트 컴퓨터에 대한 공격을 방지하기 위해 컨테이너는 대개 최소 권한을 가진 계정으로 실행되는데, 바인드 마운트를 사용하면 호스트 컴퓨터 파일에 접근하기 위해 권한 상승이 필요하다. 그래서 Dockerfile 스크립트에서 USER 인스트럭션을 사용해 컨테이너에 관리자 권한을 부여한다(리눅스는 root, 윈도는 ContainerAdministrator 계정으로 실행된다).
파일에 쓰기 작업을 할 필요가 없다면 호스트 컴퓨터의 디렉터리를 읽기 전용으로 컨테이너에 연결할 수도 있다. 이 방법은 호스트 컴퓨터에 작성한 설정을 컨테이너에 적용하기 위해 자주 쓰인다. to-do 애플리케이션은 이미지 내에 로그 출력을 최소한으로 줄이도록 설정된 설정 파일을 내장하고 있는데, 이 방법으로 이미지를 수정하지 않고도 애플리케이션의 설정을 변경할 수 있다.
실습 to-do 애플리케이션은 /app/config 경로가 존재할 경우 이 디렉터리에서 추가 설정 파일을 로드한다. 호스트 컴퓨터의 디렉터리를 이 경로에 연결하도록 바인드 마운트를 적용한 컨테이너를 실행해 애플리케이션이 호스트 컴퓨터에 있는 설정 파일을 사용하도록 하라. 이 책 소스 코드의 압축을 푼 디렉터리까지 이동한 다음, 아래 명령을 입력하면 된다.
cd ./ch06/exercises/todo-list # 경로 문자열을 환경 변수로 정의 $source="$(pwd)\config".ToLower(); $target="c:\app\config" # 윈도 source="$(pwd)/config" && target='/app/config' # 리눅스 # 윈도 환경에서 리눅스 컨테이너를 실행하는 경우 $source="$(pwd)\config".ToLower(); $target='/app/config' # 바인드 마운트를 적용해 컨테이너 실행 docker container run --name todo-configured -d -p 8013:80 --mount type=bind,source=$source,target=$target,readonly diamol/ch06-todo-list # 애플리케이션 작동 여부 확인 curl http://localhost:8013 # 컨테이너 로그 확인 docker container logs todo-configured