From 318c08ae8b7e68e41a21791a5f6243f7b1075f0f Mon Sep 17 00:00:00 2001 From: Michael Werner <xaseron@googlemail.com> Date: Mon, 15 Oct 2018 11:44:52 +0200 Subject: [PATCH] Update to alpine and dockerize (#107) * Add alpine jre and dockerize script * Add docker build argument DOCKERIZE_VERSION * Increase memory limit * Use dockerize instead of wait-for-it script * Update documentation dockerize script * Remove unnecessary ports * Revert "Remove unnecessary ports" This reverts commit a605aaf * Set memory limit to 512M * Merge openzipkin * Remove obsolete links * Fix honoring memory limits for openzipkin --- README.md | 2 +- docker-compose.yml | 54 ++++++++++++++-------------------------------- docker/Dockerfile | 13 ++++++----- pom.xml | 2 ++ 4 files changed, 27 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index a9cb873e..3bbc55f2 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ You can tell Config Server to use your local Git repository by using `local` Spr ## Starting services locally with docker-compose In order to start entire infrastructure using Docker, you have to build images by executing `./mvnw clean install -PbuildDocker` from a project root. Once images are ready, you can start them with a single command -`docker-compose up`. Containers startup order is coordinated with [`wait-for-it.sh` script](https://github.com/vishnubob/wait-for-it). +`docker-compose up`. Containers startup order is coordinated with [`dockerize` script](https://github.com/jwilder/dockerize). After starting services it takes a while for API Gateway to be in sync with service registry, so don't be scared of initial Zuul 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 2c2e9fef..b825dd5d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,102 +3,80 @@ services: config-server: image: mszarlinski/spring-petclinic-config-server container_name: config-server - mem_limit: 256M + mem_limit: 512M ports: - 8888:8888 discovery-server: image: mszarlinski/spring-petclinic-discovery-server container_name: discovery-server - mem_limit: 256M - links: - - config-server + mem_limit: 512M depends_on: - config-server - entrypoint: ["./wait-for-it.sh","config-server:8888","--timeout=60","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://config-server:8888","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ports: - 8761:8761 customers-service: image: mszarlinski/spring-petclinic-customers-service container_name: customers-service - mem_limit: 256M - links: - - config-server - - discovery-server - - tracing-server + mem_limit: 512M depends_on: - config-server - discovery-server - entrypoint: ["./wait-for-it.sh","discovery-server:8761","--timeout=60","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ports: - 8081:8081 visits-service: image: mszarlinski/spring-petclinic-visits-service container_name: visits-service - mem_limit: 256M - links: - - config-server - - discovery-server - - tracing-server + mem_limit: 512M depends_on: - config-server - discovery-server - entrypoint: ["./wait-for-it.sh","discovery-server:8761","--timeout=60","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ports: - 8082:8082 vets-service: image: mszarlinski/spring-petclinic-vets-service container_name: vets-service - mem_limit: 256M - links: - - config-server - - discovery-server - - tracing-server + mem_limit: 512M depends_on: - config-server - discovery-server - entrypoint: ["./wait-for-it.sh","discovery-server:8761","--timeout=60","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ports: - 8083:8083 api-gateway: image: mszarlinski/spring-petclinic-api-gateway container_name: api-gateway - mem_limit: 256M - links: - - config-server - - discovery-server - - customers-service - - visits-service - - vets-service - - tracing-server + mem_limit: 512M depends_on: - config-server - discovery-server - entrypoint: ["./wait-for-it.sh","discovery-server:8761","--timeout=60","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ports: - 8080:8080 tracing-server: image: openzipkin/zipkin container_name: tracing-server - mem_limit: 256M + mem_limit: 512M + environment: + - JAVA_OPTS=-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Djava.security.egd=file:/dev/./urandom ports: - 9411:9411 admin-server: image: mszarlinski/spring-petclinic-admin-server container_name: admin-server - mem_limit: 256M - links: - - config-server - - discovery-server + mem_limit: 512M depends_on: - config-server - discovery-server - entrypoint: ["./wait-for-it.sh","discovery-server:8761","--timeout=60","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ports: - 9090:9090 diff --git a/docker/Dockerfile b/docker/Dockerfile index 6f244ce0..00b01670 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,11 +1,14 @@ -FROM openjdk:8 +FROM openjdk:8-jre-alpine VOLUME /tmp -ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh wait-for-it.sh -RUN bash -c 'chmod +x wait-for-it.sh' +ARG DOCKERIZE_VERSION ARG ARTIFACT_NAME ARG EXPOSED_PORT -ADD ${ARTIFACT_NAME}.jar /app.jar ENV SPRING_PROFILES_ACTIVE docker -RUN bash -c 'touch /app.jar' + +ADD https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz dockerize.tar.gz +RUN tar xzf dockerize.tar.gz +RUN chmod +x dockerize +ADD ${ARTIFACT_NAME}.jar /app.jar +RUN touch /app.jar EXPOSE ${EXPOSED_PORT} ENTRYPOINT ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] diff --git a/pom.xml b/pom.xml index 75224611..f61e9d6f 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ <docker.image.prefix>mszarlinski</docker.image.prefix> <docker.image.exposed.port>9090</docker.image.exposed.port> <docker.image.dockerfile.dir>${basedir}</docker.image.dockerfile.dir> + <docker.image.dockerize.version>v0.6.1</docker.image.dockerize.version> <docker.plugin.version>0.4.13</docker.plugin.version> </properties> @@ -168,6 +169,7 @@ <buildArgs> <ARTIFACT_NAME>${project.build.finalName}</ARTIFACT_NAME> <EXPOSED_PORT>${docker.image.exposed.port}</EXPOSED_PORT> + <DOCKERIZE_VERSION>${docker.image.dockerize.version}</DOCKERIZE_VERSION> </buildArgs> </configuration> </plugin> -- GitLab