qt5base-lts/tests/testserver/docker-compose.yml
Ryan Chu 713f77176e Support multi-stage builds to provision the configurations and test data
In order to reuse the test server to the external modules, it is much
easier to share the common configurations (scripts) and test data via
Dockerfile. In addition, the external module can create more layers
depending on their needs. Therefore, supporting multi-stage builds is
needed. The disadvantage is that the docker-compose needs to re-build
the images every time. However, it is just a one-time effort. If the
Dockerfile doesn't get changed, the extra build time can be ignored.

Because of multi-stage builds, the test server will keep a Dockerfile at
least. Therefore, the volume sharing is no more needed. The test data of
a service can be added into the images by using COPY/ADD commands.

NOTE:
This patch relies on docker-compose v1.21.0 (docker-compose build now
supports the use of Dockerfile from outside the build context).

Change-Id: Ib3f6a5fcf6979732ae8a40a494a1360fca4ac7bf
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-04-25 15:32:57 +00:00

158 lines
5.4 KiB
YAML

version: '3.4'
# The tag of images is used by docker compose file to launch the corresponding
# docker containers. The value of tag comes from the provisioning script
# (coin/provisioning/.../testserver/docker_testserver.sh). The script gets SHA-1
# of each server context as the tag of docker images. If one of the server
# contexts gets changes, please make sure to update this compose file as well.
# You can run command 'docker images' to list all the tag of test server images.
# For example:
# REPOSITORY TAG
# qt-test-server-apache2 537fe302f61851d1663f41495230d8e3554a4a13
services:
apache2:
container_name: qt-test-server-apache2
domainname: ${TEST_DOMAIN}
hostname: apache2
build:
context: .
dockerfile: ${SHARED_DATA}/Dockerfile
args:
provisioningImage: qt-test-server-apache2:537fe302f61851d1663f41495230d8e3554a4a13
shareDir: ./common
serviceDir: ./apache2
test_domain: ${TEST_DOMAIN}
entrypoint: service/startup.sh
command: [service/ssl.sh, service/apache2.sh]
squid:
container_name: qt-test-server-squid
domainname: ${TEST_DOMAIN}
hostname: squid
depends_on:
- apache2
external_links:
- apache2:apache2.${TEST_DOMAIN}
- cyrus:cyrus.${TEST_DOMAIN}
- iptables:iptables.${TEST_DOMAIN}
- vsftpd:vsftpd.${TEST_DOMAIN}
- echo:echo.${TEST_DOMAIN}
build:
context: .
dockerfile: ${SHARED_DATA}/Dockerfile
args:
provisioningImage: qt-test-server-squid:9c32f41b19aca3d778733c4d8fb0ecc5955e893c
shareDir: ./common
serviceDir: ./squid
test_domain: ${TEST_DOMAIN}
entrypoint: service/startup.sh
command: service/squid.sh
vsftpd:
container_name: qt-test-server-vsftpd
domainname: ${TEST_DOMAIN}
hostname: vsftpd
build:
context: .
dockerfile: ${SHARED_DATA}/Dockerfile
args:
provisioningImage: qt-test-server-vsftpd:f3a9c8d793a77cc007c0e4e481bec01f9e3eeb7e
shareDir: ./common
serviceDir: ./vsftpd
test_domain: ${TEST_DOMAIN}
entrypoint: service/startup.sh
command: service/vsftpd.sh
ftp-proxy:
container_name: qt-test-server-ftp-proxy
domainname: ${TEST_DOMAIN}
hostname: ftp-proxy
depends_on:
- vsftpd
external_links:
- vsftpd:vsftpd.${TEST_DOMAIN}
build:
context: .
dockerfile: ${SHARED_DATA}/Dockerfile
args:
provisioningImage: qt-test-server-ftp-proxy:d7de8b28392d173db512a558ccc84ead8bece2ae
shareDir: ./common
serviceDir: ./ftp-proxy
test_domain: ${TEST_DOMAIN}
entrypoint: service/startup.sh
command: service/ftp-proxy.sh
danted:
container_name: qt-test-server-danted
domainname: ${TEST_DOMAIN}
hostname: danted
depends_on:
- apache2
- vsftpd
- ftp-proxy
external_links:
- apache2:apache2.${TEST_DOMAIN}
- vsftpd:vsftpd.${TEST_DOMAIN}
- ftp-proxy:ftp-proxy.${TEST_DOMAIN}
- cyrus:cyrus.${TEST_DOMAIN}
- echo:echo.${TEST_DOMAIN}
build:
context: .
dockerfile: ${SHARED_DATA}/Dockerfile
args:
provisioningImage: qt-test-server-danted:35607f9b790524cf9690c7d12a9a401696b7b6b5
shareDir: ./common
serviceDir: ./danted
test_domain: ${TEST_DOMAIN}
entrypoint: service/startup.sh
command: service/danted.sh
cyrus:
container_name: qt-test-server-cyrus
domainname: ${TEST_DOMAIN}
hostname: cyrus
build:
context: .
dockerfile: ${SHARED_DATA}/Dockerfile
args:
provisioningImage: qt-test-server-cyrus:c8d72754abc0e501afd624ce838e4df35505abc9
shareDir: ./common
serviceDir: ./cyrus
test_domain: ${TEST_DOMAIN}
entrypoint: service/startup.sh
command: [service/ssl.sh, service/cyrus.sh]
iptables:
container_name: qt-test-server-iptables
domainname: ${TEST_DOMAIN}
hostname: iptables
build:
context: .
dockerfile: ${SHARED_DATA}/Dockerfile
args:
provisioningImage: qt-test-server-iptables:cb7a8bd6d28602085a88c8ced7d67e28e75781e2
shareDir: ./common
serviceDir: ./iptables
test_domain: ${TEST_DOMAIN}
entrypoint: service/startup.sh
command: service/iptables.sh
cap_add:
- NET_ADMIN
- NET_RAW
echo:
container_name: qt-test-server-echo
domainname: ${TEST_DOMAIN}
hostname: echo
build:
context: .
dockerfile: ${SHARED_DATA}/Dockerfile
args:
provisioningImage: qt-test-server-echo:b29ad409e746a834c1055fd0f7a55fd5056da6ea
shareDir: ./common
serviceDir: ./echo
test_domain: ${TEST_DOMAIN}
entrypoint: service/startup.sh
command: service/echo.sh