출처: youtu.be/EWoOzcfpP-w
도커 컨테이너에 파일을 저장할 때의 문제점
- 컨테이너가 죽으면 파일도 같이 사라짐
- 컨테이너 안의 파일을 도커 밖에서 가져오기 힘듦
- 컨테이너의 writable layer가 호스트 머신과 강하게 결합되어 있어서, 데이터를 옮기기 힘듦
- 컨테이너의 writable layer에 쓰는 것은 스토리지 드라이버를 필요로 하는 데, 성능이 좋지 않음
- => 데이터를 도커 컨테이너의 외부에서 관리하는 것이 좋음
호스트 머신에 파일 저장하는 방법
- Volumes: 호스트 머신의 파일 시스템 중 도커에 의해 관리되는 영역에 저장
- Bind mounts: 호스트 머신의 파일 시스템 아무곳에나 저장
- 기타: tmpfs mounts, named pipe 등
https://docs.docker.com/storage
Volumes
- 도커에 의해 관리되는 호스트 컴퓨터의 파일 시스템에 저장
- Linux에서는 /var/lib/docker/volumes
- 도커가 아닌 프로세스는 이 파일을 수정하면 안 됨
- 도커에서 데이터를 유지하는 가장 좋은 방법
- 새로운 디렉토리가 호스트 컴퓨터의 도커 스토리지 영역에 생김
- 도커는 해당 디렉토리의 컨텐츠를 관리
- 이름이 있을 수도 있고, 없을 수도 있음
- 볼륨의 특징
- 하나의 볼륨은 여러 개의 컨테이너에 동시에 마운트될 수 있음
- 볼륨을 사용하는 컨테이너가 없어도 볼륨은 여전히 도커에서 사용할 수 있고 자동으로 지워지지 않음
- 볼륨 드라이버를 사용하여 리모트 호스트나 클라우드 프로바이더에 데이터를 저장할 수 있음
- 커맨드를 통해 생성할 수도 있고, 컨테이너가 서비스를 생성할 때 도커가 생성하기도 함
- 볼륨과 관련된 커맨드
- docker volume create
- docker volume prune
Bind Mounts
- 호스트 컴퓨터의 어느 곳에나 저장할 수 있음
- 중요한 시스템 파일이나 디렉토리인 경우 Bind Mounts 방식을 써야 하는 경우가 있음
- 도커가 아닌 프로세스, 또는 도커 컨테이너가 언제든 수정할 수 있음
- 호스트 컴퓨터의 파일이나 디렉터리가 컨테이너로 마운트됨
- 도커 컴퓨터에 없으면 도커가 알아서 만들어줌
- 도커 명령어를 사용할 수 없음
- 볼륨에 비해 제한된 기능
- 호스트 머신의 파일이나 디렉터리는 컨테이너로 마운트 됨
- 파일이나 디렉터리는 절대 또는 상대 경로로 참조됨
- 민감한 파일에 접근을 허용함
- 컨테이너 안에서 실행되는 프로세스에서 호스트의 파일 시스템을 수정할 수 있음
참고
- —mount 플래그 사용을 권장함
실습
Step1: 볼륨 생성
- docker volume —help
- docker volume create myvol-1: 볼륨 생성
- docker volume ls: 볼륨 목록 조회
Step2: 볼륨 속성 보기
- docker volume inspect myvol-1
Step3: Jenkins 설치
- docker pull jekins/jenkins:2.138.4
Step4: Jenkins를 Volume이랑 같이 실행하기
- docker run -p 8080:8080 -p 50000:50000 -v myvol-1:/var/jenkins_home jenkins/jenkins:2.138.4
Step5~9: 설치 확인하기
- localhost:8080으로 이동하여 설치 중에 나오는 어드민 비밀번호를 입력하여 suggested plugin 설치를 한다
Jenkins 비번: youjung-hong / jenkins
Step10: 젠킨스 업그레이드
- docker run -p 8080:8080 -p 50000:50000 -v myvol-1:/var/jenkins_home jenkins/jenkins:2.277.1
Step11: 젠킨스 재실행
- localhost:8080으로 이동
Step12: Job 생성하고 실행하기
- 빌드 명령어, 빌드 조건 등을 입력하여 CI/CD 할 수 있음
Step13: 또다른 젠킨스 실행하기
- 똑같은 볼륨을 공유하는 다른 젠킨스를 띠운다.
- docker run --name jenkins-production-copy -d -p 50001:50000 -p 8081:8080 -v myvol-1:/var/jenkins_home jenkins/jenkins:2.190.1
Step14: 볼륨 삭제
- docker volume ls
- docker volume rm {volume name}
- docker volume prune
Step15: 도커 컴포즈 파일로 볼륨 관리하기
```yml
services:
jenkins:
image: jenkins/jenkins:2.277.1
ports:
- 8080:8080
- 50000:50000
volumes:
- myvol-1:/var/jenkins_home
volumes:
myvol-1: # [docker-compose.yml이 있는 디렉터리]_myvol-1 이라는 볼륨이 생성됨
```
'인프라' 카테고리의 다른 글
카프카 클러스터 구성하기 (0) | 2023.09.17 |
---|---|
13. 도커 스웜-1 (0) | 2021.04.19 |
11. Docker Compose (0) | 2021.04.03 |
10. 도커 이미지 빌드 & 푸시 실습 (0) | 2021.03.30 |
8. 도커 이미지 배포 (0) | 2021.03.30 |