커스텀 MySQL Docker 이미지를 만들기 위해 Dockerfile을 생성 중이다. 이때 MySQL 도커 이미지가 생성되는 과정에서 초기 실행될 SQL 명령문을 Dockerfile에 입력하였다. Dokcerfile에 직접 입력하면 입력 순서로 실행이 되겠지만 외부 sql 파일로 빼놓고 COPY를 통해 지정이 되었을 때 어떻게 되는지 궁금해졌다.
Dockerfile 작성
실행될 SQL 명령문은 `RUN echo`로 지정한 부분과 외부 파일로 빼놓고 `COPY`를 통해 복사하여 진행한다.
외부 sql 파일 목록
명령문이 담긴 파일의 맨 앞에 실행 순서에 맞게 번호를 지정하였다.
MySQL 초기 과정 Logs
모든 테스트 과정을 캡처로 담아두지 않았다.
결론적으로 SQL은 파일 이름 순서대로 실행된다는 점이다.
이전 테스트 과정에서 현재 06번인 `create-schema`를 `07-create-schema`로 지정하였고, 현재 07번 역시 `show-database`를 `06-show-database`로 지정하였을 때, 내가 schema 명령으로 생성한 `carddb` 데이터베이스는 보이지 않았고 당연히 위의 캡처 순서와 달랐다. 물론 최종 생성은 되었지만 `SHOW DATABASE;` 명령이 진행되는 순간에는 생성 전일테다.
그리고 한 가지 더, 파일로 생성한 SQL 명령문이 Dockerfile 내부에 `RUN echo` 보다 먼저 실행된다는 점이다. COPY를 통해 출력된 sql 파일들 명령보다 RUN echo 명령문으로 지정한 `init.sql`이 더 상위에 있음에도 logs에 표시된 순서에서는 가장 나중이었다.
명령 실행 순서 결론
Dockerfile을 이용한 Docker 컨테이너 생성 시 다중 파일로 지정한 sql 명령문은 파일 이름의 숫자 및 알파벳 순서로 실행된다.
외부 파일의 sql 명령이 먼저 실행되고. RUN echo로 지정한 명령이 나중에 실행된다.