Created
April 6, 2015 10:40
-
-
Save Ramblurr/72a23adf9e9f5f0332dc to your computer and use it in GitHub Desktop.
A little container that creates a database and user on linked mysql container. Useful on Tutum w/ the Mysql and Wordpress services.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM ubuntu:trusty | |
MAINTAINER Casey Link <casey@outskirtslabs.com> | |
WORKDIR / | |
RUN apt-get update && \ | |
apt-get -yq install mysql-client | |
ADD run.sh /run.sh | |
RUN chmod 755 /*.sh | |
# Expose environment variables | |
ENV DB_HOST **LinkMe** | |
ENV DB_PORT **LinkMe** | |
ENV DB_ADMIN_USER admin | |
ENV DB_ADMIN_PASS **ChangeMe** | |
ENV DB_NEW_USER **ChangeMe** | |
ENV DB_NEW_PASS **ChangeMe** | |
ENV DB_NAME **ChangeMe** | |
CMD ["/run.sh"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Creates a database and a user with suitable privileges for a wordpress install | |
# Based on tutum's docker-mysql run script: https://github.com/tutumcloud/tutum-docker-mysql | |
# Requires the env vars: | |
# DB_HOST, DB_PORT, DB_ADMIN_USER, DB_ADMIN_PASS, DB_NEW_USER, DB_NEW_PASS, DB_NAME | |
# exit when undefiend variables are referenced | |
set -u | |
# unmask errors in a pipeline | |
set -o pipefail | |
DB_HOST=${DB_PORT_3306_TCP_ADDR:-${DB_HOST}} | |
DB_HOST=${DB_1_PORT_3306_TCP_ADDR:-${DB_HOST}} | |
DB_PORT=${DB_PORT_3306_TCP_PORT:-${DB_PORT}} | |
DB_PORT=${DB_1_PORT_3306_TCP_PORT:-${DB_PORT}} | |
echo "=========================================" | |
echo "Creating Database & User" | |
echo "" | |
echo "DB_HOST: $DB_HOST" | |
echo "DB_PORT: $DB_PORT" | |
echo "" | |
echo "DB_ADMIN_USER: $DB_ADMIN_USER" | |
echo "DB_ADMIN_PASS: $DB_ADMIN_PASS" | |
echo "" | |
echo "DB_NEW_USER: $DB_NEW_USER" | |
echo "DB_NEW_PASS: $DB_NEW_PASS" | |
echo "DB_NAME: $DB_NAME" | |
echo "=========================================" | |
for ((i=0;i<10;i++)) | |
do | |
DB_CONNECTABLE=$(mysql -u$DB_ADMIN_USER -p$DB_ADMIN_PASS -h$DB_HOST -P$DB_PORT -e 'status' >/dev/null 2>&1; echo "$?") | |
if [[ DB_CONNECTABLE -eq 0 ]]; then | |
break | |
fi | |
sleep 5 | |
done | |
if [[ $DB_CONNECTABLE -eq 0 ]]; then | |
DB_EXISTS=$(mysql -u$DB_ADMIN_USER -p$DB_ADMIN_PASS -h$DB_HOST -P$DB_PORT -e "SHOW DATABASES LIKE '"$DB_NAME"';" 2>&1 | grep "$DB_NAME" > /dev/null ; echo "$?") | |
if [[ DB_EXISTS -eq 1 ]]; then | |
echo "=> Creating database $DB_NAME" | |
RET=$(mysql -u$DB_ADMIN_USER -p$DB_ADMIN_PASS -h$DB_HOST -P$DB_PORT -e "CREATE DATABASE $DB_NAME") | |
if [[ RET -ne 0 ]]; then | |
echo "Cannot create database." | |
exit RET | |
fi | |
if [ -f /initial_db.sql ]; then | |
echo "=> Loading initial database data to $DB_NAME" | |
RET=$(mysql -u$DB_ADMIN_USER -p$DB_ADMIN_PASS -h$DB_HOST -P$DB_PORT $DB_NAME < /initial_db.sql) | |
if [[ RET -ne 0 ]]; then | |
echo "Cannot load initial database data" | |
exit RET | |
fi | |
fi | |
echo "=> Done!" | |
else | |
echo "=> Skipped creation of database $DB_NAME – it already exists." | |
fi | |
USER_EXISTS=$(mysql -u$DB_ADMIN_USER -p$DB_ADMIN_PASS -h$DB_HOST -P$DB_PORT -e "SELECT User FROM mysql.user WHERE user = '"$DB_NEW_USER"';" 2>&1 | grep "$DB_NEW_USER" > /dev/null ; echo "$?") | |
if [[ USER_EXISTS -eq 1 ]]; then | |
echo "=> Creating user $DB_NEW_USER" | |
RET=$(mysql -u$DB_ADMIN_USER -p$DB_ADMIN_PASS -h$DB_HOST -P$DB_PORT -e "CREATE USER '$DB_NEW_USER'@'%' IDENTIFIED BY '$DB_NEW_PASS';") | |
if [[ RET -ne 0 ]]; then | |
echo "Cannot create user" | |
exit RET | |
fi | |
echo "=> Done!" | |
RET=$(mysql -u$DB_ADMIN_USER -p$DB_ADMIN_PASS -h$DB_HOST -P$DB_PORT -e "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON \`$DB_NAME\`.* TO '$DB_NEW_USER'@'%';") | |
echo "=> Granting privileges to $DB_NEW_USER" | |
if [[ RET -ne 0 ]]; then | |
echo "Cannot grant user privileges" | |
exit RET | |
fi | |
echo "=> Done!" | |
else | |
echo "=> Skipped creation of user $DB_NEW_USER – it already exists." | |
fi | |
else | |
echo "Cannot connect to Mysql" | |
exit $DB_CONNECTABLE | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment