[Docker] 도커 볼륨
- DOCKER
- 2021. 11. 4. 20:03
참고
- 시작하세요! 도커/쿠버네티스: 친절한 설명으로 쉽게 이해하는 컨테이너 관리
소개
- 도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨테이너의 변경 사항만 별도로 저장해서 각 컨테이너의 정보를 보존합니다.
- 이미 생성된 이미지는 어떠한 경우로도 변경되지 않으며, 컨테이너 계층에 원래 이미지에서 변경된 파일 시스템 등을 저장합니다.
- 이미지에 mysel을 실행하는 데 필요한 애플리케이션 파일이 들어 있다면 컨테이너 계층에는 워드프레스에서 쓴 로그인 정보나 게시글 등과 같이 데이터베이스를 운용하면서 쌓이는 데이터가 저장됩니다.
- 그러나 위의 내용에는 치명적인 단점이 있습니다.
- mysql 컨테이너를 삭제하면 컨테이너 계층에 저장돼있던 데이터베이스의 정보도 삭제된다는 점입니다.
- 도커의 컨테이너는 생성과 삭제가 매우 쉬우므로 실수로 컨테이너를 삭제하면 데이터를 복수 할 수 없습니다.
- 이를 방지하기 위해 컨테이너의 데이터를 영속적 데이터로 활용할 수 있는 방법이 몇 가지 있습니다.
- 그 중 가장 확실하고 쉬운 방법이 볼륨 을 활용하는 방법 입니다.
호스트 볼륨 공유하기
- 도커 볼륨 첫 번째 학습으로, 호스트 볼륨 공유하는 방법에 대해서 실습해 보도록 하겠습니다.
- 아래 명령어를 입력해 mysql 데이터베이스 컨테이너와 워드프레스 웹 서버 컨테이너를 생성합니다.
docker run -d --name wordpressdb_hostvolume -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -v /home/wordpress_db:/var/lib/mysql mysql:5.7
8ac61576bb78a2ba2becaae57d2db3eee79b1eaf6c08f123381ee3ceaeeae4d7
docker run -d -e WORDPRESS_DB_PASSWORD=password --name wordpress_hostvolume --link wordpressdb_hostvolume:mysql -p 80 wordpress
ea124996d1c3ab77bf3f1056eaba8063e18323855be5574dc4265aa05d9a2c8a
- 위에서 워드프레스 컨테이너에 -p 옵션으로 컨테이너의 80번 포트를 외부에 노출했습니다.
- docker ps 명령어에서 확인한 wordpress_hostvolume 컨테이너의 호스트 포트로 워드프레스 컨테이너에 접속할 수 있습니다.
- 위에서 핵심은 -v 옵션을 추가 했고,
/home/wordpress_db:/var/lib/mysql
로 설정한 것입니다. - 이는 호스트의 /home/wordpress_db 디렉토리와 컨테이너의 /var/lib/mysql 디렉토리를 공유한다는 의미입니다.
- 즉,
[호스트의 공유 디렉터리]:[컨테이너의 공유 디렉터리]
형태 입니다.컨테이너의 /var/lib/mysql 디렉터리는 MySql이 데이터베이스의 데이터를 저장하는 기본 디렉토리 입니다.
미리 /home/wordpress_db 디렉터리를 호스트에 생성하지 않았어도 도커는 자동으로 이를 생성해 줍니다.
ls /home/wordpress_db
디렉터리: C:\home\wordpress_db
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2021-11-04 오후 7:48 mysql
d----- 2021-11-04 오후 7:48 performance_schema
d----- 2021-11-04 오후 7:48 sys
d----- 2021-11-04 오후 7:48 wordpress
-a---- 2021-11-04 오후 7:48 56 auto.cnf
-a---- 2021-11-04 오후 7:48 1676 ca-key.pem
-a---- 2021-11-04 오후 7:48 1112 ca.pem
-a---- 2021-11-04 오후 7:48 1112 client-cert.pem
-a---- 2021-11-04 오후 7:48 1676 client-key.pem
-a---- 2021-11-04 오후 7:48 79691776 ibdata1
-a---- 2021-11-04 오후 7:48 12582912 ibtmp1
-a---- 2021-11-04 오후 7:48 1359 ib_buffer_pool
-a---- 2021-11-04 오후 7:48 50331648 ib_logfile0
-a---- 2021-11-04 오후 7:48 50331648 ib_logfile1
-a---- 2021-11-04 오후 7:48 1676 private_key.pem
-a---- 2021-11-04 오후 7:48 452 public_key.pem
-a---- 2021-11-04 오후 7:48 1112 server-cert.pem
-a---- 2021-11-04 오후 7:48 1676 server-key.pem
- 위와 같이 mysql을 구동하는 데 필요한 각종 파일들이 공유 되었습니다.
- mysql, performance_schema, sys, wordpress 디렉토리는 mysql에 존재하는 실제 데이터베이스에 대응됩니다.
- 그럼 실제로 컨테이너를 삭제하여 데이터베이스의 데이터가 보존되는지 확인해 보도록 하겠습니다.
- 아래와 같이 명령어를 입력하여 2개의 컨테이너를 삭제해 줍니다.
# docker stop wordpress_hostvolume wordpressdb_hostvolume
# docker rm wordpress_hostvolume wordpressdb_hostvolume
- 다시 /home/wordpress_db 경로를 확인해 보고, mysql 컨테이너가 사용한 데이터가 그대로 남은것을 확인합니다.
ls /home/wordpress_db
디렉터리: C:\home\wordpress_db
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2021-11-04 오후 7:48 mysql
d----- 2021-11-04 오후 7:48 performance_schema
d----- 2021-11-04 오후 7:48 sys
d----- 2021-11-04 오후 7:48 wordpress
-a---- 2021-11-04 오후 7:48 56 auto.cnf
-a---- 2021-11-04 오후 7:48 1676 ca-key.pem
-a---- 2021-11-04 오후 7:48 1112 ca.pem
-a---- 2021-11-04 오후 7:48 1112 client-cert.pem
-a---- 2021-11-04 오후 7:48 1676 client-key.pem
-a---- 2021-11-04 오후 7:48 79691776 ibdata1
-a---- 2021-11-04 오후 7:48 12582912 ibtmp1
-a---- 2021-11-04 오후 7:48 1359 ib_buffer_pool
-a---- 2021-11-04 오후 7:48 50331648 ib_logfile0
-a---- 2021-11-04 오후 7:48 50331648 ib_logfile1
-a---- 2021-11-04 오후 7:48 1676 private_key.pem
-a---- 2021-11-04 오후 7:48 452 public_key.pem
-a---- 2021-11-04 오후 7:48 1112 server-cert.pem
-a---- 2021-11-04 오후 7:48 1676 server-key.pem
- 확인 결과, 그대로 데이터가 유지된 것을 확인할 수 있습니다.
- 참고로, /var/lib/mysql 디렉터리는 호스트의 /home/wordpress_db 디렉토리는 동기화 되는 것이 아니라 완전히 같은 디렉토리 입니다.
728x90
'DOCKER' 카테고리의 다른 글
Docker 네트워크 사용법 (0) | 2022.04.01 |
---|---|
[Docker] 도커 볼륨 (0) | 2021.11.08 |
[Docker] 오라클 11g 컨테이너 실행 및 볼륨 설정하기 (0) | 2021.09.27 |
[Docker] Docker 기본 명령어 (0) | 2021.08.19 |
[Docker] Docker Windows 운영체제 설치하기 (0) | 2021.07.15 |
이 글을 공유하기