Creating a Stack with Docker Compose

1.5 hours
  • 4 Learning Objectives

About this Hands-on Lab

After a few months of debate, we’ve decided to set up a cooking blog. After researching different platforms, we’ve chosen WordPress with MySQL. We have a swarm cluster already set up where we host customer sites. To make maintaining WordPress easier, we’ve decided to set it up as a stack. We’ll need to create the Docker Compose file, deploy the stack, and finish the WordPress setup.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Complete the Swarm Setup

Get a join token:

[[email protected]]$ docker swarm join-token worker

Add a worker node to the swarm:

[[email protected]]$ docker swarm join --token [TOKEN] [MANAGER_PRIVATE_IP]:2377
Create the Compose File

Create the compose file:

[[email protected]]$ vi docker-compose.yml

docker-compose.yml:

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     networks:
       mysql_internal:
         aliases: ["db"]
     environment:
       MYSQL_ROOT_PASSWORD: P4ssw0rd0!
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: P4ssw0rd0!

   blog:
     depends_on:
       - db
     image: wordpress:latest
     networks:
       mysql_internal:
       wordpress_public:
     ports:
       - "80:80"
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: P4ssw0rd0!

volumes:
    db_data:
networks:
  mysql_internal:
    internal: true
  wordpress_public:
Create the WordPress Blog

Deploy the stack:

docker stack deploy --compose-file docker-compose.yml wp
Complete the WordPress Setup

Natviate to public IP of your manager node.

Fill out the form and complete the setup.

Additional Resources

Complete the Swarm Setup

On the manager node, go and initialize the Swarm. Get the worker token and have the worker node join the swarm.

Create a Compose File

In the cloud_user directory of your lab server, create a docker-compose.yml file.
The version of compose should be set to 3.
Create two services: db and blog.

DB Service

The db service will use the mysql image tagged to 5.7.
Create a volume called db_data and mount it in /var/lib/mysql.
Make sure the service is attached to the mysql_internal network. Configure the following environment variables:

  • Set MYSQL_ROOT_PASSWORD to P4ssw0rd0!
  • Set MYSQL_DATABASE to wordpress
  • Set MYSQL_USER to wordpress
  • Set MYSQL_PASSWORD to P4ssw0rd0!

Blog Service

Make sure that the db service comes online first.
Use the latest wordpress image.
The service should be attached to the mysql_internal and wordpress_public networks.
Publish port 80 on the host to port 80 on the container.
Configure the following environment variables:

  • Set WORDPRESS_DB_HOST to db:3306
  • Set WORDPRESS_DB to wordpress
  • Set WORDPRESS_DB_USER to wordpress
  • Set WORDPRESS_DB_PASSWORD to P4ssw0rd0!

Volumes

Create the db_data volume.

Networks

Configure mysql_internal to be an internal network.
The wordpress_public network will be public.

Deploy and Test the Stack

Deploy the stack using the docker-compose.yml file. The stack will be called wp. When the stack comes online, open a browser and access the Wordpress blog using the public IP of the manager. Complete the setup of Wordpress.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?