docker pull mysql
pull
명령어를 통해 docker hub에서 MySQL 이미지를 가져옵니다.
docker images
images
명령어를 통해 가져온 이미지 목록을 확인할 수 있습니다.
version을 명시해주지 않으면 가장 최신버전을 가져오는데 2021년 8월 기준으로는 5.7
버전이네요.
일반적인 시스템은 하나의 애플리케이션만으로 구동 되지 않습니다.
여러 개의 애플리케이션이 서로 의존성 있게 구성되어 시스템이 이뤄져 있습니다.
흔히 하나의 컨테이너가 하나의 애플리케이션을 담당한다고 하면 여러 개의 컨테이너가 필요로 합니다.
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설정을 하였기 때문에 컨테이너 종료 후 다시 실행시에도 데이터가 유실되지 않고 남아있음을 확인할 수 있습니다.