Volumes with Docker Compose
Volumes are useful for distributed applications launched as a docker compose or stack file.
The following example demonstrates how to create a docker compose (stack) file to launch a wordpress service with a mysql database dependency.
First create the docker compose file
version: '3' services: db: image: mysql:5.7 volumes: # Pass volume mysql-data to mysql - "mysql-data:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest links: - db ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: wordpress # Add definition to create volume mysql-data referenced above volumes: mysql-data: driver: cio driver_opts: profile: "MYSQL"
In the above file a volume is attached to the db service and defined at the bottom of the file to be created through the cio volume driver using the MYSQL profile.
A Docker Stack can now be launched from this file:
$ docker stack deploy --compose-file wordpress-mysql.yml wp Creating network wp_default Creating service wp_db Creating service wp_wordpress
The two services should now be listed and once they are both running wordpress can be reached at port 8080.
$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS 8iqdjhw8r2ha wp_db replicated 1/1 mysql:5.7 hdx342fmn9tn wp_wordpress replicated 1/1 wordpress:latest *:8080->80/tcp