This tutorial shows how you can use Docker compose tool to manage multiple contains from a single YAML configuration file.
Managing multiple containers individually can soon become troublesome if you have lots of containers. For a simpler Docker administration you can use a more advanced tool like dockercompose which lets you manage multiple containers from a single configuration file.
Behind the scenes, the dockercompose tool leverages the Docker engine for pulling images, building the images, starting the containers in a correct order, and making the right links among the containers and services.
Install Docker Compose
You can install Docker compose by pulling it from Docker’s github repoository with the following script:
$ curl -L https://github.com/docker/compose/releases/download/1.5.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
Next, make sure that the dockercompose has the right permissions and then start it:
$ chmod +x /usr/local/bin/dockercompose
The dockercompose tool orchestrates containers using the dockercompose.yml configuration file. This file defines the services to be executed, the relationships between them and their runtime properties. You need to use the YAML syntax in this file, which specifies for each service a list of keys:values; hence it is an human readable file.
Let’s see how we can configure the connection between WildFly and MySQL using the following dockercompose.yml configuration file:
mysqldb: image: mysql:latest environment: MYSQL_DATABASE: sampledb MYSQL_USER: mysql MYSQL_PASSWORD: mysql MYSQL_ROOT_PASSWORD: admin mywildfly: image: jboss/wildfly links: mysqldb:db ports: 8080:8080 9990:9990
The content of this file is pretty readable. It contains two Docker images, described using the YAML format. You can start dockercompose in detached mode as follows:
dockercompose up -d
Some logs will be emitted to inform you that the images are getting started:
Recreating wildflymysql_mysqldb_1... Creating jboss/wildfly_wildfly_1...
Now you can check that the two Docker process are active:
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f3710f16e747 wildflymysql:latest "/opt/jboss/wildfly/b" 3 minutes ago Up 3 minutes 0.0.0.0:8080>8080/tcp, 0.0.0.0:9990>9990/tcp jboss_wildfly_mywildfly_1 6cdb1f6dd9ee mysql:latest "/entrypoint.sh mysql" 3 minutes ago Up 3 minutes 3306/tcp jboss_wildfly_mysqldb_1
You can now test connecting the application server to MySQL, just remember to check the IP address which has been assigned to the new mysql image:
$ sudo docker inspect f '{{ .NetworkSettings.IPAddress }}' 6cdb1f6dd9ee 172.16.0.6