현재 사내에서
racktables
을 사용하고 있는데요.
Docker
를 사용하면 장애발생 시 빠르게 복구할 수 있는 장점이 있습니다.
1. Dockfile 로 부터 Image Build.
Dockfile 위치에서 image를 build 합니다.
$ docker build -t racktables-test .
2. Build 된 Image 확인
정상적으로 작업이 끝나면 하기 명령어로 Image를 확인합니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
racktables_test latest c0f598aece7e 37 seconds ago 597 MB
docker.io/centos centos6 d0957ffdf8a2 11 months ago 194 MB
3. Build 된 이미지로 부터 Container 실행
저는 외부에서 접근시 7777포트를 사용합니다.
(사용하고자 하는 포트를 입력하시면 됩니다.)
$ docker run -d -p 7777:80 --name racktables c0f598aece7e
4. Container 확인
Container가 정상으로 올라오면 아래와 같이 확인이 됩니다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26e140d4411d c0f598aece7e "/bin/sh -c '/usr/..." 10 minutes ago Up 10 minutes 0.0.0.0:7777->80/tcp racktables
5. Browser에서 접속
브라우저 주소창에서 ip-address 에는 현재 서버의 ip를 입력.
http://<ip-address>:7777/?module=installer
6. 설치 진행
브라우저에서 설치를 진행합니다.(총 7단계로 진행이 됩니다.)
7. Brower에서 설치진행
설치 진행 중 하기와 같은 메세지가 출력이되면 8번 container 접속파트를 참고하세요.
” chown nobody:nogroup secret.php; chmod 400 secret.php”
8. Container 접속하여, 파일 속성 변경
아래와같이 container에 접속 후 파일의 속성을 변경한 후 다음단계로 진행합니다.
$ docker exec -it 26e140d4411d /bin/bash
26e140d4411d>$ chown apache:apache /var/www/html/inc/secret.php
26e140d4411d>$ chmod 400 /var/www/html/inc/secret.php
9. Docker에서 Data 복구 및 백업 방법
장애가 발생했다는 가정하에서 평소 백업해 두었던 sql 파일로 복구진행을 하면 됩니다.
추후 Docker를 사용하여 계속 사용할 것을 생각하여 복구, 백업 모두 기록해 놓았습니다.
Docker MySQL 복구
$ cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=$PASSWORD DATABASE [--max_allowed_packet=16G]
Docker MySQL 백업
$ docker exec CONTAINER /usr/bin/mysqldump -u root --password=$PASSWORD DATABASE > backup.sql
10. Data 복구 ERROR 발생시 Trouble Shooting
하기와 같은 에러가 발생하게 되면,
ERROR 1153 (08S01) at line 522: Got a packet bigger than 'max_allowed_packet' bytes
Docker내에 실행된 mysql에 접속하여 mysql set 변경을 합니다.
mysql> set global max_allowed_packet=1000000000;
mysql> set global net_buffer_length=1000000;
Dockerfile 안에서 이 부분은 설정해 보았으나 안되서 수동으로 진행했네요.
11. Docker MySQL 복구
9단계에서 실패한 복구 과정을 다시 실행하면 복구가 잘되는 걸 확인할 수 있습니다.
$ cat racktables_db.sql | docker exec -i 26e140d4411d /usr/bin/mysql -u root --password= racktables_db
12. Browser 에서 접속 및 확인
로그인시 계정과 패스워드도 함께 복구가 되므로 기존사용하던 계정, 패스워드가 있을경우 기존계정을 입력하시면 됩니다.