Docker + Node.js + Nginx 4

2023. 12. 11. 11:12·BACK END

이번엔 MySQL 이미지를 설치해 보겠습니다.root 경로에 작업 폴더를 생성해줍시다. 

 

mysql/conf.d/my.conf에는 다음과 같이 작성해 줍시다.

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake=FALSE
init-connect='SET NAMES utf8'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
bind-address=0.0.0.0

기본적인 encoding 설정은 제외하고  bind-address=0.0.0.0 은 사용 가능한 모든 네트워크 인터페이스를 수신합니다. 이는 MySQL 서버가 모든 IP 주소의 연결을 허용하도록 구성되었음을 의미합니다.

 

docker-compose.yml 수정

version: "3"

services:
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - "80:80"
    depends_on:
      - node
      - mysql
    networks:
      - db-net
  node:
    build:
      context: ./node_server
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    depends_on:
      - mysql
    networks:
      - db-net
    volumes:
      - ./node_server/uploads:/store_images_volume
  mysql:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_HOST: mysql
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: chanho
      MYSQL_PASSWORD: 1234
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/config:/etc/mysql/conf.d
      - ./mysql/init:/docker-entrypoint-initdb.d
    ports:
      - "3307:3306"
    networks:
      - db-net

networks:
  db-net:

volume

 문득 이런 생각이 들었다. 이미지를 추가하거나 컨테이너를 리빌드하면 MySQL에 저정했던 데이터가 사라지진 않을까 ? 라는 생각이 들어 찾아본 결과 도커 컨테이너는 프로세스가 종료되면 변경 사항 중 일부가 손실될 수 있습니다. 그래서 도커는  volume 이라는 개념으로 데이터를 유지할 수 있는 기능을 제공합니다. 

 

MySQL에서는 이 기능을 내부적으로 사용해서 컨테이너 생성시 볼륨을 자동으로 생성해 줍니다만 컨테이너를 삭제할 경우엔 이 볼륨 또한 데이터를 보존할 수 없습니다.  기본적인 볼륨을 확인해 보겠습니다.  docker volume list  명령어로 볼륨 리스트를 확인하면 임의의 해시로 볼륨이 생성된 것을 확인할 수 있습니다.

$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql 
e94b0ab7eed5b1d147147ffe5b170d1520ee680f7b3ab7511e4e0fb4fb9a1925

$  docker volume list
DRIVER    VOLUME NAME
local     15c1f4e9bfcf8d01154f232737ed9e90df479b2529247bc16a60a7a335675155
volumes:
    - ./db/mysql/data:/var/lib/mysql ->  ./db/mysql/data  디렉토리를 MySQL 컨테이너의  /var/lib/mysql 디렉토리로 마운트
    - ./db/mysql/config:/etc/mysql/conf.d  -> 사용자 정의 MySQL 설정을 제공할 수 있습니다. 이 디렉토리의 파일을  수정 하면 MySQL 컨테이너에서 해당 변경 사항이 반영
    - ./db/mysql/init:/docker-entrypoint-initdb.d -> 이 디렉토리에 있는 SQL 스크립트는 MySQL 컨테이너가 처음 시작  될 때 실행됩니다. 주로 데이터베이스를 스키마 및 데이터로 초기화하는 데 사용

 

설정이 끝나셨다면  docker-compose up --build 를 terminal에 입력해 build해주시면 됩니다.

terminal에서   docker container ps 를 입력해 CONTAINER_ID를 확인해 줍니다.

 docker exec -ot Container_ID bash  명령어를 입력 후  mysql -uroot -p  명령어로 mysql을 실행할 수 있습니다. 

간단하게  show databases  명령어를  실행하면  MYSQL_DATABASES: cloud_brigde  로 생성한 database를 확인할 수 있습니다.

'BACK END' 카테고리의 다른 글

우당탕탕 Node JS Server 다시보기  (1) 2023.12.18
Error: Connect econnrefused  (2) 2023.12.12
Docker + Node.js + Nginx 3  (0) 2023.12.11
Docker + Node.js + Nginx 2  (1) 2023.12.11
Docker + Node.js + Nginx 1  (2) 2023.12.10
'BACK END' 카테고리의 다른 글
  • 우당탕탕 Node JS Server 다시보기
  • Error: Connect econnrefused
  • Docker + Node.js + Nginx 3
  • Docker + Node.js + Nginx 2
빨주노초잠만보
빨주노초잠만보
  • 빨주노초잠만보
    과거의 나를 통해 미래의 나를 성장시키자
    빨주노초잠만보
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • TEKHIT ANDROID SCHOOL (4)
      • Android Architecture (7)
      • Android (40)
      • PROJECT (5)
      • KOTLIN (10)
        • 코루틴의 정석 (3)
      • BACK END (12)
      • CS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MVI
    kotlin interface vs abstract
    kotlin abstract class
    android Room
    Repository Pattern
    STATEFLOW
    DataSource
    kotlin 타입 소거
    flow
    callbackflow
    sealed class vs enum class
    repository
    android clean architecture
    interface vs abstract
    DI
    kotlin array
    saeled class enum class 차이
    코틀린 코루틴의 정석
    kotlin interface
    Clean Architecture
    orbit
    의존성 주입
    kotlin interface abstract 차이
    Livedata
    Room
    Throttle
    ThrottleFirst
    리사이클러뷰 풀
    sealed class
    value class
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
빨주노초잠만보
Docker + Node.js + Nginx 4
상단으로

티스토리툴바