From e9e676dd3310c5cc1ebf52ea2015473d7fccd415 Mon Sep 17 00:00:00 2001 From: Disassembler Date: Fri, 19 Jan 2018 15:50:15 +0100 Subject: [PATCH] Create MariaDB Docker container --- mariadb.sh | 27 +++++++++++++ mariadb/Dockerfile | 14 +++++++ mariadb/adminpwd.sql | 5 +++ mariadb/etc/init.d/mariadb | 16 ++++++++ mariadb/srv/mariadb/my.cnf | 81 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 143 insertions(+) create mode 100755 mariadb.sh create mode 100644 mariadb/Dockerfile create mode 100644 mariadb/adminpwd.sql create mode 100755 mariadb/etc/init.d/mariadb create mode 100644 mariadb/srv/mariadb/my.cnf diff --git a/mariadb.sh b/mariadb.sh new file mode 100755 index 0000000..afe6c9a --- /dev/null +++ b/mariadb.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +SOURCE_DIR=$(realpath $(dirname "${0}"))/mariadb + +# Build Docker container +docker build -t mariadb ${SOURCE_DIR} + +# Create MariaDB instance +mkdir -p /srv/mariadb/data +chown 3306:3306 /srv/mariadb/data +docker run --rm --name mariadb -h mariadb -v /srv/mariadb/data:/var/lib/mysql mariadb mysql_install_db --user=mysql + +# Configure MariaDB +cp ${SOURCE_DIR}/srv/mariadb/my.cnf /srv/mariadb/my.cnf + +# Enable query logging. Only if the DEBUG environment variable is set +if [ ${DEBUG:-0} -eq 1 ]; then + sed -i 's/#general_log/general_log/g' /srv/mariadb/my.cnf +fi + +# Configure MariaDB service +cp ${SOURCE_DIR}/etc/init.d/mariadb /etc/init.d/mariadb +rc-update add mariadb boot +service mariadb start + +# Configure MariaDB admin +cat ${SOURCE_DIR}/adminpwd.sql | docker exec -i mariadb mysql diff --git a/mariadb/Dockerfile b/mariadb/Dockerfile new file mode 100644 index 0000000..b3b58e0 --- /dev/null +++ b/mariadb/Dockerfile @@ -0,0 +1,14 @@ +FROM alpine:3.7 +MAINTAINER Disassembler + +RUN \ + # Create OS user (which will be picked up later by apk add) + addgroup -S -g 3306 mysql \ + && adduser -S -u 3306 -h /var/lib/mysql -s /bin/nologin -g mysql -G mysql mysql \ + # Install MariaDB + && apk --no-cache add mariadb mariadb-client + +VOLUME ["/etc/mysql", "/var/lib/mysql"] +EXPOSE 3306 + +CMD ["mysqld_safe"] diff --git a/mariadb/adminpwd.sql b/mariadb/adminpwd.sql new file mode 100644 index 0000000..c96e6fd --- /dev/null +++ b/mariadb/adminpwd.sql @@ -0,0 +1,5 @@ +DELETE FROM mysql.user WHERE User != 'root' OR Host != 'localhost'; +INSTALL PLUGIN unix_socket SONAME 'auth_socket'; +UPDATE mysql.user SET plugin='unix_socket'; +FLUSH PRIVILEGES; +DROP DATABASE test; diff --git a/mariadb/etc/init.d/mariadb b/mariadb/etc/init.d/mariadb new file mode 100755 index 0000000..3deff0b --- /dev/null +++ b/mariadb/etc/init.d/mariadb @@ -0,0 +1,16 @@ +#!/sbin/openrc-run + +description="MariaDB docker container" + +depend() { + need docker net + use dns logger netmount +} + +start() { + /usr/bin/docker run -d --rm --name mariadb -h mariadb -v /srv/mariadb/my.cnf:/etc/mysql/my.cnf -v /srv/mariadb/data:/var/lib/mysql mariadb +} + +stop() { + /usr/bin/docker kill mariadb +} diff --git a/mariadb/srv/mariadb/my.cnf b/mariadb/srv/mariadb/my.cnf new file mode 100644 index 0000000..daa8fbd --- /dev/null +++ b/mariadb/srv/mariadb/my.cnf @@ -0,0 +1,81 @@ +# Example MariaDB config file for medium systems. +# +# This is for a system with little memory (32M - 64M) where MariaDB plays +# an important part, or systems up to 128M where MariaDB is used together with +# other programs (such as a web server) +# +# MariaDB programs look for option files in a set of +# locations which depend on the deployment platform. +# You can copy this option file to one of those +# locations. For information about these locations, do: +# 'my_print_defaults --help' and see what is printed under +# Default options are read from the following files in the given order: +# More information at: http://dev.mysql.com/doc/mysql/en/option-files.html +# +# In this file, you can use all long options that a program supports. +# If you want to know which options a program supports, run the program +# with the "--help" option. + +# The following options will be passed to all MariaDB clients +[client] +port = 3306 +socket = /run/mysqld/mysqld.sock + +[mysqld] +port = 3306 +socket = /run/mysqld/mysqld.sock +skip-external-locking +key_buffer_size = 16M +max_allowed_packet = 1M +table_open_cache = 64 +sort_buffer_size = 512K +net_buffer_length = 8K +read_buffer_size = 256K +read_rnd_buffer_size = 512K +myisam_sort_buffer_size = 8M + +#general_log = 1 + +# Replication Master Server (default) +# binary logging is required for replication +log-bin=mysql-bin + +# binary logging format - mixed recommended +binlog_format=mixed + +# required unique id between 1 and 2^32 - 1 +# defaults to 1 if master-host is not set +# but will not function as a master if omitted +server-id = 1 + +# Uncomment the following if you are using InnoDB tables +innodb_data_home_dir = /var/lib/mysql +innodb_data_file_path = ibdata1:10M:autoextend +innodb_log_group_home_dir = /var/lib/mysql +# You can set .._buffer_pool_size up to 50 - 80 % +# of RAM but beware of setting memory usage too high +innodb_buffer_pool_size = 16M +innodb_additional_mem_pool_size = 2M +# Set .._log_file_size to 25 % of buffer pool size +innodb_log_file_size = 5M +innodb_log_buffer_size = 8M +innodb_flush_log_at_trx_commit = 1 +innodb_lock_wait_timeout = 50 + +[mysqldump] +quick +max_allowed_packet = 16M + +[mysql] +no-auto-rehash +# Remove the next comment character if you are not familiar with SQL +#safe-updates + +[myisamchk] +key_buffer_size = 20M +sort_buffer_size = 20M +read_buffer = 2M +write_buffer = 2M + +[mysqlhotcopy] +interactive-timeout