Adding a working example of docker linked mysql container for issue #887

This commit is contained in:
Ian Blenke 2015-07-11 23:31:55 -04:00
parent 8b8221e174
commit 60622c5a00
5 changed files with 94 additions and 15 deletions

View file

@ -19,11 +19,15 @@ RUN apt-get update && \
RUN pip install supervisor-stdout
ADD scripts/ /scripts
RUN chmod 755 /scripts/setup /scripts/init
ADD scripts/setup /scripts/setup
RUN chmod 755 /scripts/setup
RUN /scripts/setup
WORKDIR /app
ADD scripts/init /scripts/init
RUN chmod 755 /scripts/init
VOLUME /var/lib/mysql
EXPOSE 5000

View file

@ -51,13 +51,15 @@ Simple stand-alone usage:
To link to another mysql container, for example:
docker run --rm --name newcentury_mysql -p 3306 \
docker run --rm --name mysql \
-e HUGINN_MYSQL_DATABASE=huginn \
-e HUGINN_MYSQL_USER=huginn \
-e HUGINN_MYSQL_PASSWORD=somethingsecret \
-e HUGINN_MYSQL_ROOT_PASSWORD=somethingevenmoresecret \
cantino/huginn
docker run --rm --name huginn --link newcentury_mysql:MYSQL -p 5000:5000 \
docker run --rm --name huginn \
--link mysql \
-p 5000:5000 \
-e HUGINN_DATABASE_NAME=huginn \
-e HUGINN_DATABASE_USER=huginn \
-e HUGINN_DATABASE_PASSWORD=somethingsecret \
@ -65,7 +67,16 @@ To link to another mysql container, for example:
To link to another container named 'postgres':
docker run --rm --name huginn --link POSTGRES:mysql -p 5000:5000 -e "DATABASE_USER=huginn" -e "DATABASE_PASSWORD=pass@word" cantino/huginn
docker run --rm --name huginn \
--link postgres:postgresql \
-p 5000:5000 \
-e "HUGINN_DATABASE_USER=huginn" \
-e "HUGINN_DATABASE_PASSWORD=pass@word" \
cantino/huginn
The `docker/` folder also has a `docker-compose.yml` that allows for a sample database formation with a data volume container:
cd docker ; docker-compose up
## Environment Variables

28
docker/docker-compose.yml Normal file
View file

@ -0,0 +1,28 @@
mysqldata:
image: mysql
command: true
mysql:
image: mysql
volumes_from:
- mysqldata
environment:
MYSQL_ROOT_PASSWORD: myrootpassword
MYSQL_DATABASE: huginn
MYSQL_USER: huginn
MYSQL_PASSWORD: myhuginnpassword
huginn:
build: .
ports:
- 5000:5000
environment:
HUGINN_DATABASE_NAME: huginn
HUGINN_DATABASE_USERNAME: root
HUGINN_DATABASE_PASSWORD: myrootpassword
INTENTIONALLY_SLEEP: 10
#DATABASE_INITIAL_CONNECT_MAX_RETRIES: 5
PORT: 5000
links:
- mysql

View file

@ -100,7 +100,7 @@ EOF
# wait for mysql server to start (max 120 seconds)
timeout=120
while ! mysqladmin -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} status >/dev/null 2>&1
while ! mysqladmin -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} status >/dev/null 2>&1
do
(( timeout = timeout - 1 ))
if [ \$timeout -eq 0 ]; then
@ -111,10 +111,10 @@ EOF
sleep 1
done
if ! echo "USE \${DATABASE_NAME}" | mysql -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} >/dev/null 2>&1; then
if ! echo "USE \${DATABASE_NAME}" | mysql -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD} >/dev/null 2>&1; then
DB_INIT="yes"
echo "CREATE DATABASE IF NOT EXISTS \\\`\${DATABASE_NAME}\\\` DEFAULT CHARACTER SET \\\`utf8\\\` COLLATE \\\`utf8_unicode_ci\\\`;" | mysql -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD}
echo "GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON \\\`${DATABASE_NAME}\\\`.* TO 'root'@'localhost';" | mysql -uroot \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD}
echo "GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON \\\`${DATABASE_NAME}\\\`.* TO 'root'@'localhost';" | mysql -u\${DATABASE_USERNAME:-root} \${DATABASE_PASSWORD:+-p\$DATABASE_PASSWORD}
fi
fi
supervisorctl start foreman >/dev/null
@ -142,19 +142,46 @@ cat <<FOREMAN > /tmp/foreman.sh
#!/bin/bash -e
source /app/.env
# Assuming we have a created database, run the migrations and seed it idempotently.
[ -z "\${DO_NOT_MIGRATE}" ] && sudo -u huginn -EH bundle exec rake db:migrate
[ -z "\${DO_NOT_SEED}" ] && sudo -u huginn -EH bundle exec rake db:seed
# The database may need to start up for a bit first
if [ -n "\${INTENTIONALLY_SLEEP}" ]; then
echo "Intentionally sleeping \${INTENTIONALLY_SLEEP}"
sleep \${INTENTIONALLY_SLEEP}
fi
[ -n "\$INTENTIONALLY_SLEEP" ] && sleep \$INTENTIONALLY_SLEEP
if [ -n "\${DATABASE_INITIAL_CONNECT_MAX_RETRIES}" ]; then
max=\${DATABASE_INITIAL_CONNECT_MAX_RETRIES}
count=0
while ! rake mysql_test:ping > /dev/null 2>&1 && [[ \$count -le \$max ]] ; do
count=\$[\$count+1]
echo "Retry \$count of \$max attempting to connect to \$DATABASE_HOST. Sleeping \${DATABASE_INITIAL_CONNECT_SLEEP:5}"
sleep \${DATABASE_INITIAL_CONNECT_SLEEP:5}
done
fi
# We may need to try and create a database
if [ -n "\${CREATE_DB}" ]; then
sudo -u huginn -EH bundle exec rake db:create
fi
# Assuming we have a created database, run the migrations and seed it idempotently.
if [ -z "\${DO_NOT_MIGRATE}" ]; then
sudo -u huginn -EH bundle exec rake db:migrate
fi
if [ -z "\${DO_NOT_SEED}" ]; then
sudo -u huginn -EH bash -xc 'bundle exec rake db:seed &'
fi
# Fixup the Procfile and prepare the PORT
[ -n "\${DO_NOT_RUN_JOBS}" ] && perl -pi -e 's/^jobs:/#jobs:/' /app/Procfile
if [ -n "\${DO_NOT_RUN_JOBS}" ]; then
perl -pi -e 's/^jobs:/#jobs:/' /app/Procfile
fi
perl -pi -e 's/rails server\$/rails server -b 0.0.0.0 -p \\\$PORT/' /app/Procfile
export PORT
# Start huginn
exec sudo -u huginn -EH bundle exec foreman start
exec sudo -u huginn -EH bash -xc 'exec bundle exec foreman start'
FOREMAN
chmod 755 /tmp/foreman.sh

View file

@ -0,0 +1,9 @@
namespace :database_test do
desc "Ping the database"
task :ping do
require 'active_record'
require 'mysql2'
ActiveRecord::Base.establish_connection
ActiveRecord::Base.connection.verify!
end
end