Skip to content

Commit 1279d2c

Browse files
committed
[FAB-13436] multistage docker build
Change-Id: I376057f62cd7df29c31a22c8c6248f7192183939 Signed-off-by: Artem Barger <bartem@il.ibm.com>
1 parent eed77e5 commit 1279d2c

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

fabric-chaincode-docker/Dockerfile

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,71 @@
1-
FROM hyperledger/fabric-baseimage:amd64-0.4.14
1+
FROM hyperledger/fabric-baseimage:amd64-0.4.14 as builder
22
RUN apt-get update
33
RUN apt-get install zip -y
4-
RUN curl -s "https://get.sdkman.io" | bash
4+
RUN curl -s "https://get.sdkman.io" | bash
55

66
SHELL ["/bin/bash", "-c"]
77

8-
# Install gradle and maven
98
RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install gradle 4.6
109
RUN source /root/.sdkman/bin/sdkman-init.sh; sdk install maven 3.5.0
1110

11+
FROM hyperledger/fabric-baseimage:amd64-0.4.14 as dependencies
12+
COPY --from=builder /root/.sdkman/candidates/gradle/current /usr/bin/gradle
13+
COPY --from=builder /root/.sdkman/candidates/maven/current /usr/bin/maven
14+
15+
ENV PATH="/usr/bin/maven/bin:/usr/bin/maven/:/usr/bin/gradle:/usr/bin/gradle/bin:${PATH}"
16+
1217
# Coping libs, scripts and sources
1318
ADD build/distributions/ /root/
1419

1520
#Creating folders structure
1621
RUN mkdir -p /root/chaincode-java/chaincode/src
1722
RUN mkdir -p /root/chaincode-java/chaincode/build/out
18-
RUN mkdir -p /chaincode/input
19-
RUN mkdir -p /chaincode/output
2023

2124
#Making scripts runnable
2225
RUN chmod +x /root/chaincode-java/start
2326
RUN chmod +x /root/chaincode-java/build.sh
2427

2528
# Start build shim jars
2629
WORKDIR /root/chaincode-java/shim-src
27-
RUN source /root/.sdkman/bin/sdkman-init.sh; gradle clean
30+
RUN gradle clean
2831

2932
# Building protobuf jar and installing it to maven local and gradle cache
3033
WORKDIR /root/chaincode-java/shim-src/fabric-chaincode-protos
31-
RUN source /root/.sdkman/bin/sdkman-init.sh; gradle clean build install publishToMavenLocal
34+
RUN gradle clean build install publishToMavenLocal
3235
# Installing all jar dependencies to maven local
3336
WORKDIR /root/chaincode-java/shim-src/fabric-chaincode-protos/build/publications/protosJar/
34-
RUN source /root/.sdkman/bin/sdkman-init.sh; mvn -f pom-default.xml compile
37+
RUN mvn -f pom-default.xml compile
3538

3639
# Building shim jar and installing it to maven local and gradle cache
3740
WORKDIR /root/chaincode-java/shim-src/fabric-chaincode-shim
38-
RUN source /root/.sdkman/bin/sdkman-init.sh; gradle clean build install publishToMavenLocal
41+
RUN gradle clean build install publishToMavenLocal
3942
# Installing all jar dependencies to maven local
4043
WORKDIR /root/chaincode-java/shim-src/fabric-chaincode-shim/build/publications/shimJar/
41-
RUN source /root/.sdkman/bin/sdkman-init.sh; mvn -f pom-default.xml compile
44+
RUN mvn -f pom-default.xml compile
4245

4346
# Sanity check and maven/gradle plugin installs - compiling sample chaincode - gradle and maven
4447
WORKDIR /root/chaincode-java/example-src/fabric-chaincode-example-gradle
45-
RUN source /root/.sdkman/bin/sdkman-init.sh; gradle build shadowJar
48+
RUN gradle build shadowJar
4649
WORKDIR /root/chaincode-java/example-src/fabric-chaincode-example-maven
47-
RUN source /root/.sdkman/bin/sdkman-init.sh; mvn compile package
50+
RUN mvn compile package
4851
WORKDIR /root/chaincode-java
4952

5053
#Removing non-needed sources
51-
RUN rm -rf example-src/*
54+
RUN rm -rf example-src
5255
RUN rm -rf shim-src
56+
57+
# Creating final javaenv image which will include all required
58+
# dependencies to build and compile java chaincode
59+
FROM hyperledger/fabric-baseimage:amd64-0.4.14
60+
COPY --from=builder /root/.sdkman/candidates/gradle/current /usr/bin/gradle
61+
COPY --from=builder /root/.sdkman/candidates/maven/current /usr/bin/maven
62+
63+
ENV PATH="/usr/bin/maven/bin:/usr/bin/maven/:/usr/bin/gradle:/usr/bin/gradle/bin:${PATH}"
64+
65+
COPY --from=dependencies /root/chaincode-java /root/chaincode-java
66+
COPY --from=dependencies /root/.m2 /root/.m2
67+
68+
RUN mkdir -p /chaincode/input
69+
RUN mkdir -p /chaincode/output
70+
71+
WORKDIR /root/chaincode-java

0 commit comments

Comments
 (0)