EXEMPLE 1
version: '3.3' services: logstash: image: logstash:5.5.2 depends_on: - elasticsearch volumes: - ./logstash.conf:/config/logstash.conf - ./log:/var/log:ro command: ["logstash", "-f", "/config/logstash.conf"] elasticsearch: image: elasticsearch:5.5.2 environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ports: - 9200:9200 kibana: image: kibana:5.5.2 depends_on: - elasticsearch ports: - 5601:5601
Avec le fichier logstash.conf suivant dans le répertoire courant :
Commande : logstash.conf
input { file { path => ["/var/log/*.log"] start_position => "beginning" type => "nginx" } } filter { grok { match => [ "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}"] overwrite => [ "message" ] } mutate { convert => ["response", "integer"] convert => ["bytes", "integer"] convert => ["responsetime", "float"] } geoip { source => "clientip" target => "geoip" add_tag => [ "nginx-geoip" ] } date { match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] remove_field => [ "timestamp" ] } useragent { source => "agent" } } output { elasticsearch { hosts => ["elasticsearch:9200"] } stdout { codec => rubydebug } }
Avec le fichier log/nginx.log suivant utilisé pour les tests :
Commande : log/nginx.log
46.218.112.178 - - [19/Oct/2018:14:17:04 +0000] "GET /api/object/5996fc0f4c06fb000f83b7 HTTP/1.1" 200 501 "https://mydomain.net/map" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0" "-"
EXEMPLE 2
version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress volumes: db_data:
Référence : Quickstart: Compose and WordPress
EXEMPLE 3
version: "3" services: vote: build: ./vote command: python app.py volumes: - ./vote:/app ports: - "5000:80" networks: - front-tier - back-tier result: build: ./result command: nodemon --debug server.js volumes: - ./result:/app ports: - "5001:80" - "5858:5858" networks: - front-tier - back-tier worker: build: context: ./worker networks: - back-tier redis: image: redis:alpine container_name: redis ports: ["6379"] networks: - back-tier db: image: postgres:9.4 container_name: db volumes: - "db-data:/var/lib/postgresql/data" networks: - back-tier volumes: db-data: networks: front-tier: back-tier:
EXEMPLE 4
version: "3" services: redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: placement: constraints: [node.role == manager] vote: image: dockersamples/examplevotingapp_vote:before ports: - "5000:80" networks: - frontend depends_on: - redis deploy: replicas: 2 update_config: parallelism: 2 restart_policy: condition: on-failure result: image: dockersamples/examplevotingapp_result:before ports: - "5001:80" networks: - backend depends_on: - db deploy: replicas: 1 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure worker: image: dockersamples/examplevotingapp_worker networks: - frontend - backend deploy: mode: replicated replicas: 1 labels: [APP=VOTING] restart_policy: condition: on-failure delay: 10s max_attempts: 3 window: 120s placement: constraints: [node.role == manager] visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" stop_grace_period: 1m30s volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: frontend: backend: volumes: db-data:
EXEMPLE 5
version: '3.3' services: proxy: image: nginx:1.12.2 configs: - source: server_config target: /etc/nginx/nginx.conf mode: 0444 uid: '33' gid: '33' - source: server_cert target: /etc/ssl/certs/server.crt mode: 0444 uid: '33' gid: '33' secrets: - source: server_key target: /etc/ssl/certs/server.key mode: 0400 uid: '33' gid: '33' ports: - "80:80" - "443:443" deploy: restart_policy: condition: on-failure api: image: lucj/city:1.0 deploy: restart_policy: condition: on-failure configs: server_config: file: ./nginx.conf server_cert: file: ./server-cert.pem secrets: server_key: file: ./server-key.pem
EXEMPLE 6
La version 3 de docker-compose permet l’utilisation des secrets, à l’instar des stacks Docker.
Le montage des secrets se fait sous forme de fichiers (et non d’externals) implicitement dans le répertoire /run/secrets/.
A utiliser en développement et non en production.
version: "3.1" services: psql: image: postgres secrets: - psql_user - psql_password environment: POSTGRES_PASSWORD_FILE: /run/secrets/psql_password POSTGRES_USER_FILE: /run/secrets/psql_user secrets: psql_user: file: ./psql_user.txt psql_password: file: ./psql_password.txt