Docker.Service.Server.MySQL.js
JavaScript source for A Docker module for Node.js, 72 lines. Raw file
const Security = require('Security');
const fs = require('fs')
const Docker =
{
Service:
{
Start: require('./../Docker.Service.Start'),
Server:
{
MySQL: ( serviceName, dataDirectory, databaseName, username, password, port ) =>
{
serviceName = Security.String(serviceName)
dataDirectory = Security.String(dataDirectory)
databaseName = Security.String(databaseName)
username = Security.String(username)
password = Security.String(password)
port = Security.Integer(port) // min: 1
const dataDirectoryAtomized = dataDirectory.split("/")
let basePath = "";
dataDirectoryAtomized.forEach( dir => {
basePath += "/"+dir;
if (!fs.existsSync(basePath)) {
fs.mkdirSync(basePath)
}
})
const dockerfileContent = [
`FROM ubuntu:latest`,
`USER root`,
`ENV LANG=C.UTF-8`,
`ENV DEBIAN_FRONTEND=noninteractive`,
`ENV TZ=Europe`,
`ENV PHP_IDE_CONFIG="serverName=localhost"`,
`WORKDIR /tmp`,
`RUN apt-get update`,
`RUN apt-get install -y mysql-server`,
`RUN sed -i "s/bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/mysql.conf.d/mysqld.cnf`,
`RUN echo "lower_case_table_names = 1" >> /etc/mysql/mysql.conf.d/mysqld.cnf`,
// Raised from the MySQL default (151). Persistent PDO connections are held
// one per FPM/Apache worker, so the connection count tracks worker counts;
// this gives comfortable headroom. Only actually-open connections cost memory.
`RUN echo "max_connections = 500" >> /etc/mysql/mysql.conf.d/mysqld.cnf`,
`RUN usermod -d /var/lib/mysql/ mysql`,
`RUN echo "FLUSH PRIVILEGES;" >> /tmp/my.sql`,
`RUN echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '';" >> /tmp/my.sql`,
`RUN echo "CREATE DATABASE ${databaseName};" >> /tmp/my.sql`,
`RUN echo "CREATE USER '${username}'@'%' IDENTIFIED BY '${password}';" >> /tmp/my.sql`,
`RUN echo "GRANT ALL PRIVILEGES ON *.* TO '${username}'@'%';" >> /tmp/my.sql`,
`RUN echo "#! /bin/bash" >> /root/start.sh`,
`RUN echo "mysqld --initialize --lower_case_table_names=1 --user=mysql --console" >> /root/start.sh`,
`RUN echo "mysqld --init-file=/tmp/my.sql" >> /root/start.sh`,
`RUN echo "tail -f /dev/null" >> /root/start.sh`,
`RUN chmod 777 /root/start.sh`,
`CMD /root/start.sh`
].join(`\n`)
const args = [
`-p${port}:3306`,
`-v"${dataDirectory}":"/var/lib/mysql"`,
];
return Docker.Service.Start( serviceName, dockerfileContent, __dirname, args )
}
}
}
}
module.exports = Docker.Service.Server.MySQL