728x90
기업협약 팀프로젝트를 하면서 mariadb를 사용할 일이 있었다.
팀원들은 전에 mysql만 사용해봤기 때문에 mariadb는 로컬에 깔려있지 않았다.
mysql과 mariadb는 같은 포트번호를 잡아먹기 때문에 동시에 설치하여 실행하기 위해서는 따로 포트를 바꿔줘야했다.
이러한 번거로움을 덜기위해 도커로 mariadb를 실행하여 포트번호 통일, 로컬에 설치하지 않아도 되게끔 했다.
1. mariadb 이미지
mariadb는 도커허브에서 공식 이미지를 제공하기 때문에 이걸 갖다 쓰면 된다.
2. docker-compose.yaml
처음에는 nodejs까지 도커 컴포즈로 한번에 실행시키려고 했지만 중간에 오류가 있어 db만 실행시켰다.
version: "3.8"
services:
mariadb:
container_name: mariadb
image: "mariadb:latest"
restart: always
volumes:
- db:/data/db
env_file:
- ./env/mariadb.env
ports:
- "8086:3306"
volumes:
db:
3. env/mariadb.env
mariadb는 mysql개발자가 나와서 따로 만든 db라고 한다.
그래서 기본 틀은 mysql과 같고 대부분의 세팅값은 mysql값으로 처리해줘도 된다.
MYSQL_HOST="localhost"
MYSQL_ROOT_PASSWORD="citylabs"
MYSQL_DATABASE="citylabs"
MYSQL_USER="citylabs"
MYSQL_PASSWORD="citylabs"
4. config/index.js
nodejs와 db연결 시에 config파일이다.
db 연결 ORM은 sequelize를 사용했다.
development: {
username: process.env.MARIADB_USERNAME,
password: process.env.MARIADB_PASSWORD,
database: "schemaname",
host: "127.0.0.1",
dialect: "mariadb",
timezone: "Asia/Seoul",
port: 8086,
dialectOptions: {
dateStrings: true,
typeCast: true, // DB에서 가져올 때 시간 설정
},
}
5. models/index.js
config폴더에서 작성한 값을 기반으로 sequelize연결
const dbConfig = require("../config")["development"];
const Sequelize = require("sequelize");
const sequelize = new Sequelize(
dbConfig.database,
dbConfig.username,
dbConfig.password,
dbConfig,
);
6. 연결
아래 코드를 작성하면 db가 연결된다.
docker-compose up -d
연결된 db는 mysql workbench를 활용하여 확인할 수 있다.
이름, 포트번호, 비밀번호를 입력하면 된다.
7. 후기
도커로 mariadb를 연결하는 예시는 구글링을 통해 쉽게 찾아낼 수 있었다.
하지만 sequelize까지의 연결은 찾아보기 힘들었다.
가장 오류가 났던 부분은 mariadb의 포트를 3306에서 8086으로 바꾸는 과정이었다.
728x90
'개발 > Docker' 카테고리의 다른 글
[Docker] `error storing credentials - err: exit status 1, out: `pass not initialized: exit status 1: Error: password store is empty. Try "pass init".`` (0) | 2023.05.15 |
---|---|
[Docker] kubernetes 기초 개념 (0) | 2023.02.05 |
[Docker] 도커 마운트 경로 오류 (0) | 2022.12.14 |
[Docker] DockerHub 사용하기 (0) | 2022.12.13 |
[Docker] Docker 명령어 (0) | 2022.12.13 |