631 lines
15 KiB
YAML
631 lines
15 KiB
YAML
version: '3.4'
|
|
|
|
x-workdir:
|
|
&workdir-volume
|
|
type: volume
|
|
source: workdir
|
|
target: /workdir
|
|
volume:
|
|
nocopy: true
|
|
|
|
volumes:
|
|
workdir:
|
|
|
|
services:
|
|
# This is a dummy container that we use to create volume and keep it
|
|
# accessible while other containers are down.
|
|
workdir:
|
|
image: alpine
|
|
volumes:
|
|
- *workdir-volume
|
|
command:
|
|
- sleep
|
|
- "86400"
|
|
|
|
consul-primary:
|
|
image: "consul-dev"
|
|
command:
|
|
- "agent"
|
|
- "-dev"
|
|
- "-datacenter"
|
|
- "primary"
|
|
- "-config-dir"
|
|
- "/workdir/primary/consul"
|
|
- "-client"
|
|
- "0.0.0.0"
|
|
volumes:
|
|
- *workdir-volume
|
|
ports:
|
|
# Exposing to host makes debugging locally a bit easier
|
|
- "8500:8500"
|
|
- "8502:8502"
|
|
# For zipkin which uses this containers network
|
|
- 9411:9411
|
|
# Jaeger UI
|
|
- 16686:16686
|
|
|
|
s1:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s1"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8080"
|
|
- "-grpc-port"
|
|
- ":8079"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-primary
|
|
|
|
s2:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s2"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8181"
|
|
- "-grpc-port"
|
|
- ":8179"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-primary
|
|
|
|
s2-v1:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s2-v1"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8182"
|
|
- "-grpc-port"
|
|
- ":8178"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-primary
|
|
|
|
s2-v2:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s2-v2"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8183"
|
|
- "-grpc-port"
|
|
- ":8177"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-primary
|
|
|
|
s3:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s3"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8282"
|
|
- "-grpc-port"
|
|
- ":8279"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-primary
|
|
|
|
s3-v1:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s3-v1"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8283"
|
|
- "-grpc-port"
|
|
- ":8278"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-primary
|
|
|
|
s3-v2:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s3-v2"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8284"
|
|
- "-grpc-port"
|
|
- ":8277"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-primary
|
|
|
|
s3-alt:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s3-alt"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8286"
|
|
- "-grpc-port"
|
|
- ":8280"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-primary
|
|
|
|
s1-sidecar-proxy:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/s1-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
s2-sidecar-proxy:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/s2-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
s2-v1-sidecar-proxy:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/s2-v1-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
s2-v2-sidecar-proxy:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/s2-v2-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
s3-sidecar-proxy:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/s3-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
s3-v1-sidecar-proxy:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/s3-v1-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
s3-v2-sidecar-proxy:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/s3-v2-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
s3-alt-sidecar-proxy:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/s3-alt-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
verify-primary:
|
|
depends_on:
|
|
- consul-primary
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile-bats
|
|
tty: true
|
|
environment:
|
|
- ENVOY_VERSION
|
|
command:
|
|
- "--pretty"
|
|
- "/workdir/primary/bats"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
s1-sidecar-proxy-consul-exec:
|
|
depends_on:
|
|
- consul-primary
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile-consul-envoy
|
|
args:
|
|
ENVOY_VERSION: ${ENVOY_VERSION}
|
|
image: consul-dev-envoy:${ENVOY_VERSION}
|
|
command:
|
|
- "consul"
|
|
- "connect"
|
|
- "envoy"
|
|
- "-sidecar-for"
|
|
- "s1"
|
|
- "-envoy-version"
|
|
- ${ENVOY_VERSION}
|
|
- "--"
|
|
- "-l"
|
|
- "debug"
|
|
network_mode: service:consul-primary
|
|
|
|
fake-statsd:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "alpine/socat"
|
|
command:
|
|
- -u
|
|
- UDP-RECVFROM:8125,fork,reuseaddr
|
|
# This magic incantation is needed since Envoy doesn't add newlines and so
|
|
# we need each packet to be passed to echo to add a new line before
|
|
# appending.
|
|
- SYSTEM:'xargs -0 echo >> /workdir/primary/statsd/statsd.log'
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
wipe-volumes:
|
|
volumes:
|
|
- *workdir-volume
|
|
image: alpine
|
|
command:
|
|
- sh
|
|
- -c
|
|
- 'rm -rf /workdir/*'
|
|
|
|
# This is a debugging tool run docker-compose up dump-volumes to see the
|
|
# current state.
|
|
dump-volumes:
|
|
volumes:
|
|
- *workdir-volume
|
|
- ./:/cwd
|
|
image: alpine
|
|
command:
|
|
- cp
|
|
- -r
|
|
- /workdir/.
|
|
- /cwd/workdir/
|
|
|
|
zipkin:
|
|
volumes:
|
|
- *workdir-volume
|
|
image: openzipkin/zipkin
|
|
network_mode: service:consul-primary
|
|
|
|
jaeger:
|
|
volumes:
|
|
- *workdir-volume
|
|
image: jaegertracing/all-in-one:1.11
|
|
network_mode: service:consul-primary
|
|
command:
|
|
- --collector.zipkin.http-port=9411
|
|
|
|
consul-secondary:
|
|
image: "consul-dev"
|
|
command:
|
|
- "agent"
|
|
- "-dev"
|
|
- "-datacenter"
|
|
- "secondary"
|
|
- "-config-dir"
|
|
- "/workdir/secondary/consul"
|
|
- "-client"
|
|
- "0.0.0.0"
|
|
volumes:
|
|
- *workdir-volume
|
|
ports:
|
|
# Exposing to host makes debugging locally a bit easier
|
|
- "9500:8500"
|
|
- "9502:8502"
|
|
|
|
s1-secondary:
|
|
depends_on:
|
|
- consul-secondary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s1-secondary"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8080"
|
|
- "-grpc-port"
|
|
- ":8079"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-secondary
|
|
|
|
s2-secondary:
|
|
depends_on:
|
|
- consul-secondary
|
|
image: "fortio/fortio"
|
|
environment:
|
|
- "FORTIO_NAME=s2-secondary"
|
|
command:
|
|
- "server"
|
|
- "-http-port"
|
|
- ":8181"
|
|
- "-grpc-port"
|
|
- ":8179"
|
|
- "-redirect-port"
|
|
- "disabled"
|
|
network_mode: service:consul-secondary
|
|
|
|
s1-sidecar-proxy-secondary:
|
|
depends_on:
|
|
- consul-secondary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/secondary/envoy/s1-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-secondary
|
|
|
|
s2-sidecar-proxy-secondary:
|
|
depends_on:
|
|
- consul-secondary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/secondary/envoy/s2-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-secondary
|
|
|
|
gateway-primary:
|
|
depends_on:
|
|
- consul-primary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/primary/envoy/mesh-gateway-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
|
|
gateway-secondary:
|
|
depends_on:
|
|
- consul-secondary
|
|
image: "envoyproxy/envoy:v${ENVOY_VERSION}"
|
|
command:
|
|
- "envoy"
|
|
- "-c"
|
|
- "/workdir/secondary/envoy/mesh-gateway-bootstrap.json"
|
|
- "-l"
|
|
- "debug"
|
|
# Hot restart breaks since both envoys seem to interact with each other
|
|
# despite separate containers that don't share IPC namespace. Not quite
|
|
# sure how this happens but may be due to unix socket being in some shared
|
|
# location?
|
|
- "--disable-hot-restart"
|
|
- "--drain-time-s"
|
|
- "1"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-secondary
|
|
|
|
verify-primary:
|
|
depends_on:
|
|
- consul-primary
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile-bats
|
|
tty: true
|
|
environment:
|
|
- ENVOY_VERSION
|
|
command:
|
|
- "--pretty"
|
|
- "/workdir/primary/bats"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-primary
|
|
pid: host
|
|
|
|
verify-secondary:
|
|
depends_on:
|
|
- consul-secondary
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile-bats
|
|
tty: true
|
|
environment:
|
|
- ENVOY_VERSION
|
|
command:
|
|
- "--pretty"
|
|
- "/workdir/secondary/bats"
|
|
volumes:
|
|
- *workdir-volume
|
|
network_mode: service:consul-secondary
|
|
pid: host
|
|
|
|
tcpdump-primary:
|
|
depends_on:
|
|
- consul-primary
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile-tcpdump
|
|
|
|
# we cant do this in circle but its only here to temporarily enable.
|
|
volumes:
|
|
- type: bind
|
|
source: ./${LOG_DIR}
|
|
target: /data
|
|
command: -v -i any -w /data/primary.pcap
|
|
network_mode: service:consul-primary
|
|
|
|
tcpdump-secondary:
|
|
depends_on:
|
|
- consul-secondary
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile-tcpdump
|
|
|
|
# we cant do this in circle but its only here to temporarily enable.
|
|
volumes:
|
|
- type: bind
|
|
source: ./${LOG_DIR}
|
|
target: /data
|
|
command: -v -i any -w /data/secondary.pcap
|
|
network_mode: service:consul-secondary
|
|
|
|
|