From 159be8fee79b5fd03c6bfac9c0ae630aaed7ff50 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Wed, 27 Dec 2023 17:21:55 +0100 Subject: [PATCH] Remove dockerize in favor of docker-compose features (#247) * Use Github Actions for CI * #219 Upgrade to docker-compose v3 * #219 Remove dockerize from the Dockerfile and add some healthcheck and depends_on to the docker-compose.yml * #219 Complete Dockerize removal --- README.md | 3 +- docker-compose.yml | 101 ++++++++++++++++++++++++++++++++------------- docker/Dockerfile | 10 ----- pom.xml | 3 -- 4 files changed, 75 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 231a89005..c40425c10 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,8 @@ Alternatively you can also build all the images on Podman, which requires Podman Once images are ready, you can start them with a single command `docker-compose up` or `podman-compose up`. -Containers startup order is coordinated with [`dockerize` script](https://github.com/jwilder/dockerize). +Containers startup order is coordinated with the `service_healthy` condition of the Docker Compose [depends-on](https://github.com/compose-spec/compose-spec/blob/master/spec.md#depends_on) expression +and the [healthcheck](https://github.com/compose-spec/compose-spec/blob/master/spec.md#healthcheck) of the service containers. After starting services, it takes a while for API Gateway to be in sync with service registry, so don't be scared of initial Spring Cloud Gateway timeouts. You can track services availability using Eureka dashboard available by default at http://localhost:8761. diff --git a/docker-compose.yml b/docker-compose.yml index c06448582..49ab25958 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,71 +1,106 @@ -version: '2' +version: '3' services: config-server: image: springcommunity/spring-petclinic-config-server container_name: config-server - mem_limit: 512M + deploy: + resources: + limits: + memory: 512M + healthcheck: + test: ["CMD", "curl", "-I", "http://config-server:8888"] + interval: 5s + timeout: 5s + retries: 10 ports: - 8888:8888 discovery-server: image: springcommunity/spring-petclinic-discovery-server container_name: discovery-server - mem_limit: 512M + deploy: + resources: + limits: + memory: 512M + healthcheck: + test: ["CMD", "curl", "-f", "http://discovery-server:8761"] + interval: 5s + timeout: 3s + retries: 10 depends_on: - - config-server - entrypoint: ["./dockerize","-wait=tcp://config-server:8888","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] + config-server: + condition: service_healthy ports: - 8761:8761 customers-service: image: springcommunity/spring-petclinic-customers-service container_name: customers-service - mem_limit: 512M + deploy: + resources: + limits: + memory: 512M depends_on: - - config-server - - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] + config-server: + condition: service_healthy + discovery-server: + condition: service_healthy ports: - 8081:8081 visits-service: image: springcommunity/spring-petclinic-visits-service container_name: visits-service - mem_limit: 512M + deploy: + resources: + limits: + memory: 512M depends_on: - - config-server - - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] + config-server: + condition: service_healthy + discovery-server: + condition: service_healthy ports: - 8082:8082 vets-service: image: springcommunity/spring-petclinic-vets-service container_name: vets-service - mem_limit: 512M + deploy: + resources: + limits: + memory: 512M depends_on: - - config-server - - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] + config-server: + condition: service_healthy + discovery-server: + condition: service_healthy ports: - 8083:8083 api-gateway: image: springcommunity/spring-petclinic-api-gateway container_name: api-gateway - mem_limit: 512M + deploy: + resources: + limits: + memory: 512M depends_on: - - config-server - - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] + config-server: + condition: service_healthy + discovery-server: + condition: service_healthy ports: - 8080:8080 tracing-server: image: openzipkin/zipkin container_name: tracing-server - mem_limit: 512M + deploy: + resources: + limits: + memory: 512M environment: - JAVA_OPTS=-XX:+UnlockExperimentalVMOptions -Djava.security.egd=file:/dev/./urandom ports: @@ -74,11 +109,15 @@ services: admin-server: image: springcommunity/spring-petclinic-admin-server container_name: admin-server - mem_limit: 512M + deploy: + resources: + limits: + memory: 512M depends_on: - - config-server - - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] + config-server: + condition: service_healthy + discovery-server: + condition: service_healthy ports: - 9090:9090 @@ -87,13 +126,19 @@ services: grafana-server: build: ./docker/grafana container_name: grafana-server - mem_limit: 256M + deploy: + resources: + limits: + memory: 256M ports: - 3000:3000 prometheus-server: build: ./docker/prometheus container_name: prometheus-server - mem_limit: 256M + deploy: + resources: + limits: + memory: 256M ports: - 9091:9090 diff --git a/docker/Dockerfile b/docker/Dockerfile index be157c33f..b9f789b63 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,20 +4,10 @@ ARG ARTIFACT_NAME COPY ${ARTIFACT_NAME}.jar application.jar RUN java -Djarmode=layertools -jar application.jar extract -# Download dockerize and cache that layer -ARG DOCKERIZE_VERSION -RUN wget -O dockerize.tar.gz https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz -RUN tar xzf dockerize.tar.gz -RUN chmod +x dockerize - FROM eclipse-temurin:17 - WORKDIR application -# Dockerize -COPY --from=builder application/dockerize ./ - ARG EXPOSED_PORT EXPOSE ${EXPOSED_PORT} diff --git a/pom.xml b/pom.xml index 0a0ad34e6..2481f4849 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,6 @@ springcommunity 9090 ${basedir} - v0.6.1 docker @@ -153,8 +152,6 @@ ARTIFACT_NAME=${project.build.finalName} --build-arg EXPOSED_PORT=${docker.image.exposed.port} - --build-arg - DOCKERIZE_VERSION=${docker.image.dockerize.version} -t ${docker.image.prefix}/${project.artifactId} ${project.build.directory}