본문 바로가기
Docker

[Docker 수업] 20241020 도커 볼륨 관리 (7장)

by bestchoco 2024. 10. 20.

* image는 읽기 전용, Container는 읽기/쓰기.

 

- volume 방식


호스트 볼륨            컨테이너

(없음)                      file1(abc)
<------------------------ file1(abc)             [동기화!]

file1(abc)                file1(abc)

                                                            

file1(abcde)            file1(abc)              [host쪽에서 파일 수정!]

file1(abcde)  --->    file1(abcde)  

 

예) 호스트에서 작업한 파일이 컨테이너에 있다면?

컨테이너에 존재하는 파일을 덮어써버림.

 

 

- bind mounts 방식

 

호스트 볼륨             컨테이너

                                file1(abc)

file2(xyz)                                            [host쪽에서 파일 수정!]

                                file2(xyz)            (파일이 덮어쓰여짐)

 

호스트에는 파일이 없다고 가정했을 때,

컨테이너에 파일이 존재해도 컨테이너 쪽 파일 자동으로 없어짐. 


- docker volume 생성


- docker mysql 실습


@ debian, ubuntu  <= docker에서 httpd (apache)의 경우 debian 이미지여서 아래 위치로.

 

nginx HTTP 루트 디렉토리: /usr/share/nginx/html/

apache HTTP 루트 디렉토리: /usr/local/apache2/htdocs/

 

 

@CentOS

 

nginx HTTP 루트 디렉토리: /usr/share/nginx/html/

apache HTTP 루트 디렉토리: /var/www/html/


- volume 방식:

    "Mounts": [
      {
        "Type": "volume",
        "Name": "testvol",
        "Source": "/var/lib/docker/volumes/testvol/_data",
        "Destination": "/usr/share/nginx/html",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
      }

 

- bind 방식:

"Mounts": [
            {
                "Type": "bind",
                "Source": "/www",
                "Destination": "/usr/share/nginx/html",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ]


- bind 방식 예

(컨테이너 쪽에 파일 2개 있었지만, 무조건 host 쪽에서 동기화를 해버리기 때문에

컨테이너 쪽 파일들은 사라지고 없음을 확인 가능)


- bind 방식 예2

 

* 상황 가정: host에서 index.html 파일 생성

=>

container에 아무것도 없었지만, host 쪽에서 index.html 파일 생성을 했으니 동기화가 되었고,

container 쪽에도 동일하게 index.html 파일 확인 가능.


[nfs-server 실습]

* 마운트 가능 여부 확인

[root@docker1 ~]# showmount -e 192.168.2.20
Export list for 192.168.2.20:
/nfsweb 192.168.2.10

 

* 마운트 명령어

[root@docker1 ~]# mount 192.168.2.20:/nfsweb /web

 

* 마운트 해제 명령어

[root@docker1 ~]# umount /web