본문 바로가기

IT 지식

[Docker] Docker로 MySQL설치하고 접속하기

# 1. Docker 설치

  • https://www.docker.com/get-started/에서 OS 및 환경에 맞는 Docker Desktop을 설치한다.
  • 설치 후, Docker를 실행하면 고래선 모양의 아이콘이 생긴다.

 

Docker를 실행하지 않고 Docker기능을 사용하려하면
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
의 에러메시지를 만나므로, 반드시 실행해준다.

 

 

설치가 완료된 후에  다음 명령어를 실행하여 버전을 출력해보자.

 docker -v 
Docker version 20.10.8, build 3967b7d

 

 

# 2 . MySQL Docker 이미지 다운로드

docker pull mysql 명령어를 사용하면  MySQL Docker 이미지를 다운로드 받을 수 있다.

태그에 버전을 설정하지 않으면 default로 최신버전(latest)을 받는다.

 

MySQL 버전을 지정하려면 tag에 버전을 지정해준다.  지원하는 MySQL 버전은 https://hub.docker.com/_/mysql/?tab=tags

페이지에서 확인할 수 있다.

 

예를들어 MySQL 8.1.2 버전을 다운로드 하려면 다음과 같이 입력하면 된다.

docker pull mysql:8.1.2

 

## 다음 명령어로 다운로드한 Docker 이미지를 확인할 수 있다.



# 3. MySQL Docker 컨테이너 생성 및 실행

  • 호스트의 /Users/{내계정}/datadir 디렉토리를 컨테이너의 /var/lib/mysql 디렉토리로 마운트
  • docker에 mysql과 같은 DB를 설치하는 경우 컨테이너 삭제와 함께 데이터도 날라가므로, 저장소는 반드시 외부 저장소를 사용한다.

ex) -v /Users/jmlim/datadir:/var/lib/mysql

 

현재 3306 포트를 사용중이므로 3307 포트를 이용하겠다.

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<PASSWORD> -d -p 3307:3307 mysql:latest

터미널을 이용하면 위와 같은 명령어로 컨테이너를 올릴 수 있다.

 

하지만 아래와 같이 docker-compose.yml 파일을 만들어 실행하면

장황한 도커 옵션을 한 눈에 볼 수 있어 편리하다.

 

1 ) docker-compose.yml 파일 생성.

version: "3" # 파일 규격 버전
services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의
  db: # 서비스 명
    image: mysql:latest # 사용할 이미지
    container_name: mysql-container # 컨테이너 이름 설정
    ports:
      - "3307:3307" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
    environment: # -e 옵션
      MYSQL_ROOT_PASSWORD: "password"  # MYSQL 패스워드 설정 옵션
    command: # 명령어 실행
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci  # 한글이 깨지지 않도록 설정하는 인자값
    volumes:
      - /Users/choichangho/datadir:/var/lib/mysql # -v 옵션 (다렉토리 마운트 설정)

 

 

2 )docker-compose.yml 파일 실행.

  • docker-compose.yml 작성한 위치에서 실행
  • 백그라운드로 실행 시 옵션 -d 붙이면 됨.
    • 자세한건 옵션 참고
docker-compose up -d

 

# 4. Docker 컨테이너 목록 출력

docker ps -a

 

# 5. MySQL Docker 컨테이너 시작/ 중지/ 재시작

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

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

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

 

# 6. MySQL 서버 접속

로컬에서 mysql를 설치하고 접속하는 방법과 동일.
패스워드는 MySQL 컨테이너를 실행할 때 지정한 정보를 입력한다.

 

$ docker exec -it mysql-container bash
root@f3af78fa6428:/#mysql -u root -p

mysql>

위의 화면이  나오면 MySQL 서버 접속에 성공했다.

 

 

# 7. 데이터베이스와 사용자를 생성하고 (컨테이너 내에서) MySQL에서 권한을 부여한다.

  • changho 라는 사용자를 생성하고, 모든 권한을 부여한다.
  • 변경된 권한 적용

중요 : 컨테이너 외부에서 MySQL에 로그인도 가능해야 하므로 changho@localhost에서 localhost 대신 %를 사용한다.

mysql> CREATE USER 'changho'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'changho'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit

 

🛵 MySQL 기본 사용법

다른 토이 프로젝트를 진행했던 data를 끌고와서  db를 조회 해보자

 

✓Database 목록 조회하기

show databases;

 

 

 

 

✔️Database 사용하기

use {database_name};

 

 

 

✔️Database 의 table 목록 조회하기

show tables;

 

 

✔️table의 describe 보기

desc {table_name};

 

desc {table_name}\G;

\G 옵션을 뒤에 붙이면 상세한 결과값을 볼 수 있따. 

가끔 \G 옵션을 넣지 않아 한 열에 모든 내용을 다 출력해버린다면 쿼리문 결과를 확인하기 불편하기 때문에 많이 사용되는 옵션이다.

 

 

✔️table의 쿼리 확인(조회)하기

table의 create 쿼리를 확인하는 경우,

\G 옵션을 이용하면 결과값을 훨씬 보기 편하게 출력할 수 있다.

show create table {table_name}\G;

 

 

✔️table column 조회하기 

테이블의 내용들을 조회하고 싶다면 select 문을 이용하자

select * from {table_name};

 

✔️MySQL 종료

exit quit 명령어 모두 MySQL을 종료할 수 있다. 

 

 

Docker MySQL 해당 컨테이너를 아예 종료하고 싶다면? exit 명령어를 통해 종료할 수 있다.

'IT 지식' 카테고리의 다른 글

[Docker] Docker-Compose 매커니즘 이해하기  (0) 2022.12.02
[Docker] docker-compose 설치하기  (0) 2022.12.01
MVC 웹 프레임워크란?  (1) 2022.12.01
[Docker] Docker란 무엇인가?  (0) 2022.11.30
데이터란?  (0) 2021.10.25