티스토리 뷰

반응형

 

호스트 디렉터리와 컨테이너 디렉터리를 연결하려면 연결하려는 컨테이너 내부의 디렉터리 구조를 알아야 한다. 실습에서는 nginx 이미지를 사용해 컨테이너를 생성할 것이기 때문에 /usr/share/nginx/html/ 과 연결할 것이다.

 

바인드 마운트와 볼륨 둘 다 연결해 놓으면 호스트와 컨테이너 내부 디렉터리가 동기화되는 방식이다. 그런데 다른 점은, 바인드 마운트는 마운트하는 순간 호스트의 디렉터리로 컨테이너 내부 디렉터리를 덮어써버리고, 볼륨은 양쪽 다 보존된다는 것이다.

 

바인드 마운트

 

1. 컨테이너 내부와 연결할 호스트의 디렉터리 생성

 

mkdir /root/html

ls

잘 생성된 것도 확인.

 

 

2. 컨테이너 생성/실행하며 연결해주기

 

docker run -d -p 80:80 --name nginx-bind-mount -v /root/html:/usr/share/nginx/html --restart always nginx:stable

-v(--volume) 호스트디렉터리경로:컨테이너디렉터리경로 옵션을 추가해주었다.

 

docker ps  잘 실행되었는지도 확인.

이미지 받아오는 명령은 하지 않았는데, 그냥 run하면 필요한 이미지를 알아서 pull해온다.

 

 

3. 동기화 확인

 

잘 연결되었는지 확인하기 위해 컨테이너와 연결한 호스트 디렉터리에 nginx 메인으로 보여줄 index.html을 만들었다.

 

vi /root/html/index.html

메인페이지로 노출될 index.html 내용 작성

컨테이너 내부 확인하기 위한 명령어 

docker exec 0fee(컨터이너ID의일부) ls /usr/share/nginx/html

잘 들어가 있는 것을 확인할 수 있다.

 

호스트의 80번 포트와 도커의 80번 포트를 연결했기 때문에 호스트의 IP주소만 쳐도 잘 접속되는 걸 확인 할 수 있다.

 

볼륨
도커가 직접 관리하며 컨테이너에 제공하는 호스트의 공간

 

 

1. 볼륨 생성

 

docker volume create nginx-volume  볼륨 생성. nginx-volume은 이름이라 아무거나  써주면 된다.

docker volume inspect nginx-volume  상세정보 확인

ls /var/lib/docker/volumes/nginx-volume/_data  내부에 아무것도 없는 것 확인

 

 

2. 컨테이너 생성/실행하며 볼륨과 연결

 

docker run -d -v nginx-volume:/usr/share/nginx/html -p 81:80 --name nginx-volume --restart always nginx:stable

볼륨과 컨테이너 디렉터리를 연결해 줄 때는 경로말고 볼륨 이름으로 써주어도 된다.

바인드 마운트하며 사용했던 80번 포트가 중복되면 안되기 때문에 호스트의 81번 포트와 도커의 80번 포트를 연결해주었다.

 

 

3. 동기화 확인

 

ls /var/lib/docker/volumes/nginx-volume/_data

처음 볼륨 만들고 조회했을 땐 텅 비어있던 내부에 뭔가가 생겼다. 컨테이너 내부의 디렉터리에 있던 것들이 볼륨과 동기화된 것을 알 수 있다.

 

81번 포트로 접속해보니 nginx의 기본 메인 화면이 잘 출력된다.

한번 더 확인해보기 위해 볼륨 내부의 index.html을 수정해보기로 한다.

 

vi /var/lib/docker/volumes/nginx-volume/_data/index.html

살짝 고쳐보았다.

새로고침하니, 고친 부분이 잘 적용된 것을 확인할 수 있다.

 

반응형