이번엔 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 (0) | 2023.12.11 |
Docker + Node.js + Nginx 1 (0) | 2023.12.10 |