본문 바로가기
DevOps/Docker

[Docker] : host volume 공유, 호스트 볼륨 공유

by 오주현 2022. 2. 16.
반응형

호스트 볼륨 공유


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
docker run -d \\
-e WORDPRESS_DB_PASSWORD=password \\
--name wordpress_hostvolume \\
--link wordpressdb_hostvolume:mysql \\
-p 80 \\
wordpress

두 명령어를 통해 mysql 데이터베이스 컨테이너와 워드프레스 웹 서버 컨테이너를 생성한다.

 

워드프레스 컨테이너에 -p 옵션으로 컨테이너의 80 포트를 외부에 노출했으므로 wordpress_hostvolume 컨테이너의 호스트 포트로 워드프레스 컨테이너에 접속할 수 있다.

 

ls /home/wordpress_db

위 명령어로 실제 해당 디렉터리에 데이터베이스 관련 파일이 있는지 확인할 수 있다.

 

이제 컨테이너를 삭제해 데이터베이스의 데이터가 보존되는지 확인해 본다.

 

docker stop wordpress_hostvolume wordpressdb_hostvolume

docker rm wordpress_hostvolume wordpressdb_hostvolume

위 명령어를 통해 컨테이너 동작을 멈추고 삭제할 수 있다.

 

ls /home/wordpress_db

다시 /hom/wordpress_db 디렉터리를 확인하면 mysql 데이터가 그대로 남은 것을 확인할 수 있다.

 

그럼, 호스트에 이미 디렉터리와 파일이 존재하고 컨테이너에도 존재할 때 두 디렉터리를 공유하면 어떻게 될까?

확인을 위해 alicek106/volume_tset라는 미리 준비된 이미지를 활용한다.

 

docker run -i -t \\
--name volume_dummy \\
alicek106/volume_test
ls /home/testdir_2/

이 이미지에는 /home 디렉터리에 testdir_2라는 디렉터리가 존재하고 test라는 파일이 그 안에 들어있다. 그 다음 명령어를 입력해 컨테이너를 생성하고 /home/testdir_2라는 디렉터리를 확인하면 파일이 존재하는 것을 확인할 수 있다.

 

이미지에 원래 존재했던 디렉터리에 호스트 볼륨을 공유하면 컨테이너의 디렉터리 자체가 덮어씌워지는 것이다. 즉, -v 옵션을 통한 호스트 볼륨 공유는 호스트의 디렉터리를 컨테이너의 디렉터리에 마운트한다.

docker run -i -t \\
--name volume_overide \\
-v /home/wordpress_db:/home/testdir_2 \\
alicek106/volume_test
ls /home/testdir_2/

run 명령어를 실행하면서 alicek106/volume_test 이미지가 도커에 존재하지 않으므로 이미지를 pull한다. 그러나 태그를 지정하지 않았는데 이미지가 pull 된 것은 이미지의 태그를 지정하지 않으면 도커 엔진이 lastest 태그로 지정된 이미지를 pull하기 때문이다.

 


📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다.

반응형

댓글