Docker

Linux Mount를 이용한 Docker 이전 테스트 (redmine, jenkins 복원)

J1Eun 2023. 11. 7. 17:10
인스턴스 생성 후 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 된 볼륨을 통한 서버 복원은 다음에 알아보자!