커뮤니티 솔루션

영구 Docker 스토리지를 사용해 CasaOS에 MySQL 설치

A 2023 CasaOS tutorial introduced MySQL installation; current Docker Official Image guidance now defines versions, persistence, and initialization variables.

Docker 공식 이미지, 영구 /var/lib/mysql 볼륨, 명시적인 버전 태그를 사용하여 CasaOS에 MySQL을 설치하세요. 중요한 데이터베이스에 대해서는 오래된 2023년 스크린샷이나 부동 latest 태그에 의존하지 마세요.

2026년 9월 기준, 공식 Docker 이미지는 MySQL 8.4 LTS와 최신 9.x/Innovation 라인을 함께 제공합니다. 장기간 운영하는 셀프 호스팅 서비스에는 애플리케이션이 최신 메이저 버전을 명시적으로 지원하지 않는 한 8.4가 호환성을 위한 합리적인 기준입니다.

공식 MySQL 이미지 사용

현재 MySQL Docker 공식 이미지는 Docker 커뮤니티와 MySQL 팀이 관리합니다.

버전 태그를 신중하게 선택하세요

다음과 같이 고정된 메이저/LTS 태그를 사용하세요.

mysql:8.4

무작정 따르기보다 latest이는 호환성 변경이 적용된 더 새로운 메이저 릴리스로 이동할 수 있습니다.

영구적인 CasaOS 설정

  • 이미지: mysql:8.4
  • 컨테이너 포트: 3306
  • 영구 볼륨: 호스트 AppData 경로 → /var/lib/mysql
  • MYSQL_ROOT_PASSWORD: 강력한 부트스트랩 root 비밀번호
  • 선택 사항: MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD

인터넷에 포트 3306을 노출하지 마세요

같은 호스트에서 다른 Docker 앱이 MySQL을 사용해야 한다면 두 서비스를 공유 Docker 네트워크에 연결하고 서비스 이름을 사용하세요. 포트 3306을 외부에 공개할 필요가 없는 경우가 많습니다.

root 대신 애플리케이션 사용자 생성

사용 MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD 첫 초기화 중에 애플리케이션 전용 데이터베이스와 계정을 생성하려면 사용하세요.

관리 및 복구를 위해 root를 유지하세요.

첫 실행 환경 변수 이해하기

공식 이미지는 데이터 디렉터리가 비어 있을 때만 데이터베이스를 초기화합니다. 나중에 부트스트랩 환경 변수를 변경해도 기존 계정이나 데이터베이스가 자동으로 다시 작성되지는 않습니다.

논리적 덤프로 백업

이식 가능한 백업에는 다음을 사용하세요. mysqldump 또는 MySQL이 쓰기 작업을 수행하는 동안 활성 데이터베이스 파일을 복사하는 대신, 공식 이미지에 문서화된 덤프/복원 방식을 사용하세요.

서비스 이름으로 phpMyAdmin 또는 다른 앱 연결

공유 Docker 네트워크에서는 웹 앱이 다음과 같은 서비스/컨테이너 호스트 이름을 사용하여 MySQL에 연결할 수 있습니다. mysql다른 컨테이너 내부에서는 localhost 해당 컨테이너 자체를 가리킵니다.

Docker 네트워킹 가이드에서는 해당 컨테이너 네트워크 모델을 설명합니다.

다른 앱을 연결하기 전에 MySQL 상태를 확인하세요.

처음 시작한 후에는 즉시 운영 애플리케이션을 데이터베이스에 연결하지 마세요. 컨테이너 로그를 확인하고 MySQL이 초기화를 완료했으며 재시작 루프에 빠져 있지 않은지 검증하세요.

docker logs mysql
docker exec -it mysql mysqladmin -uroot -p ping

정상적인 서버라면 초기 데이터베이스 설정이 완료된 후 응답해야 합니다. 첫 부팅은 이미지가 시스템 테이블, 사용자 및 요청된 데이터베이스를 생성하므로 더 오래 걸릴 수 있습니다.

데이터를 가져오기 전에 문자 집합과 시간대를 계획하세요.

애플리케이션에는 특정 데이터 정렬, 문자 집합 또는 시간대 요구 사항이 있을 수 있습니다. 기존 데이터베이스를 마이그레이션하는 경우 가져오기 전에 이전 서버의 MySQL 메이저 버전과 구성을 비교하세요.

컨테이너가 시작된다는 이유만으로 MySQL 8.0에서 테스트된 애플리케이션이 MySQL 9.x를 자동으로 지원한다고 가정하지 마세요. 애플리케이션 공급업체가 요구하는 메이저 버전을 고정하세요.

일반 공유 폴더와 데이터베이스 스토리지를 분리하세요.

MySQL 데이터 파일은 권한이 일관되고 지연 시간이 낮은 신뢰할 수 있는 로컬 스토리지에 있어야 합니다. 저장하지 마세요. /var/lib/mysql 용량이 더 크다는 이유만으로 신뢰할 수 없는 SMB 마운트나 이동식 드라이브에 저장하지 마세요.

CasaOS 호스트에 SSD와 더 큰 HDD 풀이 있다면, SSD가 데이터베이스 위치로 더 적합한 경우가 많습니다. 예약된 덤프는 더 큰 백업 스토리지로 복사할 수 있습니다.

FAQ

mysql:latest를 사용해야 하나요?

운영 환경과 유사한 자체 호스팅에서는 명시적인 메이저/LTS 태그를 사용하는 것이 좋습니다. 그래야 일반적인 pull 작업으로 메이저 버전이 예기치 않게 올라가지 않습니다.

MySQL 데이터는 어디에 영구 저장해야 하나요?

호스트의 AppData 폴더를 다음 위치에 매핑하세요. /var/lib/mysql.

3306 포트를 게시해야 하나요?

같은 Docker 네트워크의 다른 컨테이너만 데이터베이스에 연결해야 하는 경우에는 필요하지 않습니다.

나중에 컨테이너 변수를 편집하여 MYSQL_ROOT_PASSWORD를 변경할 수 있나요?

초기화 후에는 안정적으로 변경할 수 없습니다. 기존 데이터베이스 계정은 MySQL 자체에서 관리하세요.