Docker MySQL 개발환경을 셋팅해보자

Belluga·2021년 9월 11일
0

MySQL 이미지 가져오기

docker pull mysql

pull 명령어를 통해 docker hub에서 MySQL 이미지를 가져옵니다.

docker images

images 명령어를 통해 가져온 이미지 목록을 확인할 수 있습니다.
version을 명시해주지 않으면 가장 최신버전을 가져오는데 2021년 8월 기준으로는 5.7 버전이네요.

docker-compose.yml 파일 작성하기

일반적인 시스템은 하나의 애플리케이션만으로 구동 되지 않습니다.
여러 개의 애플리케이션이 서로 의존성 있게 구성되어 시스템이 이뤄져 있습니다.
흔히 하나의 컨테이너가 하나의 애플리케이션을 담당한다고 하면 여러 개의 컨테이너가 필요로 합니다.

docker-compose 파일을 통해 여러 개의 컨테이너를 한 번에 관리할 수 있습니다.
현재는 MySQL 하나의 컨테이너만을 실행하지만 추후 추가적인 컨테이너를 관리할 수 있기 때문에 docker-compose.yml 파일을 작성하도록 하겠습니다.

version: '2'

services:
 mysql:
  image: mysql:5.7
  volumes:
   - ./jagoga-mysql-volume:/var/lib/mysql
  restart: always
  container_name: mysql_db
  environment:
   MYSQL_ROOT_PASSWORD: password를 지정해주세요.
   MYSQL_DATABASE: jagoga_db
   MYSQL_USER: admin
   MYSQL_PASSWORD: password를 지정해주세요.
  ports:
   - "3307:3306"

컨테이너 종료 후 다시 생성하여 실행할 때 별도의 volume 마운트를 하지 않았다면 컨테이너 종료시 모든 데이터가 함께 삭제됩니다.

volumnes 설정을 통해 host 디렉터리(./jagoga-mysql-volume)와 실제로 데이터가 저장되는 컨테이너 디렉터리(/var/lib/mysql)를 연결해주면 데이터가 유실되지 않습니다.

컨테이너 실행하기

방금 작성한 docker-compose 파일로 docker-compose up 명령어를 통해 간단하게 컨테이너를 실행할 수 있습니다.

작성한 docker-compose 파일 경로로 이동하여 명령어를 입력해주세요.

도커 데스크탑을 통해 컨테이너가 실행되는 것을 확인할 수 있습니다.

데이터베이스 및 테이블 생성하기

exec 명령어 또는 도커 데스크탑 CLI 버튼을 통해 실행중인 도커 컨테이너에 접속해줍니다.

docker compose에 지정한 계정으로 mysql 서버에 접속해줍니다.

docker-compose.yml 파일에 MYSQL_DATABASE 옵션을 통해 지정한 jagoga_db가 만들어져있는 것을 확인할 수 있습니다.

[1] use jagoga_db
[2]

create table USERS (
    user_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255),
    name VARCHAR(30),
    password VARCHAR(30),
    phone VARCHAR(20),
    role VARCHAR(10),
    created_at DATETIME,
    updated_at DATETIME,
    UNIQUE INDEX (email)
) engine=InnoDB default character set = utf8;

DDL 명령어를 통해 테이블을 생성해줍니다.

애플리케이션에서 사용하기

spring:
  datasource:
    url: jdbc:mysql://localhost:3307/jagoga_db?serverTimezone=UTC&characterEncoding=UTF-8
    username: admin
    password: 지정한 password
    driver-class-name: com.mysql.cj.jdbc.Driver

데이터베이스를 연동할 프로젝트의 yml 파일을 다음과 같이 설정하였습니다.

데이터 확인

데이터가 정상적으로 저장되는지 확인하기 위해 데이터 하나를 삽입해놓았습니다.
저는 mysql workbench를 사용하여 데이터를 확인해보도록 하겠습니다.
데이터 베이스 커넥션을 생성하고 접속해줍니다.
위와 같이 데이터가 정상적으로 저장되었음을 확인할 수 있습니다. volume설정을 하였기 때문에 컨테이너 종료 후 다시 실행시에도 데이터가 유실되지 않고 남아있음을 확인할 수 있습니다.

References

https://junlab.tistory.com/219

0개의 댓글