[Docker] Volume - Bind mount 실습

2024. 10. 21. 15:00·OS/Docker

Bind Mount  연결


 

# 디렉터리 및 파일 생성

ubuntu@docker:~$ mkdir bind01 bind02
ubuntu@docker:~$ echo 'busanit docker-1' > bind01/docker-1.txt
ubuntu@docker:~$ echo 'busanit docker-2' > bind02/docker-2.txt

ubuntu@docker:~$ cat bind01/docker-1.txt
busanit docker-1
ubuntu@docker:~$ cat bind02/docker-2.txt
busanit docker-2

ubuntu@docker:~$ docker run -it --name=bind-mount \-v /home/ubuntu/bind01:/bind01 \-v ${PWD}/bind02:/bind02 \
ubuntu:14.04 bash

 

호스트 시스템에서 사용할 bind01과 bind02라는 두 개의 디렉터리를 생성하고, 각 디렉터리에 docker-1.txt와 docker-2.txt 파일을 생성했다. 각 파일에는 busanit docker-1, -2 라는 문자열이 저장되어 있다. 

 

 

# 컨테이너에서 Bind mount 실행

docker run -it --name=bind-mount \
-v /home/ubuntu/bind01:/bind01 \
-v ${PWD}/bind02:/bind02 \
ubuntu:14.04 bash

 

Docker 컨테이너를 실행하면서 bind01 과 bind02 디렉토리를 바인드 마운트 한다. 

-v /home/ubuntu/bind01:/bind01 : 호스트의 bind01 디렉토리를 컨테이너의 /bind01에 마운트 한다.

-v ${PWD}/bind02:/bind02 : 현재 작업 디렉터리에서 bind02를 컨테이너의 /bind01에 마운트 한다.

 

 

# bind01, 02가 마운트 되었는지 확인 & #mount 상세 정보 확인

root@051b6753428d:/# mount | grep bind
 /dev/sda3        49G   15G   32G  31% /bind02
 /dev/sda3        49G   15G   32G  31% /bind01
 
root@051b6753428d:/# mount | grep bind
/dev/sda3 on /bind02 type ext4 (rw,relatime,errors=remount-ro)
/dev/sda3 on /bind01 type ext4 (rw,relatime,errors=remount-ro)

 

 

# 디렉토리 내의 파일 조회

root@051b6753428d:/# ls bind01
docker-1.txt
root@051b6753428d:/# ls bind02
docker-2.txt

 

#docker -1.txt에 내용추가

root@051b6753428d:/# echo 'welcome to container' >> bind01/docker-1.txt
root@051b6753428d:/# cat bind01/docker-1.txt
busanit docker-1
welcome to container

 

docker-1.txt. 파일의 내용은 busanit docker-1에서 welcome to container 라는 내용이 추가되어 업데이트 해주었다. 

 

# 호스트에서 파일 확인

root@051b6753428d:/#eixt

ubuntu@docker:~$ cat bind01/docker-1.txt
busanit docker-1
welcome to container

 

 

#컨테이너 설정 정보 확인

ubuntu@docker:~$ docker inspect --format="{{ .HostConfig.Binds }}" bind-mount
[/home/ubuntu/bind01:/bind01 /home/ubuntu/bind02:/bind02]

 

실행 중인 컨테이너에 바인드 마운트된 디렉토리를 확인했다. /home/ubuntu/bind01과 /home/ubuntu/bind02가 각각 컨테이너의 /bind01과 /bind02에 마운트된 것을 확인할 수 있었다.

 

# 컨테이너 중지 및 삭제

ubuntu@docker:~$ docker stop bind-mount
bind-mount
ubuntu@docker:~$ docker rm bind-mount
bind-mount

 

컨테이너가 active 되어 있을 때는 stop을 해주고 삭제해주는 것이 좋다.

 

#컨테이너는 삭제 되었지만 볼륨은 아직 존재

ubuntu@docker:~$ cat bind01/docker-1.txt
 busanit docker-1
 welcome to container

 

바인드 마운트는 호스트의 디렉터리를 사용하기 때문에 컨테이너가 삭제되어도 해당 디렉터리와 파일은 유지가 되는 것을 확인할 수 있다.

 

 

# 디렉토리 권한 설정 (파일 읽기 /쓰기 권한 설정)

## $(pwd)  :  $(명령어) 형태로 현재 디렉토리 적용

docker run -it --name=bind-mount \
-v /home/ubuntu/bind01:/bind01:ro \
-v $(pwd)/bind02:/bind02:rw \
ubuntu:14.04 bash

 

이번에는 bind01을 읽기 전용(ro)로 설정했고, bind02를 읽고 씨기(rw)로 설정하여 컨테이너를 실행했다.

 

 

# 읽기 전용 파일 수정 

echo 'welcome to container' >> bind01/docker-1.txt
bash: bind01/docker-1.txt: Read-only file system

 

지금 보면 오류를 확인할 수 있었다. bind01은 디렉터리가 읽기 전용으로 설정이 되어 있기 때문에, 이 파일이 추가로 내용을 쓰려고 시도하면 이렇게 오류 메시지를 받게 된다.

 

# 컨테이너 설정 정보 확인

root@051b6753428d:/# exit
ubuntu@docker:~$ docker inspect --format="{{ .HostConfig.Binds }}" bind-mount
[/home/ubuntu/bind02:/bind02:rw /home/ubuntu/bind01:/bind01:ro]

 

bind01이 읽기 전용(ro), bind02가 **읽기/쓰기(rw)**로 설정된 것을 확인할 수 있었다.

 

 

요약

바인드 마운트를 통해서 호스트의 디렉토리와 파일을 컨테이너에 마운트하여, 호스트와 컨테이너 간에 파일을 공유할 수 있다. 또한 호스트 시스템에서 생성한 파일을 컨테이너 내부에서 수정할 수 없었다. 마운트 시 설정한 읽기/쓰기 권한에 따라서 파일에 대한 접근에 제한이 되는 것 같다. 마지막으로 컨테이너가 삭제되어도 호스트 파일과 디렉토리는 그대로 유지되는 것을 볼 수 있었다. 



Bind Mount 설정 파일 공유


Bind Mount 설정 파일을 공유하는 실습에서는 Redis 데이터베이스와 CentOS 컨테이너를 설정 및 관리하는 방법을 진행할 것이다. 

 

Redis DB 설정

 

# Redis 설정 파일 다운 및 편집

ubuntu@docker:~$mkdir redis-conf && cd $_
ubuntu@docker:~$curl -O https://raw.githubusercontent.com/redis/redis/7.0/redis.conf
ubuntu@docker:~$vim redis.conf

 

redis DB는 제공되는 기본 설정 파일을 통해서 redis-cli 접근인증 암호를 포함시켜 공유하면 해당 암호를 이용해 인증이 가능하다고 인터넷에 나와 있었다. 

 

 

# Redis 컨테이너 실행

ubuntu@docker:~/redis-conf$docker run -itd --name=redis-container \
-p 6379:6379 -h=redis-db \
-v ./data:/data \
-v ./redis.conf:/usr/local/conf/redis.conf \
redis:7 redis-server /usr/local/conf/redis.conf

 

 

Redis 컨테이너를 실행합니다. 호스트의 포트 6379를 컨테이너의 포트 6379에 매핑해줬고, 데이터를 저장할 경로와 Redis 설정 파일을 컨테이너에 연결해주었다. 

 

 

#Redis CLI 접속

 

 

ubuntu@docker:~/redis-conf$docker exec -it redis-container bash
root@redis-db:/data#redis-conf$redis-cli

 

Redis 컨테이너에 들어갔다. 처음 접속할 때 비밀번호를 설정하지 않았기 때문에 인증 실패 메시지가 나오는 것을 확인할 수 있었다. 

 

 

#비밀번호를 사용한 Redis CLI 접속

root@redis-db:/data# redis-cli -a pass123#
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe
127.0.0.1:6379> set item1 docker1
OK
127.0.0.1:6379> set item2 docker2
OK

 

이전에 비밀번호를 사용하여 Redis에 접속을 했다. 비밀번호 인증에 성공하고 키와 값을 설정할 수 있었다. 

 

 

저작자표시 비영리 변경금지 (새창열림)

'OS > Docker' 카테고리의 다른 글

[Docker] 암시적 docker volumes  (0) 2024.10.28
[Docker] Proxy vs Reverse Proxy 차이  (0) 2024.10.21
[Docker] Volume (데이터 보존할 때)  (0) 2024.10.21
[Docker] Nginx Container reverse proxy  (0) 2024.10.14
[Docker] - Nginx를 활용한 프록시 구성  (0) 2024.10.14
'OS/Docker' 카테고리의 다른 글
  • [Docker] 암시적 docker volumes
  • [Docker] Proxy vs Reverse Proxy 차이
  • [Docker] Volume (데이터 보존할 때)
  • [Docker] Nginx Container reverse proxy
Kouji
Kouji
Journey to Becoming a Data & Server Engineer
  • Kouji
    Kouji's Data & Server Journey
    Kouji
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Programming
        • Python
        • SQL
      • Data & AI
        • Data Analysis
        • Ai
      • Cloud(AWS)
      • OS
        • Linux
        • Docker
        • Jenkins
        • Ubuntu
        • Window
        • Kubernates
        • Ansible
      • Network
        • NVIDIA
        • Network[이론]
        • Network[GNS3, Packet]
        • Network[On-Premise]
        • Network [L2, L3]
      • 트러블 슈팅
      • Life
        • My Career Stories
        • Personal
      • 개발 + OS 지식 함양
  • 블로그 메뉴

    • 홈
    • 관리 페이지
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    서버
    화이팅
    dns
    L3
    VMware
    티스토리챌린지
    서버엔지니어
    네트워크엔지니어링
    도커
    인프라
    네트워크관리사
    docker
    클라우드엔지니어
    AWS
    OS
    IT
    ubuntu
    네트워크
    알고리즘
    리눅스
    웹
    보안
    CISCO
    인프라엔지니어
    Linux
    오블완
    네트워크엔지니어
    스위치
    라우팅
    시스템엔지니어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kouji
[Docker] Volume - Bind mount 실습
상단으로

티스토리툴바