KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (507) N
    • CS (1)
    • Web (29) N
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • Next.js (5) N
      • ETC (1)
    • Docker (14)
    • Git (5)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • PS (432)
      • 백준 (187)
      • Programmers (105)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • codeup
  • 수학
  • C
  • 다이나믹 프로그래밍
  • string
  • js
  • Level1
  • LeetCode
  • Level 1
  • 문자열
  • tree
  • programmers
  • recursion
  • 정렬
  • Level 2
  • Level 0
  • 백준
  • C++
  • 제코베 JS 100제
  • 그래프

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

Docker로 MySQL 실행시켜보기 - 1
Docker

Docker로 MySQL 실행시켜보기 - 1

2025. 8. 6. 17:12

MySQL 이미지 다운로드하기

도커 컨테이너, 볼륨을 활용해서 MySQL을 한번 실행시켜보자.

그 전에, 먼저 이미지를 다운받아줘야 한다.

Docker Hub에 들어가서 MySQL 이미지를 먼저 검색해보자.

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Software supply chain Secure Your Supply Chain with Docker Hardened Images Use Docker's enterprise-grade base images: secure, stable, and backed by SLAs for Ubuntu, Debian, Java, and more. Regularly scanned and maintained with CVE remediation and long-term

hub.docker.com

 

mysql을 검색하고나서, 빨간 박스의 mysql 이미지를 클릭해주자.

 

클릭하면, mysql 이미지에 대한 설명이 나와있다.

조금만 밑으로 내리면 다음과 같이 이 이미지를 어떻게 사용해야 하는지 가이드가 나와있다.

 

위 이미지에서 명령어를 한번 봐보자.

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

 

이 명령어를 보면, MySQL을 처음 생성할 때 비밀번호를 뭘로 설정할 건지 입력해야 한다.

그래야 이 이미지가 정상적으로 실행된다.

 

만약, 비밀번호를 설정하지 않으면 어떻게 될까?

다음과 같이 정상적으로 다운로드 받아졌지만 `run`명령어를 사용했음에도 실행되지 않았다.

 

그래서, `docker ps -a`로 모든 컨테이너를 조회해보면,

중단된 mysql 컨테이너를 볼 수 있다.

 

디버깅 하기

그런데 왜 종료됐는지 알 수 없기 때문에,

지난 포스팅에서 배웠던 로그를 활용해서 디버깅을 해 볼 것이다.

2025.07.31 - [Docker] - 컨테이너 로그 조회하기

 

컨테이너 로그 조회하기

개요로그(log)는 굉장히 중요한 정보이다.흔히 디버깅 할 때, 디버깅 툴도 많이 이용하지만,간단히 디버깅 하기 위해서는 `console.log()` 같은 명령어도 많이 이용했다.지금 이 글을 작성하기 전까지

jun-coding.tistory.com

docker logs [CONTAINER ID]

에러 로그를 보면, 

"Database is uninitialized and password option is not specified" 라고 되어있다.

비밀번호 옵션이 정해지지 않아서 데이터베이스가 실행되지 않았다는 것이다.

 

그리고 그 바로 뒤에,

You need to specify one of the following as an environment variable:

- MYSQL_ROOT_PASSWORD

- MYSQL_ALLOW_EMPTY_PASSWORD

- MYSQL_RANDOM_ROOT_PASSWORD

라고 나오는데, 이 중에서 하나의 환경 변수를 설정하라고 나온다.

 

그래서 옵션을 설정해서 다시 실행해보자.

docker run -e MYSQL_ROOT_PASSWORD=[비밀번호] -d -p 3306:3306 mysql

그러면 위와 같이 컨테이너가 잘 실행중인 것을 볼 수 있다.

여기서 `-e` 옵션은 환경 변수를 설정하는 옵션이다.

`MYSQL_ROOT_PASSWORD` 라는 환경 변수를 읽어가서,

처음 환경 세팅을 할 때, 설정해준 비밀번호 값으로 MySQL을 세팅하도록 하는 것이다.

 

환경 변수도 잘 설정이 되었는지 알아보자.

`docker exec -it` 명령어를 통해서 컨테이너에 들어가준다.

그리고 다음 명령어로 설정한 환경변수를 조회해주면 된다.

echo $MYSQL_ROOT_PASSWORD

GUI로 연결 확인해보기(DBweaver 사용)

이렇게 확인까지 했으면, DB가 정상적으로 작동하는 것 처럼 보인다.

하지만, 좀 더 확실히 하기 위해 GUI로 확인해보자.

설치되어있는 MySQL Workbench나 여러 DB 툴 아무거나 사용해도 된다.

여기서는 'DBeaver' 라는 툴을 사용해보겠다.

https://dbeaver.io/

 

DBeaver Community | Free Universal Database Tool

DBeaver Universal Database Tool DBeaver Community is a free cross-platform database tool for developers, database administrators, analysts, and everyone working with data. It supports all popular SQL databases like MySQL, MariaDB, PostgreSQL, SQLite, Apach

dbeaver.io

 

운영체제에 맞게 다운로드 했으면, 실행시켜주면 된다.

실행하고, 왼쪽 위에 DB를 추가할 수 있는 버튼이 있다.

 

클릭해주면, 다음과 같은 여러 종류의 DB가 뜨는데

MySQL을 눌러주면 된다.

 

MySQL의 기본 Username은 'root'로 설정되어 있고,

Password 부분엔 설정해준 비밀번호를 눌러주면 된다.

그리고 하단의 'Test Connection'을 눌러주면 된다.

 

 

그러면, MySQL 드라이버가 없다고 다운로드 하라고 뜨는데 다운로드 해주자.

 

다운로드가 완료된 뒤,

다시 'Test Connection'을 해주면 아래와 같은 에러가 뜰 수 있다.

'Public Key Retrieval is not allowed'

이 에러는 MySQL 8.0 이상 버전에서 클라이언트, 즉 GUI 같은 툴로 DB 접속 시 나타나는 인증 방식 관련 에러이다.

이 에러는 보안 강화를 위해서 기본 인증 방식이 변경되었기 때문에 발생한다.

해결법은 다음과 같다.

먼저, 'Driver properties'에 들어간다.

 

비어있는 부분에 우클릭을 해서 'Add new property'를 눌러주자.

 

그 다음, 'allowPublicKeyRetrieval' 라는 property를 추가해주면 된다.

값은 true로 설정해주자.

 

그리고 다시 'Test Connection'을 눌러주면,

드디어 Connected가 뜨면서 연결이 잘 된것을 확인할 수 있다!

 

GUI로 연결 확인해보기 - 컨테이너 종료

이제 실행시켰을 때 연결은 잘 확인했으니,

컨테이너가 종료되었을 때도 어떻게 되는지 확인해보자.

먼저, 컨테이너를 종료시켜줌과 동시에 삭제까지 했다.

 

DBweaver에서 다시 'Test Connection'을 해보면,

'Connection refused'가 뜨면서 연결이 실패하는 것을 볼 수 있다.

 

마무리

지금까지의 과정을 그림으로 나타내면 아래와 같다.

 

 

하지만, 문제점이 하나 있다.

컨테이너를 종료시키고 삭제하거나,

새로운 컨테이너로 갈아끼우면 컨테이너 안에 있던 데이터가 모두 유실된다는 것이다.

 

따라서, 다음 포스팅부터는 '볼륨'을 통해서 이 문제를 해결해보도록 하겠다.

저작자표시 (새창열림)

'Docker' 카테고리의 다른 글

Docker로 MySQL 실행시켜보기 - 3  (0) 2025.08.06
Docker로 MySQL 실행시켜보기 - 2  (3) 2025.08.06
도커 볼륨이란?  (1) 2025.08.04
실행중인 컨테이너 내부에 접속하기  (2) 2025.07.31
    'Docker' 카테고리의 다른 글
    • Docker로 MySQL 실행시켜보기 - 3
    • Docker로 MySQL 실행시켜보기 - 2
    • 도커 볼륨이란?
    • 실행중인 컨테이너 내부에 접속하기
    KimMinJun
    KimMinJun

    티스토리툴바