Docker - 볼륨(volume)

2022. 11. 7. 09:12쿠버네티스

1. 웹서버(nginx) 이미지 설치

 

 

지금까지 컨테이너를 생성하기 전에 필요한 이미지를 사전에 설치 했었습니다. 하지만 run 명령어가 컨테이너를 생성할 때 필요한 이미지가 없으면 자동으로 설치 해 주기 때문에 사전에 미리 설치 해줄 필요가 없습니다.

 

 

2. 생성된 이미지 확인

 

 

3. 볼륨(volume)

 

전 게시물에서는 생성된 컨테이너에 index.html 파일을 추가할때 index.html 파일을 별도로 생성한뒤 해당 도커의 /usr/share/nginx/html 경로에 복사해야 했습니다. 

sudo docker cp index.html 컨테이너명:/usr/share/nginx/html

하지만 볼륨(volume)을 생성하여 컨테이너의 원하는 디렉터리에 마운트(mount) 해주면 볼륨과 마운트된 컨테이너의 디렉터리는 서로 공유 하게 됩니다.

예를 들어 현 위치에 디렉터리(web01)를 하나 생성 한뒤 컨테이너의 /usr/share/nginx/html 디렉터리에 마운트 했다고 가정 해보겠습니다. 이럴 경우 web01 디렉터리(volume)에 index.html를 생성한 것은 /usr/share/nginx/html에 index.html을 생성한 것과 같은 효과를 얻을 수 있습니다.

볼륨을 컨테이너에 마운트하는 작업은 컨테이너를 생성 할 때 v 옵션을 주어 설정 할 수 있습니다.

 

 

볼륨 생성 방법

불륨 생성 방법에는 총 3가지 있습니다.

 

3.1 볼륨 생성 명령어 사용

docker volume create volume_name

컨테이너 생성시 '-v volume_name:마운트포인트' 형식으로 사용

 

 

이렇게 생성된 볼륨은 /var/lib/docker/volume 아래에 생성되며 실제 데이터는 볼륨 아래의 _data 디렉터리 안에 저장됩니다. docker volume inspect volume_name 으로 볼륨의 상세 정보를 확인 할 수 있습니다.

 

 

docker volume ls 명령어를 통해 생성된 볼륨을 확인 할 수 있습니다.

 

 

즉 /var/lib/docker/voulme/web01/_data 아래에 데이터를 넣으면 /usr/share/nginx/html 아래에 데이터를 넣는 효과를 얻을 수 있습니다. (이 방식으로 생성한 볼륨을 컨테이너 생성 할 떄 사용하면 해당 볼륨에 index.html 파일이 생성됩니다.)

 

 

index.html 파일이 자동으로 생성되어 있기 때문에 'IP:PORT' 로 접속할 때 다음과 같은 화면을 확인 할 수 있습니다.

(50x.html 파일은 에러 화면을 출력합니다. IP:PORT/50x.html 로 접속)

 

좌 : index.html, 우 : 50x.html

 

3.2 볼륨으로 사용할 디렉터리 생성

볼륨 생성 명령어인 docker volume create volume_name로 볼륨을 만드는 작업이 아니라 볼륨으로 사용할 디렉터리를 생성 해줍니다 'mkdir 볼륨으로 사용할 디렉터리명'

컨테이너 생성시 '-v 볼륨으로 사용할 디렉터리의 절대 경로:마운트포인트' 형식으로 사용

 

 

볼륨 생성 명령어를 사용 했을 때와 달리 이렇게 생성한 볼륨은 docker volume inspect volume_name 으로 볼륨의 상세 정보를 확인 할 수 없습니다.

 

 

docker volume ls (생성된 볼륨 확인 명령어)에도 표시되지 않습니다.

 

 

이 방식으로 생성한 볼륨은 컨테이너 생성 할 떄 사용해도 해당 볼륨에 index.html 파일이 자동으로 생성되지 않습니다.

그렇기 때문에 IP:PORT 로 접속하면 아무런 화면도 출력 하지 않습니다.

 

 

화면이 출력하도록 하기 위해서는 index.html 파일을 해당 볼륨 위치에 생성 해 줘야 합니다.

 

 

 

3.3 볼륨 사용하지 않고 컨테이너 생성시 지정

 

볼륨이나 볼륨으로 사용할 디렉터리를 생성하지 않고 컨테이너 생성시 볼륨을 지정해주면 해당 볼륨을 자동으로 생성해 줍니다. 

 

현재 생성된 볼륨과 볼륨으로 사용중인 디렉터리 확인

(생성된 볼륨이 없는 것을 확인)

 

 

 

1) 컨테이너 생성 시 생성되지 않은 볼륨 지정 (3.1 방식과 같이 볼륨 생성 명령어를 사용하는 것과 같음)

컨테이너 생성시 '-v volume_name:마운트포인트' 형식으로 사용

 

 

1.1) 볼륨 목록 확인

 

 

1.2) docker volume inspect volume_name 으로 볼륨의 상세 정보를 확인 할 수 있습니다.

 

 

1.3) 생성된 볼륨에는 index.html이 자동으로 생성되어 있으며 IP:PORT로 접속하면 다음과 같은 화면이 출력됩니다.

 

 

2) 컨테이너 생성 시 생성되지 않은 볼륨 지정 (3.2 방식과 같이 볼륨으로 사용할 디렉터리 생성하는 것과 같음)

컨테이너 생성시 '-v 볼륨으로 사용할 디렉터리의 절대 경로:마운트포인트' 형식으로 사용

 

 

2.1) 볼륨 생성 여부 확인

 

 

2.2) docker volume inspect volume_name 으로 볼륨의 상세 정보를 확인 할 수 없습니다.

 

 

2.3) 생성된 볼륨에는 index.html이 자동으로 생성되어 않기 때문에 IP:PORT로 접속하면 오류 화면이 출력되기 떄문에 index.html 파일을 생성해 줍니다.

 

 

 좌 : index.html 생성 전, 우 : index.html 생성 후

 

 

4. 결론

 

이미지든 볼륨이든 컨테이너 생성 전에 미리 생성 해 둘 필요가 없습니다.

컨테이너 생성 할 때 지정하면 자동으로 생성 해주기 때문입니다.

다만 볼륨의 경우 볼륨을 지정할 때 절대 경로로 지정을 하냐, 볼륨명 만을 지정하냐에 따라 약간의 차이가 있습니다.

'쿠버네티스' 카테고리의 다른 글

Docker - Hub에 업로드  (0) 2022.11.25
Docker란?  (0) 2022.10.27
쿠버네티스란?  (0) 2022.10.26