10 Features of Docker-compose

DevOps

MOTOSHARE 🚗🏍️
Turning Idle Vehicles into Shared Rides & Earnings

From Idle to Income. From Parked to Purpose.
Earn by Sharing, Ride by Renting.
Where Owners Earn, Riders Move.
Owners Earn. Riders Move. Motoshare Connects.

With Motoshare, every parked vehicle finds a purpose. Owners earn. Renters ride.
🚀 Everyone wins.

Start Your Journey with Motoshare

1. Main feature – Put configuration of all App Layers in 1 place

Specify logically as “Services” all the docker containers needed for different parts of your overall application.
For ex: – WebApp, Business service, DB Layer and even the networking needed along with necessary information like ports.

Also can specify which service depends on what.

version: '2'
services:
  wordpress:
    image: wordpress:latest # https://hub.docker.com/_/wordpress/
    ports:
      - 80:80 # change ip if required
    volumes:
      - ./wp-app:/var/www/html # Full wordpress project
      #- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Plugin development
      #- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Theme development
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: password
    depends_on:
      - db
    networks:
      - wordpress-network
  db:
    image: mysql:latest # https://hub.docker.com/_/mysql/ - or mariadb https://hub.docker.com/_/mariadb
    ports:
      - 3306:3306 # change ip if required
    volumes:
      - ./wp-data:/docker-entrypoint-initdb.d
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_ROOT_PASSWORD: password
    networks:
      - wordpress-network
networks:
  wordpress-network:
      driver: bridgeCode language: PHP (php)

2. Start your App services in 1 shot – Docker-compose up

[root@ip-172-31-17-58 try-compose]# docker-compose up -d
Creating network "try-compose_wordpress-network" with driver "bridge"
Creating try-compose_db_1 ... done
Creating try-compose_wordpress_1 ... doneCode language: PHP (php)

3.Key ways to stop app in 1 shot – Docker-compose stop v/s Docker-compose down

Stop – stops the containers brought up

Down – stops, removes the containers brought up and also removes any extra resources used by services such as network

[root@ip-172-31-17-58 try-compose]# docker-compose stop
Stopping try-compose_wordpress_1 ... done
Stopping try-compose_db_1        ... done

[root@ip-172-31-17-58 try-compose]# docker-compose down
Stopping try-compose_wordpress_1 ... done
Stopping try-compose_db_1        ... done
<strong>Removing try-compose_wordpress_1 ... done
Removing try-compose_db_1        ... done
Removing network try-compose_wordpress-network</strong>Code language: PHP (php)

4. Monitor your App services – Docker-compose logs and Docker-compose ps

For example on entering the WordPress install in English (US) – we get all the logs from Web app layer of wordpress and also the MYSQL DB layer of wordpress

[root@ip-172-31-17-58 try-compose]# <strong>docker-compose logs</strong>
Attaching to try-compose_wordpress_1, try-compose_db_1
wordpress_1  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.29.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.29.0.3. Set the 'ServerName' directive globally to suppress this message
wordpress_1  | [Wed Sep 15 04:40:09.192406 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.48 (Debian) PHP/7.4.23 configured -- resuming normal operations
wordpress_1  | [Wed Sep 15 04:40:09.192471 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
db_1         | 2021-09-15 04:40:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.26-1debian10 started.
db_1         | 2021-09-15 04:40:08+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
db_1         | 2021-09-15 04:40:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.26-1debian10 started.
db_1         | 2021-09-15 04:40:08+00:00 [Note] [Entrypoint]: Initializing database files
db_1         | 2021-09-15T04:40:08.816031Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.26) initializing of server in progress as process 42
db_1         | 2021-09-15T04:40:08.825151Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
db_1         | 2021-09-15T04:40:09.450146Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
db_1         | 2021-09-15T04:40:10.906616Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
db_1         | 2021-09-15T04:40:10.907011Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
db_1         | 2021-09-15T04:40:11.007476Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
[root@ip-172-31-17-58 try-compose]# docker-compose logs
Attaching to try-compose_wordpress_1, try-compose_db_1
wordpress_1  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.29.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.29.0.3. Set the 'ServerName' directive globally to suppress this message
wordpress_1  | [Wed Sep 15 04:40:09.192406 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.48 (Debian) PHP/7.4.23 configured -- resuming normal operations
wordpress_1  | [Wed Sep 15 04:40:09.192471 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "POST /wp-admin/install.php?step=1 HTTP/1.1" 200 2807 "http://13.232.89.6:82/wp-admin/install.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-includes/js/zxcvbn-async.min.js?ver=1.0 HTTP/1.1" 200 605 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-includes/js/dist/vendor/regenerator-runtime.min.js?ver=0.13.7 HTTP/1.1" 200 2750 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-includes/js/dist/hooks.min.js?ver=a7edae857aab69d69fa10d5aef23a5de HTTP/1.1" 200 2142 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0 HTTP/1.1" 200 6383 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-includes/js/dist/i18n.min.js?ver=5f1269854226b4dd90450db411a12b79 HTTP/1.1" 200 4209 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-admin/js/password-strength-meter.min.js?ver=5.8.1 HTTP/1.1" 200 971 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-includes/js/wp-util.min.js?ver=5.8.1 HTTP/1.1" 200 1055 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-includes/js/underscore.min.js?ver=1.13.1 HTTP/1.1" 200 7670 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-admin/js/user-profile.min.js?ver=5.8.1 HTTP/1.1" 200 2637 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /favicon.ico HTTP/1.1" 302 404 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1" 200 400400 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
wordpress_1  | 49.36.187.126 - - [15/Sep/2021:04:40:29 +0000] "GET /wp-admin/install.php HTTP/1.1" 200 4556 "http://13.232.89.6:82/wp-admin/install.php?step=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
db_1         | 2021-09-15 04:40:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.26-1debian10 started.
db_1         | 2021-09-15 04:40:08+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
db_1         | 2021-09-15 04:40:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.26-1debian10 started.
db_1         | 2021-09-15 04:40:08+00:00 [Note] [Entrypoint]: Initializing database files
db_1         | 2021-09-15T04:40:08.816031Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.26) initializing of server in progress as process 42
db_1         | 2021-09-15T04:40:08.825151Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
db_1         | 2021-09-15T04:40:09.450146Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
db_1         | 2021-09-15T04:40:10.906616Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
db_1         | 2021-09-15T04:40:10.907011Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
db_1         | 2021-09-15T04:40:11.007476Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
db_1         | 2021-09-15 04:40:15+00:00 [Note] [Entrypoint]: Database files initialized
db_1         | 2021-09-15 04:40:15+00:00 [Note] [Entrypoint]: Starting temporary server
db_1         | 2021-09-15T04:40:15.306380Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.26) starting as process 91
db_1         | 2021-09-15T04:40:15.324692Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
db_1         | 2021-09-15T04:40:15.504943Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
db_1         | 2021-09-15T04:40:15.786511Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
db_1         | 2021-09-15T04:40:15.786674Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
db_1         | 2021-09-15T04:40:15.787895Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
db_1         | 2021-09-15T04:40:15.788090Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
db_1         | 2021-09-15T04:40:15.790796Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
db_1         | 2021-09-15T04:40:15.820388Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock
db_1         | 2021-09-15T04:40:15.820536Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.26'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server - GPL.
db_1         | 2021-09-15 04:40:15+00:00 [Note] [Entrypoint]: Temporary server started.
db_1         | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
db_1         | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
db_1         | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
db_1         | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
db_1         | 2021-09-15 04:40:18+00:00 [Note] [Entrypoint]: Creating database wordpress
db_1         |
db_1         | 2021-09-15 04:40:18+00:00 [Note] [Entrypoint]: Stopping temporary server
db_1         | 2021-09-15T04:40:18.231800Z 11 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.26).
db_1         | 2021-09-15T04:40:19.563106Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.26)  MySQL Community Server - GPL.
db_1         | 2021-09-15 04:40:20+00:00 [Note] [Entrypoint]: Temporary server stopped
db_1         |
db_1         | 2021-09-15 04:40:20+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
db_1         |
db_1         | 2021-09-15T04:40:20.495844Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.26) starting as process 1
db_1         | 2021-09-15T04:40:20.507915Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
db_1         | 2021-09-15T04:40:20.697659Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
db_1         | 2021-09-15T04:40:20.933634Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
db_1         | 2021-09-15T04:40:20.933803Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
db_1         | 2021-09-15T04:40:20.935014Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
db_1         | 2021-09-15T04:40:20.935234Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
db_1         | 2021-09-15T04:40:20.938492Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
db_1         | 2021-09-15T04:40:20.963025Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
db_1         | 2021-09-15T04:40:20.963544Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.26'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.Code language: PHP (php)

5. Manage other lifecycle events of app in 1 shot

[root@ip-172-31-17-58 try-compose]# <strong>docker-compose restart</strong>
Restarting try-compose_wordpress_1 ... done
Restarting try-compose_db_1        ... doneCode language: PHP (php)
[root@ip-172-31-17-58 try-compose]# docker-compose pause
Pausing try-compose_db_1        ... done
Pausing try-compose_wordpress_1 ... done
[root@ip-172-31-17-58 try-compose]# docker-compose ps
Name                        Command               State                           Ports
-----------------------------------------------------------------------------------------------------------------------
try-compose_db_1          docker-entrypoint.sh mysqld      Paused   0.0.0.0:3307->3306/tcp,:::3307->3306/tcp, 33060/tcp
try-compose_wordpress_1   docker-entrypoint.sh apach ...   Paused   0.0.0.0:82->80/tcp,:::82->80/tcpCode language: PHP (php)
root@ip-172-31-17-58 try-compose]# docker-compose unpause
Unpausing try-compose_wordpress_1 ... done
Unpausing try-compose_db_1        ... doneCode language: PHP (php)

6. Scale your App together or specific services

[root@ip-172-31-17-58 try-compose]# <strong>docker-compose scale db=0</strong>
WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
Stopping and removing try-compose_db_1 ... done
[root@ip-172-31-17-58 try-compose]#<strong> docker-compose scale db=1</strong>
WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
Creating try-compose_db_1 ... doneCode language: HTML, XML (xml)

7. Get back app config in 1 shot

[root@ip-172-31-17-58 try-compose]# <strong>docker-compose config</strong>
networks:
wordpress-network:
driver: bridge
services:
db:
environment:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: password
image: mysql:latest
networks:
wordpress-network: null
ports:
- published: 3307
target: 3306
volumes:
- /home/centos/aarushi/try-compose/wp-data:/docker-entrypoint-initdb.d:rw
wordpress:
depends_on:
db:
condition: service_started
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_USER: root
image: wordpress:latest
networks:
wordpress-network: null
ports:
- published: 82
target: 80
volumes:
- /home/centos/aarushi/try-compose/wp-app:/var/www/html:rw
version: '2'Code language: PHP (php)

8. Get finer details for all containers running for entire app

Process level info


[root@ip-172-31-17-58 try-compose]# <strong>docker-compose top</strong>
try-compose_db_1
UID      PID    PPID    C   STIME   TTY     TIME      CMD
-------------------------------------------------------------
polkitd   15533   15512   0   04:57   ?     00:00:01   mysqld
try-compose_wordpress_1
UID     PID    PPID    C   STIME   TTY     TIME             CMD
------------------------------------------------------------------------
root   15395   15376   0   04:57   ?     00:00:00   apache2 -DFOREGROUND
33     15476   15395   0   04:57   ?     00:00:00   apache2 -DFOREGROUND
33     15477   15395   0   04:57   ?     00:00:00   apache2 -DFOREGROUND
33     15478   15395   0   04:57   ?     00:00:00   apache2 -DFOREGROUND
33     15479   15395   0   04:57   ?     00:00:00   apache2 -DFOREGROUND
33     15480   15395   0   04:57   ?     00:00:00   apache2 -DFOREGROUND
Code language: PHP (php)

9 . Pull/Push service images in an app together

[root@ip-172-31-17-58 try-compose]# <strong>docker-compose pull</strong>
Pulling db        ... done
Pulling wordpress ... done
[root@ip-172-31-17-58 try-compose]# docker images | grep word
wordpress              latest    5a38e52b30bf   4 days ago     618MB
wordpress              4.5       c7441ac916f3   5 years ago    422MB
[root@ip-172-31-17-58 try-compose]# docker images | grep mysql
mysql                  latest    0716d6ebcc1a   11 days ago    514MB
Code language: PHP (php)

10. Execute commands for running containers in app

[root@ip-172-31-17-58 try-compose]# <strong>docker-compose exec db /bin/bash</strong>
root@cef92d1cba17:/# ls
bin   dev                         entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint-initdb.d  etc            lib   media  opt  root  sbin  sys  usrCode language: PHP (php)