Last year, Dockercon attracted 78,000 registrants, 21,000 conversations across 193 countries. This year, it was an even much bigger event attracting over 90,000+ attendees. With tons of speakers, tracks, and community rooms, it was a 1-day busy event with exciting announcements, talks & community room sessions. This year, Docker Compose 2.0 was announced for the first time as a first-class citizen for Docker CLI. It was a long-awaited feature and finally, the Docker community was super happy to see this being shipped with Docker Desktop for Mac & Windows by default.
In this blog post, I will share the overall experience around the newer docker compose
CLI.
#1 You don’t need to install Docker Compose as a separate package
Yes, you heard it right. Docker Desktop for Mac and for Windows version 3.2.1 and above includes the new Compose command along with the Docker CLI. Therefore, Windows and Mac users do not need to install the Compose CLI separately.
docker compose version
Docker Compose version 2.0.0-beta.1
#2 Full Compatibility with older Docker Compose CLI
The Docker CLI now supports the compose
command, including most of the docker-compose
features and flags, without the need for a separate tool. You can replace the dash (-
) with a space when you use docker-compose
to switch over to docker compose
. You can also use them interchangeably, so that you are not locked-in with the new compose
command and, if needed, you can still use docker-compose
.
$ docker-compose up -d
#3 You can now specify the name of the project flawlessly
The newer Compose v2 comes with CLI option to specify the project name as shown below:
% docker compose --project-name --help
Usage: docker compose [OPTIONS] COMMAND
Docker Compose
Options:
--ansi string Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
--env-file string Specify an alternate environment file.
-f, --file stringArray Compose configuration files
--profile stringArray Specify a profile to enable
--project-directory string Specify an alternate working directory
(default: the path of the Compose file)
-p, --project-name string Project name
Let us try out a simple wordpress example. Below is a sample WordPress Docker compose file.
version: "3.6"
services:
db:
image: mysql:5.7
volumes:
- db_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
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
Let us use the newer Docker compose CLI and try to run WordPress app using a new project name.
% docker compose --project-name demo up -d
[+] Running 2/2
⠿ Container demo_db_1 Running 0.0s
⠿ Container demo_wordpress_1 Running
Verify the services:
% docker compose ls
NAME STATUS
demo running(2)
Please note: In the earlier release of Docker Compose, one has to run the Compose CLI from a specific directory where the compose file used to reside. But with the newer release, you don’t need to worry about it.
#4 The docker compose "ls VS ps"
With the newer Docker Compose CLI, there are two distinct CLIs – the “ls” and “ps”. The “ls” list running compose projects whereas “ps” lists containers.
ajeetraina@Ajeets-MacBook-Pro wordpress % docker compose up -d
[+] Running 3/3
⠿ Network wordpress_default Created 3.9s
⠿ Container wordpress_db_1 Started 2.2s
⠿ Container wordpress_wordpress_1 Started 5.8s
ajeetraina@Ajeets-MacBook-Pro wordpress % docker compose ps
NAME SERVICE STATUS PORTS
wordpress_db_1 db running 3306/tcp, 33060/tcp
wordpress_wordpress_1 wordpress running 0.0.0.0:80->80/tcp, :::80->80/tcp
ajeetraina@Ajeets-MacBook-Pro wordpress % docker compose ls
NAME STATUS
wordpress running(2)
ajeetraina@Ajeets-MacBook-Pro wordpress % docker compose ps
NAME SERVICE STATUS PORTS
wordpress_db_1 db running 3306/tcp, 33060/tcp
wordpress_wordpress_1 wordpress running 0.0.0.0:80->80/tcp, :::80->80/tcp
#5 Checking the logs
docker compose logs -f wordpress
wordpress_1 | WordPress not found in /var/www/html - copying now...
wordpress_1 | Complete! WordPress has been successfully copied to /var/www/html
wordpress_1 | No 'wp-config.php' found in /var/www/html, but 'WORDPRESS_...' variables supplied; copying 'wp-config-docker.php' (WORDPRESS_DB_HOST WORDPRESS_DB_PASSWORD)
wordpress_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.21.0.3. Set the 'ServerName' directive globally to suppress this message
wordpress_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.21.0.3. Set the 'ServerName' directive globally to suppress this message
wordpress_1 | [Fri May 28 23:49:11.020711 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.19 configured -- resuming normal operations
wordpress_1 | [Fri May 28 23:49:11.020767 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
#6 A new Compose convert CLI
The new “Compose convert” command converts the compose file to platform’s canonical format. It’s the alias of the same config CLI that was introduced long back in Docker Compose binaries.
docker compose convert --help --services
Usage: docker compose convert SERVICES
Converts the compose file to platform's canonical format
Aliases:
convert, config
Options:
--format string Format the output. Values: [yaml | json] (default "yaml")
--hash string Print the service config hash, one per line.
--no-interpolate Don't interpolate environment variables.
--profiles Print the profile names, one per line.
-q, --quiet Only validate the configuration, don't print anything.
--resolve-image-digests Pin image tags to digests.
--services Print the service names, one per line.
--volumes Print the volume names, one per line.
ajeetraina@Ajeets-MacBook-Pro wordpress % docker compose convert --services
wordpress
db
ajeetraina@Ajeets-MacBook-Pro wordpress % docker compose config --services
db
wordpress
ajeetraina@Ajeets-MacBook-Pro wordpr
Comments are closed.