Skip to content

Instantly share code, notes, and snippets.

@Ramblurr
Created April 6, 2015 10:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ramblurr/72a23adf9e9f5f0332dc to your computer and use it in GitHub Desktop.
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.
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"]
#!/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