도커 레이어 아키텍처 아래와 같다.
컨테이너 상에서 볼륨을 영구적으로 사용할 수 있는 방법은 세 가지가 있다.
첫 번째는 호스트의 디렉토리를 컨테이너의 특정 경로에 마운트하는 방법이다.
https://github.com/tedilabs/fastcampus-devops.git
GitHub - tedilabs/fastcampus-devops: 🚀 패스트캠퍼스 데브옵스 초격차 코스 자료
🚀 패스트캠퍼스 데브옵스 초격차 코스 자료. Contribute to tedilabs/fastcampus-devops development by creating an account on GitHub.
github.com
먼저 스크립트를 보기 전에 컨테이너 볼륨을 이용하지 않는 예시를 보자
docker run -d -it ubuntu:focal 명령어로 컨테이너를 실행한다.
docker exec [컨테이너 이름] bash 명령어로 컨테이너의 bash쉘에 접속해서 hello라는 파일을 만들자
그리고 docker rm 명령어로 컨테이너를 삭제한 후 다시 컨테이너를 만들면 그 컨테이너에는 hello라는 파일이 존재하지 않는다.
이러한 상황을 피하기 위해 볼륨 기능을 사용할 수 있다.
host-volume.sh 를 보면 -v 옵션을 통해 호스트와 컨테이너의 볼륨 경로를 적는다. pwd는 현재 디렉토리 경로를 출력한다.
index.html은 "Hello fastcampus!!" 라는 문구를 출력시킨다.
host-volume.sh를 실행시키면 nginx 컨테이너가 실행된다.
docker exec 명령어로 nginx 컨테이너로 접속하면 index.html이 있는 걸 확인할 수 있다.
그리고 컨테이너에서 hello라는 파일을 만들면 호스트에도 hello라는 파일이 생성된 걸 볼 수 있다.
이는 호스트 볼륨 마운트를 할때 디렉토리로 마운트를 했기 때문이다.
두 번째는 볼륨 컨테이너를 이용하는 방법이다.
특정 컨테이너의 볼륨 마운트는 공유할 수 있다. 아래 그림에서 Data-only Container가 볼륨 컨테이너이다.
--volumes-from 옵션을 통해 공유할 컨테이너의 볼륨을 지정할 수 있다.
volum-container.sh 파일을 보면 세 가지 docker run 명령어가 있다.
이 스크립트를 실행해보면 세 가지 컨테이너가 실행된다.
docker inspect fastcampus-nginx 명령어로 볼륨 마운트 정보를 확인해보자
그리고 docker exec -it [컨테이너 ID] bash 명령어로 컨테이너에 들어가면 hello와 index.html 파일이 있는 걸 볼 수 있다.
마지막으로 도커 볼륨을 이용하는 방법이 있다.
도커가 제공하는 볼륨 관리 기능을 활용하여 데이터를 보존한다.
기본적으로 /var/lib/docker/volumes/${volume-name}/_data에 데이터가 저장된다.
docker-volume.sh를 보면 docker volume create라는 명령어를 통해서 db라는 이름의 볼륨을 생성하고
볼륨 목록을 확인한 후 docker run 명령어로 mysql 컨테이너를 실행한다.
스크립트를 생성하면 db 볼륨이 생성되고 리스트가 나온 후 컨테이너가 실행되는 걸 볼 수 있다.
docker volume inspect db 명령어로 mountpoint를 확인할 수 있다.
docker volume ls로 볼륨 목록을 보고
실행중인 컨테이너를 모두 삭제한 후 볼륨도 삭제했다.
추가적으로 읽기 전용 마운트에 대해 알아보자
도커의 읽기전용 볼륨 연결 방법은 볼륨 연결 설정에 :ro 옵션을 통해 읽기 전용 마운트 옵션을 설정할 수 있다.
읽기전용 마운트는 변경이 돼서는 안되는 디렉토리나 파일을 연결할 때 지정한다.
host-volume.sh를 수정하고
스크립트를 실행하면 read-only로 마운트돼서 해당 디렉토리 내에 새로운 파일을 쓰지 못한다.
'AWS > Part 5. Ch02 도커를 이용한 컨테이너 관리' 카테고리의 다른 글
CH02_09. 도커 이미지 다루기- 이미지 빌드 (0) | 2022.06.21 |
---|---|
CH02_08. 도커 컨테이너 다루기 로그 (0) | 2022.06.21 |
CH02_06. 도커 컨테이너 다루기 네트워크 (0) | 2022.06.20 |
CH02_05. 도커 컨테이너 다루기 명령어 실행 (0) | 2022.06.20 |
CH02_04. 도커 컨테이너 다루기 환경변수 (0) | 2022.06.20 |