API 서버 등 백엔드 개발을 하게 되면 데이터베이스가 필수다. 당연히 로컬에 mysql을 설치한다.
이때 설치하는 방법은 여러가지다. 그냥 mysql 사이트에 가서 내려받고 설치해도 되고, macOS 사용자라면 brew로 설치하기도 한다.
단일 사용자라면 괜찮지만, 한 컴퓨터를 여러 사람이 쓰거나 서로 다른 용도로 쓸 경우 문제가 발생한다.
도커Docker가 유용한 상황: 멀티 유저
예를 들어 개인 계정은 A, 회사 업무용 계정은 B라고 하자.
A 계정에서 mysql을 brew로 설치했다. B 계정에서 brew로 뭔가 추가로 설치하려면 권한 설정 이슈가 빈번하게 발생한다. 또 서로 다른 계정인데도 데이터베이스도 함께 쓰게 된다. 물론 brew를 멀티 유저로서 문제 없게 쓰는 방법도 있지만 좀 번거롭다.
이때 램RAM과 저장공간이 충분하다면 도커를 쓰는 게 좋다. 램이 8GB라면 추천하지 않는다. 16GB는 컴퓨터 사양과 평소 무거운 프로그램을 얼마나 돌리냐에 따라 다를 거 같다.
도커로 mysql 컨테이너 만들기
일단 도커를 설치해야 한다. 운영체제에 맞게 설치한다.
설치가 끝났으면 도커를 실행한다.
터미널에서 아래 명령어로 mysql 컨테이너를 만들자.
$ docker run --name mysql-container \
-p 3306:3306 \
-h 127.0.0.1 \
-e MYSQL_ROOT_PASSWORD=password \
-v /Users/taptorestart/mysql:/var/lib/mysql \
-d mysql:8.0.29
run은 실행 명령어다.
--name 컨테이너명
-p 내컴에서 접속할 포트:컨테이너 내부 포트
-h 호스트 127.0.0.1
-e 환경변수 MYSQL_ROOT_PASSWORD=password 루트 패스워드를 설정 패스워드는 password
-v 볼륨 /Users/taptorestart/mysql 디렉터리가 /var/lib/mysql와 연결 /var/lib/mysql은 mysql 데이터가 저장되는 위치
-d 도커이미지 mysql:버전 버전은 8.0.29 사용
명령어를 실행
실행하고 접속한다. password는 password다.
데이터베이스와 테이블을 테스트 용도로 만든다.
앞에서 설정한 경로에 가보면 Mysql 파일을 볼 수 있다.
도커 mysql 컨테이너를 삭제한다.
다시 위 명령어를 실행한다.
다시 mysql에 접속해보면 여전히 데이터가 있는 것을 확인할 수 있다.
개발 중인 API 서버 데이터베이스 설정을
host: 127.0.0.1
user: root
password: password
로 하면 잘 작동한다.
비슷한 식으로 redis, postgresql 등 도커 컨테이너도 만들어서 쓸 수 있다.
여러 mysql 테스트
여러 mysql을 만들어서 테스트하고 싶다면, 아래처럼 이름과 포트를 다르게 해서 만들어서 테스트하면 된다.
$ docker run --name mysql-container1 \
-p 3307:3306 \
-h 127.0.0.1 \
-e MYSQL_ROOT_PASSWORD=password \
-v /Users/taptorestart/mysql:/var/lib/mysql \
-d mysql:8.0.29
$ docker run --name mysql-container2 \
-p 3308:3306 \
-h 127.0.0.1 \
-e MYSQL_ROOT_PASSWORD=password \
-v /Users/taptorestart/mysql:/var/lib/mysql \
-d mysql:8.0.29