Linux Mount를 이용한 Docker 이전 테스트 (redmine, jenkins 복원)
인스턴스 생성 후 30G 볼륨을 mount 후 docker 의 root directory를 mount 한 해당 볼륨으로 지정한 후 백업하는 방법을 알아보자.
EC2 생성
테스트용 인스턴스 생성
30G 볼륨 생성 (vol-LAB)
vol-LAB 볼륨 lab-test1 인스턴스에 연결
인스턴스에서 볼륨 연결 확인
ssh 접속 및 볼륨 mount
디스크 마운트 확인
xvdf 로 30G가 있지만 mount 되지 않아서 디스크에 반영이 안됨
디스크 초기화
최초 디스크 세팅 시에만 하면 됨. 해당 작업을 진행하면 디스크의 모든 데이터가 날라가니 주의.
/docker 경로에 해당 디스크를 mount 하기 위해 /docker 디렉토리 생성
/docker 경로에 /dev/xvdf 마운트
디스크 마운트 확인
자동 마운트 설정
서버가 꺼졌다가 켜져도 마운트 상태 유지를 위해 설정
UUID 확인
/etx/fstab 파일 수정
재마운트
docker 설치
Amaxon Linux 2023을 사용하기 때문에 해당 명령어를 통해 docker 설치
설치 버전 확인
docker 실행
# service docker status // docker 상태 확인
# service docker start // docker 실행
# systemctl enable docker // os 재부팅 시 docker 자동 실행 설정
docker-compose 설치
docker-compose 버전 확인
// docker-compose 최신 버전 설치
# curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
// 실행 권한 부여
# chmod +x /usr/local/bin/docker-compose
// link 생성
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
// version 확인
# docker-compose –-version
docker root directory 변경
docker root directory 확인
docker 재시작
오류 발생..
EC2 재부팅
똑같음.
Restart=no 설정
# vi /lib/systemd/system/docker.service
무언가 바꼈다. 실행은 잘 된다.
다시 daemon.json 설정 후 docker restart 시 오류 발생.
daemon.json을 통해서 root directory 변경에 실패하는 것 같다. daemon.json을 지우면 정상적으로 실행된다.
daemon.json 파일에 graph가 아닌 data-root 로 key 변경을 했더니 잘 된다.
변경된 docker root directory 확인
backup 관리 파일 생성
/docker 에 권한 설정
/docker/bakup에 jenkins, redmine, mariadb 백업 볼륨 이동
사용할 volume 생성
백업 tar 파일 volume 으로 데이터 이전
# docker run --rm -v jenkins_home:/target -v /docker/backup:/source ubuntu tar -xvf /source/jenkins_231108.tar -C /target
# docker run --rm -v redmine_plugins:/target -v /docker/backup:/source ubuntu tar -xvf /source/redmine-plugins_231108.tar -C /target
# docker run --rm -v redmine_files:/target -v /docker/backup:/source ubuntu tar -xvf /source/redmine-files_231108.tar -C /target
# docker run --rm -v mariadb_data:/target -v /docker/backup:/source ubuntu tar -xvf /source/mariadb-data_231108.tar -C /target
volume 데이터 확인
# docker run --rm -v redmine_plugins:/data ubuntu ls -l /data
# docker run --rm -v redmine_files:/data ubuntu ls -l /data
# docker run --rm -v mariadb_data:/data ubuntu ls -l /data
# docker run --rm -v jenkins_home:/data ubuntu ls -l /data
docker-compose
jenkins와 redmine을 각자 올리기 위해 두 개의 파일로 분리
redmine, mariadb 복원
redmine, mariadb docker-compose
# docker-compose.yml
version: '3.1'
services:
redmine:
image: redmine:latest
restart: always
container_name: redmine
ports:
- 3000:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: redmine
REDMINE_DB_DATABASE: redmine
REDMINE_DB_ENCODING: utf8
depends_on:
- db
volumes:
- redmine_files:/usr/src/redmine/files
- redmine_plugins:/usr/src/redmine/plugins
db:
image: mariadb:latest
container_name: mariadb
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: redmine
MYSQL_DATABASE: redmine
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- mariadb_data:/var/lib/mysql
- maraidb_conf:/etc/mysql/conf.d
volumes:
redmine_files:
redmine_plugins:
mariadb_data:
maraidb_conf:
redmine, mariadb docker-compose 실행
ip:3000 접속 시 레드마인 화면 확인
mariadb sql restore
# docker cp ./mariadb_data_231108.sql mariadb:/tmp // sql 파일 컨테이너로 복사
# docker exec -it mariadb sh // mariadb 컨테이너 쉘 접속
> mysql -u root -p redmine < /tmp/mariadb_data_231108.sql // sql restore
다시 접속 시 데이터 확인
근데, 여기서 volume 확인 시 내가 원하는 볼륨이 아닌 docker-compose_볼륨명 으로 볼륨이 새로 생겼다..
volume에 기존 볼륨을 사용한다는 설정 추가
기존 볼륨 사용은 됐는데.. 사진이 안불러와진다. 확인해보니 mount 파일들의 경로가 상위 디렉토리 경로까지 포함되어 있어 /usr/src/redmine/files 하위에 files 내용이 있어야 하는데 /usr/src/redmine/files/usr/src/redmin/files 가 되어버렸다.... 파일 백업부터 다시 진행한다.ㅎㅎ...
하위 디렉토리만 tar 압축
# docker run --rm --volumes-from [container_name] -v [tar 파일 저장 host 경로]:/backup ubuntu tar cvf /backup/[tar 파일명].tar -C [컨테이너 압축 경로] .
-C : 하위 디렉토리 대상
. : 현재 디렉토리
# docker run --rm --volumes-from redmine -v /home/docker/docker_backup/231106:/backup ubuntu tar cvf /backup/redmine-files_231108.tar -C /usr/src/redmine/files .
# docker run --rm --volumes-from redmine -v /home/docker/docker_backup/231106:/backup ubuntu tar cvf /backup/sqi_redmine-plugins_231106.tar -C /usr/src/redmine/plugins .
# docker run --rm --volumes-from mariadb -v /home/docker/docker_backup/231106:/backup ubuntu tar cvf /backup/mariadb-data_231108.tar -C /var/lib/mysql .
// plugins의 경우, 기존에 mount가 되어 있지 않아 host copy한 폴더 압축
# tar cvf ./redmine-plugins_231108-2.tar -C ./redmine_plugins/usr/src/redmine/plugins .
tar 압축 다시한 후 다시 volume 으로 복사 후 데이터 확인 시 맞는 경로 확인
기존 volume 에 작업을 했더니 덮어쓰기? 기존 데이터는 유지하고, 덮어써졌다. 그래서 다시 volume 새로 생성 후 작업 진행
docker-compose up -d로 실행 후 redmine_files 경로 데이터 확인
ip:3000 경로 접속 시 초기화면의 데이터가 보임
db sql dump 파일 restore 없이도 데이터가 복원됨.wow!!
jenkins 데이터 백업
# docker run --rm --volumes-from jenkins -v /home/ec2-user/docker:/backup ubuntu tar cvf backup/jenkins_231108.tar -C /var/jenkins_home .
tar 파일 서버로 이동
jenkins_home 볼륨 생성
jenkins tar 파일 jenkins_home volume 으로 복사
# docker run --rm -v jenkins_home:/target -v /docker/backup:/source ubuntu tar -xvf /source/jenkins_231108.tar -C /target
jenkins는 데이터량이 많아서 오래 걸린다.
데이터 확인
jenkins docker-compose
# docker-compose.yml - jenkins
version: "3.1"
services:
jenkins:
image: jenkins:latest
container_name: jenkins
restart: always
ports:
- 8080:8080
volumes:
- jenkins_home:/var/jenkins_home
volumes:
jenkins_home:
jenkins docker-compose 실행
스토리지 용량 부족으로 오류 발생
AWS > EC2 > EBS > 볼륨 vol-LAB의 스토리지 용량 증가 (30G -> 40G)
ssh 접속 시 디스크는 40G 이지만 30G만 mount 확인
xfs_growfs 명령어로 파티션 확장
docker-compose 재실행
jenkins 컨테이너를 만들기는 했지만 용량이 6G 남음.. 50G로 스토리지 용량 증량
oh.. EC2 과부화로 접속이 안된다...
볼륨 수정은 6시에 한번만 가능한가보다. 내일 해야지.
jenkins 실행 확인
모든 데이터 복원 확인!
인스턴스를 t2.micro 로 만들어서 docker container가 2개 이상이면 과부하가 걸린다. jenkins가 특히 cpu를 많이 잡는 것 같다.
mount 된 볼륨을 통한 서버 복원은 다음에 알아보자!