6-1. 컨테이너 속 데이터가 사라지는 이유
# 로컬에서 컨테이너로 파일 복사 후 출력
docker container run --name f1 diamol/ch06-file-display
echo "http://eltonstoneman.com" > url.txt
docker container cp url.txt f1:/input.txt
docker container start --attach f1
#새 컨테이너를 실행해 확인해보면 내용이 그대로이며, 삭제후엔 수정 데이터가 사라진다.
docker container run -name f2 diamol/ch06-file-display
docker container rm -f f1
docker container cp f1:/input.txt
6-2. 도커 볼륨을 사용하는 컨테이너 실행하기
# 멀티 스테이지 빌드 Dockerfile 스크립트 일부
FROM diamol/dotnet-aspnet
WORKDIR /app
ENTRYPOINT ["dotnet", "ToDoList.dll"]
VOLUME /data # /data디렉터리는 볼륨에 영구 저장
COPY --from=builder /out/ .
docker container run --name todo1 -d -p 8010:80 diamol/ch06-todo-list
docker container inspect --format '{{.Mounts}}' todo1 # mounts항목에서 볼륨 정보를 볼 수 있다(연결이 정상적으로 되었다)
docker volume ls # 볼륨 목록 확인
docker container run --name todo2 -d diamol/ch06-todo-list # todo2 컨테이너 실행
docker container exec todo2 ls /data # (linux) todo2에서 /data(볼륨) 목록 출력
docker container run -d --name t3 --volumes-form todo1 diamol/ch06-todo-list # 새로운 t3 컨테이너 실행(with volums-form)
docker container exec t3 ls /data # (linux) todo3에서 /data(볼륨) 목록 출력. 같은 목록이 출력된다.
target='/data' # 복사 대상 경로
docker volume create todo-list # 데이터 저장할 볼륨을 명시적으로 생성
docker container run -d -p 8011:80 -v todo-list:$target --name todo-v1 diamol/ch06-todo-list # -v태그로 todo-list볼륨의 복사 대상 경로를 연결
# http://localhost:8011에서 몇개 데이터 추가
docker container rm -f todo-v1 # 컨테이너 삭제
docker container run -d -p 8011:80 -v todo-list:$target --name todo-v2 diamol/ch06-todo-list:v2 # 데이터 보존
6-3. 파일 시스템 마운트를 사용하는 컨테이너 실행하기
source="$(pwd)/databases" && target="/data" # (linux) source가 로컬 디렉터리, target이 컨테이너의 타켓 디렉터리
mkdir ./databases
docker container run --mount type=bind,source=$source,target=$target -d -p 8012:80 diamol/ch06-todo-list # 바인드 마운트
curl http://localhost:8012 # 8012포트에 run중인 컨테이너에 http요청을 보내 어플리케이션이 시작되며, DB파일이 생성된다.
ls ./databases # 컨테이너에 생성된 DB파일을 bind mount된 현재 dir에서 볼 수 있다.
6-4. 파일 시스템 마운트의 한계점
6-5. 컨테이너의 파일 시스템은 어떻게 만들어지는가?