Run a database migration command when deploying a Docker container to AWS

frigg picture frigg · Jan 11, 2017 · Viewed 11k times · Source

Please bear with me. Pretty new to Docker.

I'm deploying Docker containers (detached) to an AWS EC2 registry using CodeDeploy. On deploy, the following command is run after setting some environmental variables etc:

exec docker run -d ${PORTS} -v cache-${CACHE_VOLUME} --env-file $(dirname $0)/docker.env --tty "${IMAGE}:${TAG}"

The container runs an image located and tagged in EC2 Container Service. No problems so far.

Since this is a PHP application (specifically a Symfony2 application) I would normally need to issue the following command to execute database migrations on deployment:

 php app/console doctrine:migrations:migrate --no-interaction

Now, is there any to run this command during "docker run..." while keeping the container running, or do I need to run another container specifically for this command?

Many thanks!

Answer

Bukharov Sergey picture Bukharov Sergey · Jan 11, 2017

You need create entrypoint. This script runs at the container startup.

entrypoint.sh file:

#create or update db
./waitforit.sh <DB_HOST>:<DP_PORT> -t 30
php app/console doctrine:migrations:execute 

# start apache
apache2-foreground

wait for it it is a script waited when database is started up