볼륨
전장에 말했듯이 스토리지 디스크라고 생각하면 된다.
실행할 이미지와 별도로 저장되므로 데이터가 별도로 공유되어 사라지지 않습니다.
그리고, 도커의 내부로부터 돌기 때문에, 바인드 마운트보다 빠른 성능을 제공한다고 한다.
다만 이것이 또 하나 있는 것은 Windows에서 보면
요란식
그럼 사용법을 배우자.
1. volume
docker run -d \
--name devtest \ <-- 이건 볼필요없음 컨테이너 이름 정하는거
-v myvol2:/app \
nginx:latest
-v 와 같이 볼륨(myvol2)을 선택해 /app 라고 하는 폴더를 이미지로 해 공유한다고 하는 예상 그 이미지는 nginx:latest(nginx 마즈맥 버젼)
-v 대신 –volume도 가능하다고 한다
docker run -d \
--name devtest \ <-- 이건 볼필요없음 컨테이너 이름 정하는거
--volume myvol2:/app \
nginx:latest
같은 일
2. mount
이것은 더 다양한 형식을 가져올 수 있도록하는 것 같습니다.
그리고 옵션의 종류도 많다.
docker service create \
--mount
'type=volume,
src=<VOLUME-NAME>,
dst=<CONTAINER-PATH>,
volume-driver=local,
volume-opt=type=nfs,
volume-opt=device=<nfs-server>:<nfs-path>,
"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"
'
--name myservice \
<IMAGE>
보면
‘,’로 옵션 분류
‘type=설정값’ (volume, bind, tmpfs) 3개를 결정하여 사용할 수 있다
‘src=볼륨 이름(source)’ 별칭?
‘dst(destination or target)=컨테이너의 폴더 이름’
‘volume-driver=옵션(local, ???)’ 뭔가 옵션이 있다고 생각합니다.
‘volume-opt=옵션=옵션2’ 여기는 단지 전문가의 부분인 것 같다.
“”이 큰 따옴표는 뭔가 bash처럼<単語> 이러한 형식을 값으로 변환하여주고 실행하는 bash처럼?
“readonly(ro)” 여기에 빠진 readonly도 있는데 이것은 콤마다 소리 그대로 치면 좋다
글쎄, 옵션이나 그런 것은 아래에서 보면 더 쉬울 것입니다.
도커의 예에는 이렇게 쓰여 있다.
docker volume create my-vol
흠.
하면
docker volume ls
목록 보기
docker volume inspect my-vol
볼륨에 정보 보기
docker volume rm my-vol
삭제합니다.
이걸로 끝~
그럼 이미지를 실행할 때 볼륨처럼 실행해 보겠습니다 (나는 mac입니다 ~)
==== -v ====
docker run -d \
--name devtest \
-v myvol2:/app \
nginx:latest
==== -mount ====
docker run -d \
--name devtest \
--mount source=myvol2,target=/app \
nginx:latest
위의 예입니다.
이제 앱에 볼륨이 공유되나요?라고 생각하는 나
그리고 사용중인 볼륨을 먼저 삭제할 수 없습니다.
사용된 위치를 지우고 삭제
docker container stop devtest
docker container rm devtest
docker volume rm myvol2
지금 조금 중요한 docker compose로 사용
나중에 compose에서 할 것이기 때문에 이것이 중요합니다.
services:
frontend:
image: node:lts
volumes:
- myapp:/home/node/app
volumes:
myapp:
external: true
해석하면
service=서비스 시작~
frontend = 그냥 이름입니다.
image = 회전 image
volumes myapp: /home/… = 볼륨 설정 myapp 가져오고 home/…에 공유
volumes=볼륨 만들기
myapp = 볼륨 이름
external = 볼륨 옵션
true 일 때 docker network ls 라는 점을 보면 네트워크가 있다.
새롭게 추가해 접속하는 것이 아니라, 기존의 네트워크에 접속한다고 생각하면 좋다.
docker service create -d \
--replicas=4 \
--name devtest-service \
--mount source=myvol2,target=/app \
nginx:latest
-d 백그라운드 실행
-replicas=이것은 여러 실행입니다.
mount 를 이미 하고 있는 것에 계속할 수가 있다.
지금 네 가지로 myvol2를 함께 쓰고 있습니다.
==== -v ====
docker run -d \
--name=nginxtest \
-v nginx-vol:/usr/share/nginx/html \
nginx:latest
==== -mount ====
docker run -d \
--name=nginxtest \
--mount source=nginx-vol,destination=/usr/share/nginx/html \
nginx:latest
예는 조금 이상하다.
도커를 만드는데 다른 경로에 무언가 만들어진다면 그것을 가진 달인가? 볼륨에없는 것을 넣어주는 느낌?
nginx는 독자적으로 그 html 파일을 가지고 있어 공유하면 볼륨에도 들어가는 것 같다.
docker container stop nginxtest
docker container rm nginxtest
docker volume rm nginx-vol
지금 대망의 옵션
음… … 조금 이해할 수 없는 경우도 있으므로 참고해 주세요
ssh를 사용하기 위해 docker에 vieux/sshfs 플러그인
docker plugin install --grant-all-permissions vieux/sshfs
이제 볼륨을 만드는 옵션을 제공해 봅시다.
docker volume create --driver vieux/sshfs \
-o sshcmd=test@node2:/home/test \
-o password=testpassword \
sshvolume
간단히 살펴보면 sshcmd, 즉 명령에이를 입력 한 다음 다음 비밀번호를 입력하는 것처럼 보입니다.
로그인하면 /home/test에 무언가가 발생하는 것보다
docker run -d \
--name sshfs-container \
--volume-driver vieux/sshfs \
--mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword \
nginx:latest
아니요…… 지금 사용자는 비밀번호가 없지만
https://github.com/vieux/docker-volume-sshfs/issues/72
docker plugin ls
docker plugin disable <id>
docker plugin rm <id>
잘 설치되어 있는지 확인합니다.
음 .. 추가 옵션은 그냥 경로
모든 것을 삭제하면 실행 중입니다.
볼륨 삭제
docker run --rm -v /foo -v awesome:/bar busybox top
이것은 실행했을 때 컨테이너를 종료하면 자연스럽게 볼륨을 삭제하는 명령이다.
아마?컨테이너도 삭제된다는 것을 알고 있습니다 –rm 명령 참고
docker volume prune
처음으로 모두 삭제해준다는
https://docs.docker.com/storage/volumes/