Docker 시리즈 (3)

1 분 소요

도커 볼륨

  • 도커 이미지는 읽기 전용이라서 어떠한 경우에도 변경되지않고, 이미지로 생성된 컨테이너 계층에서 원래 이미지에서 변경된 파일 시스템 등을 저장한다.
  • mysql 이미지를 이용해서 만든 컨테이너에 user 테이블과 post 테이블이 생성되어 로그인정보와 게시물정보를 컨테이너 계층에서 저장하고 있는데 만약 컨테이너를 삭제해버리면 해당 정보들은 전부 손실된다. 당연히 복구할 수도 없다. 이럴 때 사용하는 것이 볼륨이다.
  1. 호스트 볼륨 공유
    • 말그대로 도커 컨테이너를 만들 때 호스트의 공유 디렉터리와 컨테이너의 공유 디렉터리를 연결시켜놓는것이다.
       # docker run -d \
       --name wordpressdb_hostvolume \
       -e MYSQL_ROOT_PASSWORD=qwer \
       -v /home/wordpress_db:/var/lib/mysql \
       mysql:5.7
      
    • 위와 같이 -v옵션을 사용해서 [호스트의 공유 디렉터리]:[컨테이너의 공유 디렉터리]로 표현한다.
    • 이러면 앞으로 컨테이너 내부의 /var/lib/mysql에 들어오는 변경된 데이터들은 호스트의 /home/wordpress_db디렉터리에 동기화된다.
    • 컨테이너를 삭제해도 호스트 공유 디렉터리엔 삭제 직전 모습이 그대로 남아있다.
    • 여기서 /home/wordpress_db 디렉터리가 기존에 없어도 알아서 만들어준다.
    • 이미 기존에 있던 호스트 공유 디렉터리에 새로운 컨테이너가 -v옵션으로 걸고 들어오면 새로운 컨테이너의 공유 디렉터리가 기존의 호스트 공유 디렉터리에 마운트한다.
  2. 볼륨 컨테이너
    • 말그대로 볼륨 용도의 컨테이너를 만드는 방식이다.
       # docker run -i -t \
       --name volume_from _container \
       --volumes-from volume_override \
       ubuntu:14.04
      
    • 컨테이너를 만들 때 기존에 있던 컨테이너를 –volumes-from옵션으로 걸면 기존에 있던 컨테이너가 호스트에 공유하고 있는 디렉터리로 동기화가 된다.
    • 따라서 여기선 volume_override 컨테이너가 볼륨 컨테이너가 된 것이다.
  3. 도커 볼륨
    • 도커 볼륨은 마찬가지로 생성된 컨테이너의 디렉터리 하나에 상응하는 단위로서 도커 엔진에서 관리한다.
    • 도커 볼륨도 호스트 볼륨 공유와 마찬기지로 호스트에 저장함으로써 데이터를 보존하지만 실제로 어디에 저장하는지를 몰라도 된다는 장점이 있다.
        # docker volume create --name myvolume
        # docker volume ls
      
        # docker run -i -t --name volume_test1 \
        -v myvolume:/root/ \
        ubuntu:14.04
        root@5as6df465sadf:~# vi volume.txt
      
        # docker run -i -t --name volume_test2 \
        -v myvolume:/root/ \
      
    • 위와 같이 myvolume 도커 볼륨을 만들고 volume_test1컨테이너를 만들 때 공유를 시킨 후 해당 디렉터리에 파일을 임의로 만들면 새롭게 만든 volume_test2컨테이너에 공유 디렉터리에도 똑같이 그 임의의 파일이 들어있다.
    • docker inspect --type volume myvolume 명령어를 통해 해당 도커 볼륨이 호스트 어디에 저장되어있는지를 확인할 수 있다.

카테고리:

업데이트:

댓글남기기