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]