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 |