Tuto Docker | Gérer vos container avec Docker compose

Article publiée le 10 Février 2017

Après mon tuto sur Docker (http://journaldunadminlinux.fr/tuto-docker-demarrer-avec-docker/) je continue dans ma lancée en vous présentant l’outil docker-compose. Docker-compose est un outil officiel Docker  absolument génial qui permet de gérer à 100% vos container uniquement avec un fichier de configuration yml. Cet outil est d’autant plus pratique si vos applications nécessite l’installation de plusieurs containers pour fonctionner.

I) Installation

L’installation est très simple (curl doit être installé sur votre machine):

curl -L https://github.com/docker/compose/releases/download/1.11.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

 

La commande docker-compose doit fonctionner:

 

2) Utiliser Docker Compose

Pour vous montrer comment fonctionne docker-compose je vais prendre comme exemple l’installation d’un GITLAB complet sous Docker (base de données + application).

Après une petite recherche, on trouve facilement un template d’une configuration docker-compose.yml:

version: ‘2’

services:
redis:
restart: always
image: sameersbn/redis:latest
command:
– –loglevel warning
volumes:
– /srv/docker/gitlab/redis:/var/lib/redis:Z

postgresql:
restart: always
image: sameersbn/postgresql:9.6-2
volumes:
– /srv/docker/gitlab/postgresql:/var/lib/postgresql:Z
environment:
– DB_USER=gitlab
– DB_PASS=password
– DB_NAME=gitlabhq_production
– DB_EXTENSION=pg_trgm

gitlab:
restart: always
image: sameersbn/gitlab:8.16.4
depends_on:
– redis
– postgresql
ports:
– « 10080:80 »
– « 10022:22″
volumes:
– /srv/docker/gitlab/gitlab:/home/git/data:Z
environment:
– DEBUG=false

– DB_ADAPTER=postgresql
– DB_HOST=postgresql
– DB_PORT=5432
– DB_USER=gitlab
– DB_PASS=password
– DB_NAME=gitlabhq_production

– REDIS_HOST=redis
– REDIS_PORT=6379

– TZ=Asia/Kolkata
– GITLAB_TIMEZONE=Kolkata

– GITLAB_HTTPS=false
– SSL_SELF_SIGNED=false

– GITLAB_HOST=localhost
– GITLAB_PORT=10080
– GITLAB_SSH_PORT=10022
– GITLAB_RELATIVE_URL_ROOT=
– GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
– GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
– GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string

– GITLAB_ROOT_PASSWORD=
– GITLAB_ROOT_EMAIL=

– GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
– GITLAB_NOTIFY_PUSHER=false

[email protected]
[email protected]
[email protected]

– GITLAB_BACKUP_SCHEDULE=daily
– GITLAB_BACKUP_TIME=01:00

– SMTP_ENABLED=false
– SMTP_DOMAIN=www.example.com
– SMTP_HOST=smtp.gmail.com
– SMTP_PORT=587
[email protected]
– SMTP_PASS=password
– SMTP_STARTTLS=true
– SMTP_AUTHENTICATION=login

– IMAP_ENABLED=false
– IMAP_HOST=imap.gmail.com
– IMAP_PORT=993
[email protected]
– IMAP_PASS=password
– IMAP_SSL=true
– IMAP_STARTTLS=false

– OAUTH_ENABLED=false
– OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=
– OAUTH_ALLOW_SSO=
– OAUTH_BLOCK_AUTO_CREATED_USERS=true
– OAUTH_AUTO_LINK_LDAP_USER=false
– OAUTH_AUTO_LINK_SAML_USER=false
– OAUTH_EXTERNAL_PROVIDERS=

– OAUTH_CAS3_LABEL=cas3
– OAUTH_CAS3_SERVER=
– OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false
– OAUTH_CAS3_LOGIN_URL=/cas/login
– OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate
– OAUTH_CAS3_LOGOUT_URL=/cas/logout

– OAUTH_GOOGLE_API_KEY=
– OAUTH_GOOGLE_APP_SECRET=
– OAUTH_GOOGLE_RESTRICT_DOMAIN=

– OAUTH_FACEBOOK_API_KEY=
– OAUTH_FACEBOOK_APP_SECRET=

– OAUTH_TWITTER_API_KEY=
– OAUTH_TWITTER_APP_SECRET=

– OAUTH_GITHUB_API_KEY=
– OAUTH_GITHUB_APP_SECRET=
– OAUTH_GITHUB_URL=
– OAUTH_GITHUB_VERIFY_SSL=

– OAUTH_GITLAB_API_KEY=
– OAUTH_GITLAB_APP_SECRET=

– OAUTH_BITBUCKET_API_KEY=
– OAUTH_BITBUCKET_APP_SECRET=

– OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=
– OAUTH_SAML_IDP_CERT_FINGERPRINT=
– OAUTH_SAML_IDP_SSO_TARGET_URL=
– OAUTH_SAML_ISSUER=
– OAUTH_SAML_LABEL= »Our SAML Provider »
– OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient
– OAUTH_SAML_GROUPS_ATTRIBUTE=
– OAUTH_SAML_EXTERNAL_GROUPS=
– OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=
– OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=
– OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=
– OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=

– OAUTH_CROWD_SERVER_URL=
– OAUTH_CROWD_APP_NAME=
– OAUTH_CROWD_APP_PASSWORD=

– OAUTH_AUTH0_CLIENT_ID=
– OAUTH_AUTH0_CLIENT_SECRET=
– OAUTH_AUTH0_DOMAIN=

– OAUTH_AZURE_API_KEY=
– OAUTH_AZURE_API_SECRET=
– OAUTH_AZURE_TENANT_ID=

 

Le fichier docker-compose ci-dessus va créer 3 container: deux container pour GITLAB et un pour PostgresSQL. Le fichier contient tout les paramètres de connexions à la base données, de l’applicatif, réseau (avec le mapping des ports) ainsi que le répertoire des volumes persistants très utile notamment pour les tablespaces de la base de données PostGRESQL.

 

Une fois le fichier docker-compose adapté à vos besoins, il ne reste plus qu’à builder vos container. Pour cela veillez à être dans le répertoire contenant votre fichier docker-compose.yml puis lancez la commande suivante pour builder les containers:

docker-compose up -d

On vérifie la présence des containers:

Comme prévus, trois containers ont été créés: un pour la base de données et deux pour GITLAB).

Dans le fichier docker-compose.yml (aussi via votre docker ps -a) il est indiqué que le port 80 du container est mappé sur le port 10080 accessible depuis l’extérieur.

Il ne reste plus qu’à tester (http://ip ou DNS de votre machine :10080):

3) Les commandes utiles

Les commandes ci-dessous sont à utiliser quand vous êtes positionné dans le répertoire contenant le  fichier docker-compose.yml:

Stopper le/les containers
docker-compose stop

Démarrer le/les containers
docker-compose start

Supprimer le/les containers
docker-compose rm

Builder le/les Containers
docker-compose up -d

Check des logs
docker logs -f <nom de container>