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