관리 메뉴

bright jazz music

[Docker] volume 본문

OS 및 기타/docker & kubernetes

[Docker] volume

bright jazz music 2023. 4. 11. 15:52

https://docs.docker.com/storage/volumes/

 

Volumes

 

docs.docker.com

 

1. 도커 볼륨 생성하고 목록보기

: 아래와 같이 생성하면 기본적으로는 /var/lib/docker/volume에 생성된다.

[coffee@localhost ecert24]$ cd /usr/local
[coffee@localhost local]$ sudo docker volume create dev-volume
dev-volume
[coffee@localhost local]$

1.1. 특정 경로에 볼륨 생성하기

$ sudo docker volume create --name data --opt type=none --opt device=/data --opt o=bind

 Docker 컨테이너 내에서 사용할 수 있는 볼륨을 생성하는 명령이다. 이 명령을 통해 "data"라는 이름의 볼륨이 생성된다.

/*

`--opt` 옵션을 사용하여 추가적인 설정을 지정할 수 있습니다. 

- `type=none`: 이 옵션은 볼륨의 유형을 "none"으로 지정합니다. "none" 유형의 볼륨은 호스트 시스템의 특정 경로에 바인딩(bind)되는 방식으로 동작합니다.
- `device=/data`: 이 옵션은 바인딩할 호스트 경로를 "/data"로 지정합니다. 컨테이너 내에서 볼륨을 사용할 때 해당 경로는 호스트 시스템의 실제 경로와 연결됩니다.
- `o=bind`: 이 옵션은 바인딩된 볼륨을 읽기 및 쓰기 가능하도록 설정합니다. 즉, 컨테이너 내부 및 외부에서 해당 경로에 대한 읽기 및 쓰기 작업이 가능합니다.

*/



따라서, 위 명령은 "data"라는 이름의 볼륨을 생성하고, 이 볼륨을 호스트 시스템의 "/data" 경로에 바인딩하여 읽기 및 쓰기 작업을 가능하게 한다.

2. 볼륨 목록 확인

[coffee@localhost local]$ sudo docker volume ls
DRIVER    VOLUME NAME
local     dev-volume
[coffee@localhost local]$

 

3. 볼륨 검사

[coffee@localhost local]$ sudo docker volume inspect dev-volume
[
    {
        "CreatedAt": "2023-04-11T15:47:57+09:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/dev-volume/_data",
        "Name": "dev-volume",
        "Options": null,
        "Scope": "local"
    }
]
[coffee@localhost local]$

 

4. 볼륨제거

[coffee@localhost local]$ sudo docker volume rm dev-volume
dev-volume

 

5. 마운트 되지 않은 volume 삭제

[coffee@localhost local]$ sudo docker volume prune
[sudo] password for coffee:
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
[coffee@localhost local]$

 

6. 생성한 볼륨을 마운트하여 컨테이너 실행

내 경우 호스트 머신에서 생성한 dev-volume을 컨테이너의 /usr/local/src 디렉토리에 마운트 시켰다. 자신이 원하는 디렉토리에 마운트 시키면 된다.

[coffee@localhost local]$ sudo docker run --privileged -p 82:80 -p 10002:10000 -p 3002:3000 -v dev-volume:/usr/local/src --name test03 test:0.2 init
[sudo] password for coffee:

 

7. 연동 테스트

7.1. 호스트 머신에서 파일 생성/작성하고 컨테이너에서 확인하기

 

호스트 머신에서 volume 내에 fileFromHost.txt라는 파일을 생성하고 파일 내용을 작성하였다. "this is in host machine"

[root@localhost _data]# pwd
/var/lib/docker/volumes/dev-volume/_data
[root@localhost _data]#
[root@localhost _data]# touch fileFromHost.txt
[root@localhost _data]# vi fileFromHost.txt
[root@localhost _data]# cat fileFromHost.txt
this is in host machine
[root@localhost _data]#

 

컨테이너의 /usr/local/src 디렉토리에서 fileFromHost.txt 파일을 확인하고 내용 역시 확인하였다.

[root@caf37a1af52f src]# cat fileFromHost.txt
this is in host machine
[root@caf37a1af52f src]# pwd
/usr/local/src
[root@caf37a1af52f src]# ls
fileFromHost.txt
[root@caf37a1af52f src]# cat fileFromHost.txt
this is in host machine
[root@caf37a1af52f src]#

 

7.2. 컨테이너에서 파일 생성/작성하고 호스트 머신에서 확인하기

여기에서는 생략되었지만 컨테이너 내부의 /usr/local/src 디렉토리에 fileFromContainer.txt 파일을 생성하고 내용을 작성하였다. 대략 아래와 같은 작업하였다.

# touch /usr/local/src/fileFromContainer.txt
# vi fileFromContainer.txt 
# 내용 작성 "this is in container"

 

호스트 머신의 볼륨이 위치한 디렉토리(/var/lib/docker/volume/_data)에서 fileFromContainer 파일과 그 내용을 확인하였다.

 

[root@localhost _data]#
[root@localhost _data]# pwd
/var/lib/docker/volumes/dev-volume/_data
[root@localhost _data]# ls
fileFromContainer.txt  fileFromHost.txt
[root@localhost _data]# cat fileFromContainer.txt
this is in container
[root@localhost _data]#

이로써 상호 연동되는 모습을 확인할 수 있다.

Comments