본문 바로가기
🔧 Tools

Docker에서 MySQL 설치 및 접속

by iirin 2023. 3. 1.

Spring 복습을 위한 미니 프로젝트르 세팅하며, Docker에서 MySQL 세팅을 다시 해보았다.
이 과정은 왠지 많이 쓰일 것 같으므로, 앞으로를 위해 또 저장 👀

해당 설정은 Mac OS Ventura 13.2.1(22D68) 에서 실행되었습니다.

 

왜 도커 Docker 로 MySQL을 실행하는 것이 좋을까?

사실 이전까지 MySQL을 로컬에서 설치하고 실행시켜왔습니다. 그러나 이러한 방법은 여러 문제점이 있습니다. 가장 단적인 예시는 MySQL을 버전 별로 관리하거나 여러 개의 인스턴스를 만들어 사용하고자 할 때 매우 불편하고, MySQL 버전이나 로컬 환경이 변하면 MySQL 세팅을 다시 해야하는 것이죠.


무엇보다 MySQL은 삭제가 참 번거로워서 로컬에서 지우고 다시 설치하고 싶다하여도 깔끔하게 새시작이 불가능합니다 🤦‍♀️

 

하지만 Docker 는 휴지통 버튼 하나면 모든 새로운 시작이 가능합니다 🌝

 

생활코딩에서는 도커를 빗대 스마트폰 어플리케이션을 예시로 들고 있는데요.
우리가 앱스토어에서 필요한 프로그램을 다운 받는 것과 비슷하게 도커도 도커 허브에서 필요한 이미지를 다운로드(혹은 pull)받고 컨테이너가 이를 실행하게 됩니다.

 

 도커의 구체적인 장점은 다음과 같습니다. 참고링크

  1. 쉽게 이식할 수 있습니다.
    • 도커를 사용하면 컨테이너를 패키징하여 Docker를 지원하는 모든 환경으로 쉽게 이동하고 배포할 수 있습니다. 특, 기본 호스트 운영체제나 하드웨어에 관계 없이 정확히 동일한 환경에서 애플리케이션을 개발하고 배포할 수 있는 것입니다.
  2. 일관된 버전으로 작업할 수 있습니다.
    • 각 개발자가 로컬 컴퓨터에 따로 MySQL을 설치하고 구성할 필요가 없어집니다. 각자 설치하고 구성하다보면 시간도 많이 걸릴 뿐더러 오류가 발생하거나 설정이 달라지기 쉽습니다. 같은 버전의 MySQL을 같은 환경에서 사용할 수 있게 되는 것이지요.
  3. 로컬에 영향을 미치지 않습니다.
    • Docker의 컨테이너는 로컬과 격리되어 있습니다. MySQL 에 대한 설정 수정은 컨테이너에게만 영향을 미치고 운영체제에 영향을 받거나 미치지 않아 다른 설정이나 애플리케이션과 충돌이 날 일이 없습니다.
  4. 확장하기 쉽습니다.
    • MySQL 컨테이너의 여러 인스턴스를 실행하여 애플리케이션을 쉽게 확장(Scale out)할 수 있습니다.
  5. 손쉽게 설정이 가능합니다.
    • Docker는 MySQL 환경을 설정하는 일관된 방법을 가집니다.

 

도커는 오른쪽 그림과 같습니다. (출처 :  https://blog.mikesir87.io/2017/05/docker-is-not-a-hypervisor/)

 


 

본격적으로 Docker를 사용하여 MySQL을 설치 + 접속해보자

1. brew cask로 Docker 설치하기

brew caskDocker Desktop on Mac 도커를 설치해주며, docker-compose,docker-machine을 같이 설치해줍니다. 맥 OS에서 띄우기 때문에 가상 머신에서 포트 포워딩을 할 필요가 없습니다.


만약 brew cask가 없다면 터미널에서 간단히 명령어로 설치할 수 있습니다. brew install cask

 

이후 터미널에서 계속 도커를 설치합니다.

brew install --cask docker

 

 물론 Docker 홈페이지에 접속하여 자신의 OS에 맞는 Docker를 내려 받아 설치할 수도 있습니다.

 

이제 귀여운 도커 아이콘이 생겼습니다 👏

 


 

2. MySQL Docker 이미지 다운로드

간편한 GUI를 이용하는 방법과 CLI를 이용하는 방법 두 가지 중 하나를 선택해서 진행하면 됩니다.

Docker Desktop 을 이용하는 방법

  • GUI인 Docker Desktop 에서도 작업이 가능합니다.

Search 에서 검색만 하면 됩니다.

  • `Images` 탭을 보면 pull 받을 수 있는 버전을 확인할 수 있고, 원하는 버전에 대해 Pull 혹은 Run 버튼을 누르면 됩니다.

Terminal 에서

다음의 명령어로 MySQL Docker 이미지를 다운로드(pull) 합니다.
태그에 버전을 지정하지 않으면 최신 버전을 자동으로 다운로드하고, 버전을 지정하려면 태그에 작성해주면 됩니다.

// 최신 버전
docker pull mysql

// 버전 지정
docker pull mysql:8.0.22

// 다운로드한 이미지 확인
docker images

3. 이미지로 컨테이너 생성 및 실행하기

이미지를 받은 후에 바로 쓸 수 있는 것은 아닙니다. 컨테이너를 생성하고 실행시켜주어야 합니다.

Docker Desktop

  • images 탭에서 원하는 이미지 Actions 버튼을 눌러주면 됩니다.

  • 그러나 저는 MySQL root의 비밀번호를 설정하지 못해 자꾸 에러가 나더라고요. 그래서 CLI 방식을 더 선호합니다.

 

Terminal 에서

// docker run --name {컨테이너이름} -e MYSQL_ROOT_PASSWORD={패스워드} -d -p 3306:3306 mysql:latest
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 mysql:latest

// 컨테이너 리스트 출력
docker ps -a

// 컨테이너 시작, 중지, 재시작
docker stop mysql-container

docker start mysql-container

docker restart mysql-container

container가 돌아가는 모습을 확인할 수 있습니다.

 

4. Docker bash 접속하기

터미널에서 계속 다음의 명령어로 Docker bash에 접속할 수 있습니다.

# docker exec -it {컨테이너 이름} bash
docker exec -it mysql-container bash

 

5. MySQL 접속

mysql -u root -p
# 이후 패스워드 입력

 


 

ref.