Skip to content

Commit 5dbd1f0

Browse files
committed
[BUILD] Refactor make to simplify rules
It is not strictly necessary to create the -src base image since we can just use a volume mount in its place. There is also quite a bit of repetition in the build process right now. Therefore, this patch refactors the build to eliminate the -src image as well as consolidates/simplifies a few things. This sets the stage for more precise Dockerfile tunings (such as EXPOSE/CMD on a per-daemon basis) Change-Id: Ib0ff8e461eb4ba661b201eb519609b3f35ceab13 Signed-off-by: Greg Haskins <[email protected]>
1 parent 6d24ea7 commit 5dbd1f0

File tree

7 files changed

+50
-71
lines changed

7 files changed

+50
-71
lines changed

Makefile

+31-61
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ K := $(foreach exec,$(EXECUTABLES),\
6262

6363
GOSHIM_DEPS = $(shell ./scripts/goListFiles.sh $(PKGNAME)/core/chaincode/shim | sort | uniq)
6464
JAVASHIM_DEPS = $(shell git ls-files core/chaincode/shim/java)
65+
PROTOS = $(shell git ls-files *.proto | grep -v vendor)
6566
PROJECT_FILES = $(shell git ls-files)
66-
IMAGES = src ccenv peer javaenv orderer
67+
IMAGES = peer orderer ccenv javaenv
6768

6869
pkgmap.peer := $(PKGNAME)/peer
6970
pkgmap.orderer := $(PKGNAME)/orderer
@@ -132,22 +133,18 @@ build/bin/chaintool: Makefile
132133
@mkdir -p $(@D)
133134
@cp $^ $@
134135

135-
# JIRA FAB-243 - Mark build/docker/bin artifacts explicitly as secondary
136-
# since they are never referred to directly. This prevents
137-
# the makefile from deleting them inadvertently.
138-
.SECONDARY: build/docker/bin/peer build/docker/bin/orderer
139-
140136
# We (re)build a package within a docker context but persist the $GOPATH/pkg
141137
# directory so that subsequent builds are faster
142-
build/docker/bin/%: build/image/src/.dummy $(PROJECT_FILES)
138+
build/docker/bin/%: $(PROJECT_FILES)
143139
$(eval TARGET = ${patsubst build/docker/bin/%,%,${@}})
144140
@echo "Building $@"
145141
@mkdir -p build/docker/bin build/docker/pkg
146142
@docker run -i \
147143
--user=$(UID) \
148144
-v $(abspath build/docker/bin):/opt/gopath/bin \
149145
-v $(abspath build/docker/pkg):/opt/gopath/pkg \
150-
hyperledger/fabric-src:$(DOCKER_TAG) \
146+
-v $(abspath .):/opt/gopath/src/$(PKGNAME) \
147+
hyperledger/fabric-baseimage:$(BASE_DOCKER_TAG) \
151148
go install -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F))
152149
@touch $@
153150

@@ -165,76 +162,49 @@ build/bin/%: $(PROJECT_FILES)
165162
@echo "Binary available as $@"
166163
@touch $@
167164

168-
# Special override for src-image
169-
build/image/src/.dummy: $(PROJECT_FILES)
170-
@echo "Building docker src-image"
171-
@mkdir -p $(@D)
172-
@cat images/src/Dockerfile.in \
173-
| sed -e 's/_BASE_TAG_/$(BASE_DOCKER_TAG)/g' \
174-
| sed -e 's/_TAG_/$(DOCKER_TAG)/g' \
175-
> $(@D)/Dockerfile
176-
@git ls-files | tar -jcT - > $(@D)/gopath.tar.bz2
177-
docker build -t $(PROJECT_NAME)-src $(@D)
178-
docker tag $(PROJECT_NAME)-src $(PROJECT_NAME)-src:$(DOCKER_TAG)
179-
@touch $@
180-
181-
# Special override for ccenv-image (chaincode-environment)
182-
build/image/ccenv/.dummy: build/image/ccenv/bin/protoc-gen-go build/image/ccenv/bin/chaintool build/image/ccenv/goshim.tar.bz2 Makefile
183-
@echo "Building docker ccenv-image"
184-
@cat images/ccenv/Dockerfile.in \
185-
| sed -e 's/_BASE_TAG_/$(BASE_DOCKER_TAG)/g' \
186-
| sed -e 's/_TAG_/$(DOCKER_TAG)/g' \
187-
> $(@D)/Dockerfile
188-
docker build -t $(PROJECT_NAME)-ccenv $(@D)
189-
docker tag $(PROJECT_NAME)-ccenv $(PROJECT_NAME)-ccenv:$(DOCKER_TAG)
190-
@touch $@
191-
192-
# Special override for java-image
193-
# Following items are packed and sent to docker context while building image
194-
# 1. Java shim layer source code
195-
# 2. Proto files used to generate java classes
196-
# 3. Gradle settings file
197-
build/image/javaenv/.dummy: Makefile $(JAVASHIM_DEPS)
198-
@echo "Building docker javaenv-image"
199-
@mkdir -p $(@D)
200-
@cat images/javaenv/Dockerfile.in \
201-
| sed -e 's/_BASE_TAG_/$(BASE_DOCKER_TAG)/g' \
202-
| sed -e 's/_TAG_/$(DOCKER_TAG)/g' \
203-
> $(@D)/Dockerfile
204-
# Following items are packed and sent to docker context while building image
205-
# 1. Java shim layer source code
206-
# 2. Proto files used to generate java classes
207-
# 3. Gradle settings file
208-
@git ls-files core/chaincode/shim/java | tar -jcT - > $(@D)/javashimsrc.tar.bz2
209-
@git ls-files protos core/chaincode/shim/table.proto settings.gradle | tar -jcT - > $(@D)/protos.tar.bz2
210-
docker build -t $(PROJECT_NAME)-javaenv $(@D)
211-
docker tag $(PROJECT_NAME)-javaenv $(PROJECT_NAME)-javaenv:$(DOCKER_TAG)
212-
@touch $@
165+
# payload definitions'
166+
build/image/ccenv/payload: build/docker/bin/protoc-gen-go \
167+
build/bin/chaintool \
168+
build/goshim.tar.bz2
169+
build/image/javaenv/payload: build/javashim.tar.bz2 \
170+
build/protos.tar.bz2 \
171+
settings.gradle
172+
build/image/peer/payload: build/docker/bin/peer \
173+
peer/core.yaml \
174+
msp/peer-config.json
175+
build/image/orderer/payload: build/docker/bin/orderer \
176+
orderer/orderer.yaml
177+
178+
build/image/%/payload:
179+
mkdir -p $@
180+
cp $^ $@
213181

214-
# Default rule for image creation
215-
build/image/%/.dummy: build/image/src/.dummy build/docker/bin/%
182+
build/image/%/.dummy: Makefile build/image/%/payload
216183
$(eval TARGET = ${patsubst build/image/%/.dummy,%,${@}})
217184
@echo "Building docker $(TARGET)-image"
218-
@mkdir -p $(@D)/bin
219-
@cat images/app/Dockerfile.in \
185+
@cat images/$(TARGET)/Dockerfile.in \
220186
| sed -e 's/_BASE_TAG_/$(BASE_DOCKER_TAG)/g' \
221187
| sed -e 's/_TAG_/$(DOCKER_TAG)/g' \
222188
> $(@D)/Dockerfile
223-
cp build/docker/bin/$(TARGET) $(@D)/bin
224189
docker build -t $(PROJECT_NAME)-$(TARGET) $(@D)
225190
docker tag $(PROJECT_NAME)-$(TARGET) $(PROJECT_NAME)-$(TARGET):$(DOCKER_TAG)
226191
@touch $@
227192

228-
%/goshim.tar.bz2: $(GOSHIM_DEPS) Makefile
193+
build/goshim.tar.bz2: $(GOSHIM_DEPS)
229194
@echo "Creating $@"
230195
@tar -jhc -C $(GOPATH)/src $(patsubst $(GOPATH)/src/%,%,$(GOSHIM_DEPS)) > $@
231196

197+
build/javashim.tar.bz2: $(JAVASHIM_DEPS)
198+
build/protos.tar.bz2: $(PROTOS)
199+
200+
build/%.tar.bz2:
201+
@echo "Creating $@"
202+
@tar -jc $^ > $@
203+
232204
.PHONY: protos
233205
protos: gotools
234206
./scripts/compile_protos.sh
235207

236-
src-image-clean: ccenv-image-clean peer-image-clean orderer-image-clean
237-
238208
%-image-clean:
239209
$(eval TARGET = ${patsubst %-image-clean,%,${@}})
240210
-docker images -q $(PROJECT_NAME)-$(TARGET) | xargs docker rmi -f

images/app/Dockerfile.in

-4
This file was deleted.

images/ccenv/Dockerfile.in

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
FROM hyperledger/fabric-baseimage:_BASE_TAG_
2-
COPY bin/* /usr/local/bin/
3-
ADD goshim.tar.bz2 $GOPATH/src/
2+
COPY payload/chaintool payload/protoc-gen-go /usr/local/bin/
3+
ADD payload/goshim.tar.bz2 $GOPATH/src/

images/javaenv/Dockerfile.in

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ FROM openjdk:8
22
RUN wget https://services.gradle.org/distributions/gradle-2.12-bin.zip -P /tmp --quiet
33
RUN unzip -q /tmp/gradle-2.12-bin.zip -d /opt && rm /tmp/gradle-2.12-bin.zip
44
RUN ln -s /opt/gradle-2.12/bin/gradle /usr/bin
5-
ADD javashimsrc.tar.bz2 /root
6-
ADD protos.tar.bz2 /root
5+
ADD payload/javashim.tar.bz2 /root
6+
ADD payload/protos.tar.bz2 /root
7+
ADD payload/settings.gradle /root
78
WORKDIR /root
89
# Build java shim after copying proto files from fabric/proto
910
RUN core/chaincode/shim/java/javabuild.sh

images/orderer/Dockerfile.in

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM hyperledger/fabric-baseimage:_BASE_TAG_
2+
RUN mkdir -p /var/hyperledger/db /etc/hyperledger/fabric
3+
COPY payload/orderer /usr/local/bin
4+
COPY payload/orderer.yaml /etc/hyperledger/fabric
5+
WORKDIR /etc/hyperledger/fabric
6+
EXPOSE 5151
7+
CMD orderer

images/peer/Dockerfile.in

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM hyperledger/fabric-baseimage:_BASE_TAG_
2+
ENV PEER_CFG_PATH /etc/hyperledger/fabric
3+
RUN mkdir -p /var/hyperledger/db $PEER_CFG_PATH/msp
4+
COPY payload/peer /usr/local/bin
5+
COPY payload/core.yaml $PEER_CFG_PATH
6+
COPY payload/peer-config.json $PEER_CFG_PATH/msp
7+
CMD peer node start

images/src/Dockerfile.in

-2
This file was deleted.

0 commit comments

Comments
 (0)