Docker 배포 최적화 및 DB 유지 1.08GB -> 340MB
기존 Docker 이미지의 크기가 1.08 기가 정도로 너무 컸던 문제가 있었다.
그걸 개선하고 컨테이너를 재실행하더라도 Database 내용을 유지할수 있도록 개선하려고 한다.
이를통해 1.0GB -> 340MB 로 이미지 사이즈를 최적화 할수 있었고, 배포 실행속도도 엄청나게 빨라졌다.
기존 상태
Dockerfile
docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
volumes:
- ./deploy/config/nginx.conf:/etc/nginx/conf.d/default.conf
- ./client/build:/usr/share/nginx/html
depends_on:
- app
ports:
- '80:80'
app:
build:
context: .
dockerfile: deploy/docker/server.Dockerfile
depends_on:
- db
environment:
TZ: 'Asia/Seoul'
volumes:
- ./server:/app
working_dir: /app
command: sh -c "yarn install && yarn build && pm2-runtime start dist/main.js"
networks:
default:
aliases:
- app
db:
image: mysql:latest
environment:
MYSQL_DATABASE: 'store'
MYSQL_USER: 'woowa'
MYSQL_PASSWORD: 'woowa'
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
TZ: 'Asia/Seoul'
networks:
default:
aliases:
- db
Dockerfile 개선
multi-stage 방식으로 Dockerfile 을 개선했다. 겸사겸사 파일명도 Dockerfile 로 변경했다.
docker-compose.yml 개선
volumes 매칭을 삭제하고, command 실행은 Dockerfile 에서 수행한다.
변경된 부분
app:
build:
context: .
dockerfile: deploy/docker/Dockerfile
depends_on:
- db
environment:
TZ: 'Asia/Seoul'
networks:
default:
aliases:
- app
여기까지 진행했을 때, 1.08GB 였던 app 이미지파일이 340MB 로 약 3분의 1로 축소됐다. 그리고 실행속도 또한 엄청나게 빨라졌다.
Database 개선
docker 컨테이너를 재실행해도 db 데이터가 남아있을 수 있도록 volume 마운트를 추가하고, mbind 에러를 방지하기 위해
cap_add: SYS_NICE 를 추가했다.
그리고, 임시로 workbench 를 통해 확인할수 있도록 ports를 개방했다. 또한, mysql latest로 된걸 현재 돌아가는 버전으로 명시하도록 변경했다.
아래 코드를 보면 cap_add: - SYS_NICE가 있다.
https://data-engineer-tech.tistory.com/27
이 옵션이 없었을 때 mbind: Operation not permitted 라는 경고메시지가 계속 출력되서 해결방안을 찾아봤다.
위 글을 보면 mbind는 리눅스 명령어로 메모리 범위에 대한 메모리 정책설정을 뜻하는데, 권한이 없어서 생기는 문제라고 예상한다고 한다. 그래서 그것에 대한 권한을 추가해준다.
변경된 부분
db:
image: mysql:8.0.26
environment:
MYSQL_DATABASE: 'store'
MYSQL_USER: 'woowa'
MYSQL_PASSWORD: 'woowa'
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
TZ: 'Asia/Seoul'
cap_add:
- SYS_NICE
volumes:
- ./deploy/data/mysql:/var/lib/mysql
ports:
- '33061:3306'
networks:
default:
aliases:
- db
Author And Source
이 문제에 관하여(Docker 배포 최적화 및 DB 유지 1.08GB -> 340MB), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cothis/Docker-배포-최적화-및-DB-유지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)