Docker Compose
Copyright Notice
Copyright © 2004-2025 by NobleProg Limited All rights reserved.
This publication is protected by copyright, and permission must be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or likewise.
Author
Docker Compose Installation
<syntaxhighlight lang="Bash"> $ sudo -i $ curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose $ curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose $ exit $ docker-compose --version </syntaxhighlight>
- more info: docs.docker.com/compose/install
Wordpress Example
Start Wordpress without Docker Compose
To start a Wordpress site in containers, you need to complete following steps:
- create custom network for the application
- create volume for database container
- create volume for web server container
- create database container
- create web server container
The commands below represents an example of all required steps: <syntaxhighlight lang="Bash"> $ docker network create wordpress_net $ docker volume create wordpress_mysql_data $ docker volume create wordpress_html $ docker run -d --name wordpress_mysql --network wordpress_net -v wordpress_mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=NobleProg -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress mysql:5.7 $ docker run -d --name wordpress_apache --network wordpress_net -v wordpress_html:/var/www/html -p 80:80 -e WORDPRESS_DB_HOST=wordpress_mysql:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress wordpress:php7.2-apache </syntaxhighlight>
When you want to delete your Wordpress site completely you need to remove containers, volumes and network by executing following commands: <syntaxhighlight lang="Bash"> $ docker container rm -f wordpress_mysql wordpress_apache $ docker volume rm wordpress_mysql_data wordpress_html $ docker network rm wordpress_net </syntaxhighlight>
Start Wordpress with Docker Compose
Docker Compose allows you to manage your multi-container applications by running a straightforward command. For example, to start, stop and remove Wordpress site, you need to execute following commands accordingly: <syntaxhighlight lang="Bash"> $ docker-compose up -d $ docker-compose stop $ docker-compose down --volumes </syntaxhighlight>
There are only a few things you need to do before you can start Wordpress site by using Docker Compose:
- Install Docker Compose (usually it's not installed with Docker)
- create a docker-compose.yml (or .yaml) in an empty directory containing following content
- run above commands in the same directory where the docker-compose.yml file is located (or use -f option to specify a path to the file).
<syntaxhighlight lang="yaml"> version: '3' services:
mysql: image: mysql:latest volumes: - mysql_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=NobleProg - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress networks: - net apache: depends_on: - mysql image: wordpress:latest volumes: - html:/var/www/html ports: - 80:80 environment: - WORDPRESS_DB_HOST=mysql:3306 - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress networks: - net
volumes:
mysql_data: html:
networks:
net:
</syntaxhighlight>
Mongo Counter Example
- create an empty directory called mc-app
- copy content from httpd (Dockerfile and html directory) and mongodb (Dockerfile) directories created previously
- create a docker-compose.yml file containing below configuration
<syntaxhighlight lang="Bash"> version: '3' services:
httpd: build: ./httpd image: kamilbaran/training:httpd network_mode: host mongo: build: ./mongo image: kamilbaran/training:mongo network_mode: host
</syntaxhighlight>
- in order to build all images at once and start entire application run below command
<syntaxhighlight lang="Bash"> $ docker-compose up --build -d </syntaxhighlight>
- more information about options available in docker-compose files: docs.docker.com/compose/compose-file