0. 이 글을 쓰는 이유
이번에 MariaDB로 컨테이너 설정하다가 conf파일과 최초 컨테이너 생성 시 초기화를 하는 방법에 대해 알게 되어 정리하려고 작성함
1. 최초 컨테이너가 동작하면서 sql을 실행해야한다면
결론먼저
컨테이너가 동작할 때 docker-entrypoint-initdb.d 디렉터리에 실행하고자 하는. sql파일들을 넣어주면 된다.
FROM mariadb
ADD ./mysql-init-files /docker-entrypoint-initdb.d
EXPOSE 3306
처음에는 행복회로를 좀 돌렸다. 쿼리를 실행해서 스키마와 테이블을 만들고 해당 컨테이너로 이미지를 만들면 해당 테이블과 스키마가 같이 저장된 이미지가 만들어질 것 같았다. 하지만 어림도 없었다. 왜냐하면 이미지는 생성되는 과정에서 불필요한 내부 데이터를 다 지우기 때문이다. 그 데이터에는 내가 만든 스키마와 테이블도 포함이었다. 물론 cnf파일도 포함이다.
그러면 어떻게 만들어야 하는가
.sql 파일들을 하나하나 docker-entrypoint-initdb.d 에 밀어 넣는 방식도 있다.
하지만 너무 비효율적이다. 디렉터리를 그대로 밀어 넣으면 좋기 때문이다.
그래서 검색을 해보니 대부분 mysql-init-files라는 이름의 디렉터리 이름을 거의 표준 이름처럼 사용하며 밀어 넣고 있는 것을 볼 수 있었다.(실은 뭘로 해도 상관이 없다.)
실행이 안될 시 주의할 점
공식 문서에 적혀있듯. sql파일의 권한이 열려있어야 한다. 어차피 내부에서만 돌릴 거 그냥 시원하게 755로 권한을 주도록 하자.
실행 순서
알파벳 순서로 진행한다.
2. cnf파일 설정하기
문제는. cnf파일도 설정한 값이 초기화된다는 점이다.
이러면 어떻게 해야 할지 좀 고민했는데 그냥 docker image를 만들면서 내가 설정한 cnf파일들로 바꿔치기를 하면 편하게 사용할 수 있었다.
FROM mariadb
COPY 50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf
COPY mariadb.cnf /etc/mysql/mariadb.cnf
'docker' 카테고리의 다른 글
유데미 도커 듣다가 메모(1) (0) | 2023.01.05 |
---|