
목표:
docker-compose.yml 을 작성하여 OS 와 호환되지 않는 MySQL 구버전을 설치하고 mySQL 에서 user 계정을 관리할 수 있습니다.
들어가며
최신 버전 mySQL 의 경우에는 ARM 칩셋을 지원하기 때문에 docker pull 기능을 사용해서 쉽게 도커로 mySQL 을 실행시킬 수 있지만 애플 실리콘 칩셋 버전과 호환되지 않는 구버전인 경우 그렇게 해도 제대로 실행되지 않는 문제가 있습니다.
저같은 경우에는 M2 맥북으로 Live 서버의 버전과 맞추어서 개발을 진행해야하는데, 라이브 서버에서 사용하는 mySQL 버전이 5.7 구버전이라 곤란했던 적이 있었습니다.
그래서 유저의 실행 환경에 구애받지 않고 낮은 버전의 mySQL 을 실행할 수 있도록 docker-compose 를 사용하여 해결하였는데요, 해당 과정을 정리해보았습니다.
설치 방법
- docker-compose.yml 파일을 아래 내용으로 생성합니다.
이때 로컬 환경의 포트번호의 경우에는 13306으로 설정하였고, 사용한 mySQL 버전은 5.7 입니다.
version: '3'
services:
local-db:
image: library/mysql:5.7
container_name: mysql-container
restart: always
ports:
- 13306:3306
environment:
MYSQL_ROOT_PASSWORD: password
TZ: Asia/Seoul
volumes:
- db-data:/db/mysql/data:/var/lib/mysql
- db-data:/db/mysql/init:/docker-entrypoint-initdb.d
platform: linux/amd64
volumes:
db-data:
- 컨테이너 생성 및 실행해줍니다.
$ docker-compose -f docker-compose.yml up -d
- 도커 컨테이너에 접속합니다.
docker exec -it mysql-container /bin/bash
- 도커 내 DB 접속에 접속하여 mySQL root 계정으로 로그인합니다.
$ mysql -u root -p
$ Enter password: 비밀번호입력
yaml 에 적어둔 비밀번호 입력 (password
)
- 접속 종료 명령어 정리
# mySql 종료하는 법
mysql> $ exit;
# 도커 bash 종료하는 법
$ exit 0
- DB 사용자 추가하기
# localhost 에서만 접속 가능한 계정 생성
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> FLUSH PRIVILEGES;
# 모든 DB, 테이블에 접속 가능한 계정 생성
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'%' IDENTIFIED BY 'YOUR_PASSWORD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'%';
mysql> FLUSH PRIVILEGES;
# 예시
mysql> USE mysql;
mysql> CREATE USER 'dorito'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'dorito'@'%';
mysql> FLUSH PRIVILEGES;
이렇게 참고해서 진행하신다면, 잘 마무리 되었습니다.
참고 사이트
[Database] docker-compose 로 MySQL 설치하기
[Mysql] Docker mysql 5.7 버전 설치 (MacbookPro M1)
[Docker CE] 도커 디렉토리 마운트 설정 에러 (Error response from daemon: invalid volume specification) :: Nirsa
docker compose에서 서로 다른 container가 같은 volume을 공유하는 방법 | by Su Bak | Medium
[TL;DR] 글을 마치며
추가적으로 Docker 어플리케이션 설정에서 Docker 이미지 실행환경을 관리하고, 자동 실행되게 데몬 프로세스로 띄워놓는 것을 권장드립니다.
언제든 피드백 댓글 환영입니다.
읽어주셔서 감사합니다 :D