[Docker] docker로 mariadb 개발환경 구축하기

2023. 2. 5. 14:51·개발/Docker
728x90
반응형

기업협약 팀프로젝트를 하면서 mariadb를 사용할 일이 있었다.

팀원들은 전에 mysql만 사용해봤기 때문에 mariadb는 로컬에 깔려있지 않았다.

mysql과 mariadb는 같은 포트번호를 잡아먹기 때문에 동시에 설치하여 실행하기 위해서는 따로 포트를 바꿔줘야했다.

이러한 번거로움을 덜기위해 도커로 mariadb를 실행하여 포트번호 통일, 로컬에 설치하지 않아도 되게끔 했다.

 

1. mariadb 이미지

 

mariadb - Official Image | Docker Hub

Note: the description for this image is longer than the Hub length limit of 25000, so has been trimmed. The full description can be found at https://github.com/docker-library/docs/tree/master/mariadb/README.md. See docker/hub-beta-feedback#238 for more inf

hub.docker.com

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 명령어  (2) 2022.12.13
'개발/Docker' 카테고리의 다른 글
  • [Docker] `error storing credentials - err: exit status 1, out: `pass not initialized: exit status 1: Error: password store is empty. Try "pass init".``
  • [Docker] kubernetes 기초 개념
  • [Docker] 도커 마운트 경로 오류
  • [Docker] DockerHub 사용하기
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    React
    node.js
    go언어
    CSS
    도커
    블록체인
    컨테이너
    ERC721
    go
    명령어
    js
    erc20
    node
    30일챌린지
    30일 챌린지
    프로그래머스
    nodejs
    하이퍼레저
    html
    mysql
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[Docker] docker로 mariadb 개발환경 구축하기
상단으로

티스토리툴바