TIW 1월 26일 - docker-mysql (한글, 패스워드, docker-compose secret 이용 등) 스크립트 작성

BOHYEON SEO·2020년 1월 26일
0

TodayIWrote

목록 보기
1/5
post-thumbnail

docker-mysql

  • mysql 한글 적용 설정
  • 초기 database 생성 스크립트화
  • 유저 생성 및 docker-compose의 secret 기능을 이용해 mysql root, 생성한 유저 암호 보안유지하면서 설정
  • volume 설정으로 docker-mysql container를 새로 실행하더라도 데이터가 유지되도록함

폴더 구조

|-- docker
   |-- mysql
   |   |-- mysql.Dockerfile
   |   |-- initdb.sql
   |   |-- utf8.cnf
   |-- mysql_secret
   |-- docker-compose.yml

codes

mysql.Dockerfile

FROM mysql:8

COPY utf8.cnf /etc/mysql/conf.d/
COPY initdb.sql /docker-entrypoint-initdb.d/
  • /etc/mysql/conf.d/ 에 .cnf 설정 파일을 넣어주면 해당 내용을 바탕으로 mysql 설정이 초기화 된다.
    - .cnf 파일의 이름이 상관없었던 것 같지만 체크해봐야 할 것 같다.
  • 역시 docker-entrypoint-initdb.d 디렉토리에 원하는 .sql 파일을 넣어주면 초기 실행시 sql파일이 실행된다.

initdb.sql

CREATE DATABASE IF NOT EXISTS local_bookstore
  • local_bookstore는 개인적인 프로젝트 db 이름이다. 원하는 이름으로 지정하면 된다.

utf8.cnf

[client]
default-character-set = utf8

[mysqld]
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8
  • 적절한 cnf 파일은 아닌 것 같다. utf8대신 utf8mb4을 사용하라는 경고 메세지가 뜨고, 어떻게 한글이 되는지 모르고 일단 동작하는 것에 만족하고 더 알아보지 않은 코드이다.

mysql_secret

passwordhere
  • 패스워드가 그냥 평문으로 들어있는 파일이다.

docker-compose.yml

version: "3.7"
services:
  db_mysql:
    build:
      context: ./mysql
      dockerfile: ./mysql.Dockerfile
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_secret
      MYSQL_USER: local_bookstore
      MYSQL_PASSWORD_FILE: /run/secrets/mysql_secret
      MYSQL_DATABASE: local_bookstore
    secrets:
      - mysql_secret
    ports:
      - "3306:3306"
    volumes:
      - "mysql_data:/var/lib/mysql"

secrets:
  mysql_secret:
    file: mysql_secret

volumes:
  mysql_data:
  • secret 기능이 docker-compose에는 최신 버전에 추가됐기 때문에 3.7 버전을 사용하도록 했다.
  • secrets와 volumes를 생성한 후 이용하도록 했다.
  • environment에 해당하는 이름으로 secret 파일을 전달해야 원하는 동작이 제대로 이루어진다.
  • mysql_secretmysql_data는 원하는 이름으로 지정해도 된다.

생각

  • 코드를 꾸준히 작성하는게 중요할 것 같아 Today I Learned 식으로 Today I Wrote를 시작한다. 오늘 코드는 이전에 작성했었는데, 최근 혼자 하고 있는 프로젝트에 적용하기 위해 조금 변경한 docker-mysql 관련 코드들이다.
  • TIL과 병행하려면 시간이 많이 들 것 같다. 하지만 코드는 코드로 말할 수 있으므로 일단 코드 작성에 더 중점을 두고 TIW 글 작성은 스스로 약속을 지키는 것을 보여주는데 초점을 맞춰 작성하면 될 것 같다.
  • docker 설정 코드 같은 것들보다는 프론트-백으로 웹서비스와 관련된 코드들 위주로 작성하는것이 바람직할 것 같다.
profile
FE Developer @Medistream

1개의 댓글

comment-user-thumbnail
2023년 3월 27일

감사합니다

답글 달기