이전 프로젝트 배포하기에 이어, Challympic을 배포하려 한다.
Challympic의 설계는 다음과 같다.
Docker hub에 있는 mariadb 공식 이미지를 사용해 도커 이미지를 만든다.
# mariadb 10.6 버전 이미지 사용.
FROM mariadb:10.6
ENV MYSQL_ROOT_PASSWORD {PASSWORD}
# my.cnf 세팅
RUN echo lower_case_table_names=1 >> /etc/mysql/my.cnf
RUN echo default-time-zone='+9:00' >> /etc/mysql/my.cnf
RUN echo collation-server = utf8mb4_unicode_ci >> /etc/mysql/my.cnfmy.cnf
RUN echo collation-server = utf8mb4_0900_ai_ci >> /etc/mysql/my.cnf
RUN echo character-set-server = utf8mb4 >> /etc/mysql/my.cnf
RUN echo skip-character-set-client-handshake >> /etc/mysql/my.cnf
각각의 도커파일을 같은 폴더(config/challympic
)에 저장해 놓은 상태이므로, Dockerfile의 이름을 Dockerfile-DB
로 저장했다.
이를 실행하기 위해 아래와 같은 명령어를 사용했다.
(상기 폴더에서 진행했다.)
sudo docker build -t challympic/mariadb -f ./Dockerfile-DB .
하나씩 살펴보면 다음과 같다.
sudo docker build \ # Dockerfile로 Docker image 생성
-t challympic/mariadb \ # image 이름을 challympic/mariadb로 저장
-f ./Dockerfile-DB \ # Dockerfile은 Dockerfile-DB로
. # 현재 디렉토리에 있음.
이를 통해 다음과 같이 도커 이미지를 만들 수 있다.
앞서 만든 도커 이미지를 사용해 도커 컨테이너에 실행한다.
명령어는 다음과 같이 구성했다.
sudo docker run --network {네트워크이름} --name {컨테이너이름} -p 6660:3306 -d challympic/mariadb
다음 명령어를 살펴보면 다음과 같다.
sudo docker run \ # docker 컨테이서 생성
--network {네트워크이름} \ # {네트워크이름} 네트워크에 연결
--name {컨테이너이름} \ # 생성될 컨테이너 이름을 {컨테이너이름}으로 설장
-p 6660:3306 \ # 6660포트와 3306 포트를 연결
-d \ # 백그라운드에서 실행
challympic/mariadb # challympic/mariadb 이미지로 실행
이렇게 도커 컨테이너를 만들 수 있다.
최초에는 .sql
파일로 설정할 내용을 모두 저장하고 실행하는 방법을 통해 진행하려 했으나...
로그인이 안되는 문제로 실패하고, 컨테이너에 직접 들어가서 실행했다.
CREATE DATABASE challympic # challympic database 생성
CREATE user '{설정할이름}'@'%' identified by '{비밀번호}' // 새로운 유저 생성
CREATE user '{설정할이름}'@'localhost' identified by '{비밀번호}'
grant all privileges on challympic.* to '{이름}'@'%' identified by '{비밀번호}';
grant all privileges on challympic.* to '{이름}'@'localhost' identified by '{비밀번호}';
flush privileges;
내부에서 뿐만 아니라, 외부에서도 접속할 수 있도록 계정을 설정했다.
자동화를 못한 것이 못내 아쉬울 따름이다.
shell script로 충분히 할 수 있을 것 같아, 계속 시도하며 해당 부분을 채울 수 있으면 좋겠는데...
https://hub.docker.com/_/mariadb
https://nasn.tistory.com/m/116