42Seoul

Inception - Docker(mariaDB)

millar 2024. 8. 27. 20:43

개요

Inception에서 Docker(mariaDB)를 간!단!히! 살펴보겠습니다.

다른 서비스도 완전히 구성된 상태에서 실행을 보인다는 것을 알아두시길 바랍니다.

 


mariaDB(Dockerfile)

FROM debian:11
EXPOSE 3306

RUN	apt-get update && apt-get install -y mariadb-server tini

COPY	conf/50-server.cnf /etc/mysql/mariadb.conf.d/
COPY	tools/setup.sh /bin/

RUN		chmod +x /bin/setup.sh

ENTRYPOINT	["/usr/bin/tini", "--"]
CMD ["setup.sh", "mysqld_safe"]

 nginx와 비슷한 부분이 많습니다. 독립적으로 서비스가 구성되어야 하므로 도커 파일을 따로 두고, 이미 만들어진 이미지를 사용하지 않습니다.

mariaDB(setup.sh)

service mariadb start

mariadb -v -u root << EOF
CREATE DATABASE IF NOT EXISTS $DB_NAME;
CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO 'root'@'%' IDENTIFIED BY '$DB_PASS_ROOT';
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('$DB_PASS_ROOT');
EOF

sleep 5
service mariadb stop
exec $@

 mariaDB서비스를 실행하고 ".env"에 정의된 환경변수를 기반으로 데이터베이스의 관리자와 유저를 생성합니다. 그리고 데이터베이스 컨테이너를 실행할 수 있도록 "exec $@" 명령어를 사용하는데, 여기서 $@는 .env의 환경변수가 아니라 Dockerfile의 "mysqld_safe"를 의미합니다. 환경변수가 아닌, 매개변수로 확장된 모습으로 볼 수 있습니다.

 

 sleep의 여유시간을 준 이유는 쿼리 문법이 문장을 처리할 때 시간이 소요되기 때문입니다. sleep을 적절하게 주지않으면, 전체 구성을 완료할 때 Wordpress에서 데이터베이스 연동을 하지 못하거나 유저가 생성되지않는 등, 자잘한 문제가 발생했었습니다.

 

mariaDB(50-server.conf)

[server]
[mysqld]

user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
socket                  = /run/mysqld/mysqld.sock
port                    = 3306
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
query_cache_size        = 16M
expire_logs_days        = 10
log_error				= /var/log/mysql/error.log
character-set-server	= utf8mb4
collation-server		= utf8mb4_general_ci

[embedded]
[mariadb]
[mariadb-10.3]