< DevOps >/Docker

#1. MySQL Docker 도커 이미지 설치하기 - 아직도 직접 설치하시나요? 시리즈

Chipmunks 2022. 1. 18.
728x90

 

안녕하세요. 다람쥐입니다.

매 번 새 환경에서 MySQL 를 설치받는 것은 매우 귀찮은 일이었는데요~

맥에서는 터미널로 이런저런 명령어를 쳐야하고, 윈도우에서도 설치 마법사로 설치하고 필요하다면 명령 프롬프트로 명령어를 입력해야했죠..! 또한 MySQL 실행 데몬 및 서비스를 백그라운드에 늘 켜놓아야 했고요!

개발 프로젝트가 많으면 많을수록 로컬호스트에 있는 MySQL DB 의 테이블은 엄청 많아지는데요,

만약 프로젝트마다 팀 공용으로 셋팅한 MySQL Localhost 의 계정 정보가 다르다면... 매 번 바꿔줘야 해서 여간 귀찮은 일이 아니었습니다.

 

골치 아프고 귀찮은 MySQL 설치를 Docker 로 MySQL 이미지를 내려받아 컨테이너로 만들면, 위 문제를 단 번에 해결할 수 있습니다!

 

1. 도커 설치하기

Mac 용으로는 공식 홈페이지에서 Docker for Desktop 을 설치합니다. Windows 용과 Linux 용으로도 지원합니다.

도커 홈페이지 링크 : https://www.docker.com/products/docker-desktop

 

Docker Desktop for Mac and Windows | Docker

Learn why Docker Desktop is the preferred choice for millions of developers building containerized applications. Download for Mac or Windows.

www.docker.com

도커 데스크탑은 윈도우, 맥 운영체제에서 도커를 사용할 수 있도록 docker, docker-compose 모두 포함되어 있습니다.

GUI 환경을 제공하고 있습니다.

Docker Desktop 초기 화면

 

2. MySQL Docker 이미지 다운로드

docker pull mysql 명령어로 최신 버전의 MySQL 이미지를 내려받을 수 있습니다.

$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
bb79b6b2107f: Pull complete
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
a56aca0feb17: Pull complete
de9d45fd0f07: Pull complete
1d68a49161cc: Pull complete
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

내려 받을 수 있는 MySQL 버전은 Docker Hub MySQL 페이지의 Tags 에서 확인이 가능합니다.

MySQL 8 버전 뿐 아니라, 5.7 버전과 같이 이전 버전의 이미지도 내려받을 수 있습니다.

링크 : https://hub.docker.com/_/mysql/?tab=tags 

 

mysql Tags | Docker Hub

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

혹시 맥북 M1 칩셋이라면, docker pull 명령어가 아래와 같은 오류로 잘 되지 않을텐데요~

no matching manifest for linux/arm64/v8 in the manifest list entries 오류가 발생했다면 --plaform 옵션으로 linux/amd64 값을 같이 넣어줘야 합니다.

$ docker pull mysql:8.0.22
8.0.22: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries

$ docker pull --platform linux/amd64 mysql
Using default tag: latest
latest: Pulling from library/mysql
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

docker-compose.yml 을 사용하신다면, platform: linux/amd64 를 추가해주면 M1 칩셋 환경에서도 설치가 됩니다.

 

3.  내려 받은 MySQL 도커 이미지를 확인

아래 터미널의 명령어로 내려 받은 Docker 이미지 목록을 확인할 수 있습니다.

$ docker images
REPOSITORY                          TAG       IMAGE ID       CREATED       SIZE
mysql                               latest    3218b38490ce   3 weeks ago   516MB

또는 Docker Desktop 에서 Local 호스트에 저장된 이미지를 Images 메뉴에서 확인할 수 있습니다.

mysql 이미지 설치

 

4. 내려 받은 이미지를 컨테이너 생성 & 실행

내려 받은 이미지를 Docker 컨테이너로 만들어 실행합니다.

컨테이너로 만들 때 원하는 이름과 여러 MySQL 초기 설정을 넣어줘야 합니다.

따라서 터미널 또는 명령 프롬프트로 docker run 명령어로 컨테이너를 실행해야 합니다.

 

$ docker run --name <컨테이너 이름> -e MYSQL_ROOT_PASSWORD=<비밀번호> -d -p <접근할 포트>:3306 mysql:latest

--name 옵션에 들어갈 컨테이너 이름을 자유롭게 설정해주시면 됩니다.

저는 사용할 프로젝트 이름에 맞춰 작성합니다. 예를 들어, moti-mysql 등으로 작성했습니다.

 

MYSQL_ROOT_PASSWORD 옵션의 경우 MySQL root 계정의 초기 비밀번호를 설정합니다.

또는 비밀번호를 설정하고 싶지 않다면 MYSQL_ALLOW_EMPTY_PASSWORD=yes 설정으로 변경합니다.

랜덤 비밀번호 설정은 MYSQL_RANDOM_ROOT_PASSWORD=yes 설정으로 할 수 있습니다.

기타 환경 설정은 Docker Hub MySQL Description 페이지에서 확인해주세요.

Docker Hub MySQL 페이지 링크 : https://hub.docker.com/_/mysql/?tab=description&page=1 

마찬가지로 M1 칩셋의 경우 --platform linux/amd64 옵션을 -e 옵션 앞에 작성합니다.

$ docker run --platform linux/amd64 --name <컨테이너 이름> -e MYSQL_ROOT_PASSWORD=<비밀번호> -d -p <접근할 포트>:3306 mysql:latest

 

5. 실행된 컨테이너 확인

실행된 컨테이너는 다음 명령어로 확인할 수 있습니다.

$ docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS                  PORTS                               NAMES
8ac7ea5fdcbf   mysql:latest           "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes            3306/tcp   mysql-container

또는 Docker Desktop 에서 아래와 같이 확인할 수 있습니다.

로컬 호스트에 설치된 MySQL 컨테이너

참고로 저는 이미 3306 포트로 실행된 컨테이너가 하나 있어, 로컬 환경과 연결할 포트를 3307 으로 변경하였습니다.

만약 오류가 있어 실행되지 않는다면, Docker Desktop 에서 MySQL 컨테이너가 비활성화 될텐데요.

RUNNING 상태가 아니라, EXITED 상태가 되고, 아이콘도 회색의 아이콘으로 변경됩니다.

그럴 때는 해당 컨테이너를 클릭하면 자세한 실행 로그를 확인할 수 있는데요~

어떤 오류가 발생했는지 로그를 복사하여 구글에 검색하시면 해결법이 나올겁니다.

 

6. MySQL Docker 컨테이너 시작 & 정지 & 재시작

명령어로 Docker 컨테이너를 시작하고 정지하고 재시작하는 것은 다음 명령어로 쉽게할 수 있습니다.

# MySQL Docker 컨테이너 중지
$ docker stop mysql-container

# MySQL Docker 컨테이너 시작
$ docker start mysql-container

# MySQL Docker 컨테이너 재시작
$ docker restart mysql-container

Docker Desktop 에서는 컨테이너 옆 버튼으로 쉽게 실행하고 정지할 수 있습니다.

 

7. MySQL Docker 컨테이너에 접속

마지막으로 MySQL 에 직접 접속해야할 때가 있을텐데요~

docker exec 명령어로 bash 쉘에 접속할 수 있습니다.

$ docker exec -it mysql-container bash
root@8ac7ea5fdcbf:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

또는 Docker Desktop 에 CLI 버튼으로 Bash 에 접속한 터미널 창을 띄울 수 있습니다.

마무리

여러분의 컴퓨터 구석 구석에 알뜰살뜰 지저분하게 파일을 남기는 데이터베이스나, 개발 환경을 직접 설치하지 마시고

어서 한시라도 빨리 도커로 넘어오시기 바라겠습니다!

 

다음 문서를 참고하여 작성하였습니다.

다른 시리즈 글 보러가기

 

댓글