티스토리 뷰
호스트 디렉터리와 컨테이너 디렉터리를 연결하려면 연결하려는 컨테이너 내부의 디렉터리 구조를 알아야 한다. 실습에서는 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
살짝 고쳐보았다.
새로고침하니, 고친 부분이 잘 적용된 것을 확인할 수 있다.
'가상화\자동화' 카테고리의 다른 글
[앤서블Ansible] 플레이북playbook 사용하기 (0) | 2023.10.03 |
---|---|
[앤서블Ansible] 기본적인 옵션과 모듈 사용법 (0) | 2023.10.03 |
[도커Docker] 컨테이너Container, 이미지Image 이해하기 (0) | 2023.10.02 |