Skip to content

Commit b22dedb

Browse files
authored
Merge pull request #1651 from hunchback/docker-image-refactor
ci: refactor create docker image
2 parents 58f3ca1 + 8a10bb1 commit b22dedb

File tree

3 files changed

+90
-55
lines changed

3 files changed

+90
-55
lines changed

Makefile

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -524,50 +524,6 @@ docker-image: static
524524
cp $$GOPATH/bin/skydive contrib/docker/skydive.$$(uname -m)
525525
docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} --build-arg ARCH=$$(uname -m) -f contrib/docker/Dockerfile contrib/docker/
526526

527-
.PHONY: docker-build
528-
docker-build:
529-
docker build -t skydive-compile \
530-
--build-arg UID=$$(id -u) \
531-
-f contrib/docker/Dockerfile.compile contrib/docker
532-
docker volume create govendor-cache
533-
docker volume create gobuild-cache
534-
docker rm skydive-compile-build || true
535-
docker run --name skydive-compile-build \
536-
--env UID=$$(id -u) \
537-
--volume $$PWD:/root/go/src/github.com/skydive-project/skydive \
538-
--volume govendor-cache:/root/go/.cache/govendor \
539-
--volume gobuild-cache:/root/.cache/go-build \
540-
skydive-compile
541-
docker cp skydive-compile-build:/root/go/bin/skydive contrib/docker/skydive.$$(uname -m)
542-
docker rm skydive-compile-build
543-
docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} \
544-
--label "Version=${VERSION}" \
545-
--build-arg ARCH=$$(uname -m) \
546-
-f contrib/docker/Dockerfile contrib/docker/
547-
548-
.PHONY: docker-cross-build
549-
docker-cross-build: ebpf.build
550-
docker build -t skydive-crosscompile-${TARGET_GOARCH} \
551-
$${TARGET_ARCH:+--build-arg TARGET_ARCH=$${TARGET_ARCH}} \
552-
$${TARGET_GOARCH:+--build-arg TARGET_GOARCH=$${TARGET_GOARCH}} \
553-
$${DEBARCH:+--build-arg DEBARCH=$${DEBARCH}} \
554-
--build-arg UID=$$(id -u) \
555-
-f contrib/docker/Dockerfile.crosscompile contrib/docker
556-
docker volume create govendor-cache
557-
docker rm skydive-crosscompile-build-${TARGET_GOARCH} || true
558-
docker run --name skydive-crosscompile-build-${TARGET_GOARCH} \
559-
--env UID=$$(id -u) \
560-
--volume $$PWD:/root/go/src/github.com/skydive-project/skydive \
561-
--volume govendor-cache:/root/go/.cache/govendor \
562-
skydive-crosscompile-${TARGET_GOARCH}
563-
docker cp skydive-crosscompile-build-${TARGET_GOARCH}:/root/go/bin/linux_${TARGET_GOARCH}/skydive contrib/docker/skydive.${TARGET_GOARCH}
564-
docker rm skydive-crosscompile-build-${TARGET_GOARCH}
565-
docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} \
566-
--label "Version=${VERSION}" \
567-
--build-arg ARCH=${TARGET_GOARCH} \
568-
$${BASE:+--build-arg BASE=$${BASE}} \
569-
-f contrib/docker/Dockerfile.static contrib/docker/
570-
571527
SKYDIVE_PROTO_FILES:= \
572528
flow/flow.proto \
573529
filters/filters.proto \

contrib/docker/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
ARG BASE=ubuntu:18.04
22
FROM $BASE
3-
ARG ARCH=x86_64
3+
ARG ARCH=amd64
44
RUN apt-get -y update \
55
&& apt-get -y install openvswitch-common libpcap0.8 libxml2 libvirt0 \
66
&& rm -rf /var/lib/apt/lists/*

scripts/ci/create-docker-image.sh

Lines changed: 89 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,95 @@ if [ "${DOCKER_IMAGE%/*/*}" != "${DOCKER_IMAGE}" ]; then
2121
DOCKER_SERVER=${DOCKER_IMAGE%/*/*}
2222
fi
2323

24+
DOCKER_DIR=contrib/docker
25+
GOVENDOR_VOL=govendor-cache
26+
GOVENDOR_DIR=/root/go/.cache/govendor
27+
GOBUILD_VOL=gobuild-cache
28+
GOBUILD_DIR=/root/.cache/go-build
29+
TOPLEVEL_VOL=$PWD
30+
TOPLEVEL_DIR=/root/go/src/github.com/skydive-project/skydive
31+
32+
docker_tag() {
33+
local arch=$1
34+
echo ${DOCKER_TAG}-linux-${arch}
35+
}
36+
37+
docker_skydive_builder() {
38+
local arch=$1
39+
local dockerfile=$2
40+
41+
# create docker image of builder and build skydive
42+
local tag=skydive-compile
43+
local image=skydive-compile-build
44+
local uid=$( id -u )
45+
docker build -t $tag \
46+
${TARGET_ARCH:+--build-arg TARGET_ARCH=${TARGET_ARCH}} \
47+
${TARGET_GOARCH:+--build-arg TARGET_GOARCH=${TARGET_GOARCH}} \
48+
${DEBARCH:+--build-arg DEBARCH=${DEBARCH}} \
49+
--build-arg UID=$uid \
50+
-f $DOCKER_DIR/$dockerfile $DOCKER_DIR
51+
docker volume create $GOVENDOR_VOL
52+
docker volume create $GOBUILD_VOL
53+
docker rm $image || true
54+
docker run --name $image \
55+
--env UID=$uid \
56+
--volume $TOPLEVEL_VOL:$TOPLEVEL_DIR \
57+
--volume $GOVENDOR_VOL:$GOVENDOR_DIR \
58+
--volume $GOBUILD_VOL:$GOBUILD_DIR \
59+
$tag
60+
61+
# copy skydive executable our of builder docker image
62+
local src=/root/go/bin/${TARGET_GOARCH:+linux_${TARGET_GOARCH}/}skydive
63+
local dst=$DOCKER_DIR/skydive.$arch
64+
docker cp $image:$src $dst
65+
docker rm $image
66+
}
67+
68+
docker_skydive_target() {
69+
local arch=$1
70+
local dockerfile=$2
71+
72+
# build target skydive docker image
73+
local tag=$( docker_tag ${arch} )
74+
docker build -t ${DOCKER_IMAGE}:$tag \
75+
--label "Version=${VERSION}" \
76+
--build-arg ARCH=$arch \
77+
${BASE:+--build-arg BASE=${BASE}} \
78+
-f $DOCKER_DIR/$dockerfile $DOCKER_DIR
79+
}
80+
81+
docker_native_build() {
82+
local arch=$1
83+
84+
docker_skydive_builder $arch Dockerfile.compile
85+
docker_skydive_target $arch Dockerfile
86+
}
87+
88+
docker_cross_build() {
89+
local arch=$1
90+
91+
docker_skydive_builder $arch Dockerfile.crosscompile
92+
docker_skydive_target $arch Dockerfile.static
93+
}
94+
2495
docker_build() {
2596
for arch in $ARCHES
2697
do
27-
flags="DOCKER_IMAGE=${DOCKER_IMAGE} DOCKER_TAG=${arch}-${DOCKER_TAG}"
2898
case $arch in
2999
amd64)
30-
# x86_64 image
31-
make docker-build ${flags} ${BASE:+BASE=$BASE}
100+
docker_native_build $arch
32101
;;
33102
ppc64le)
34-
make docker-cross-build ${flags} WITH_EBPF=true TARGET_ARCH=powerpc64le TARGET_GOARCH=$arch DEBARCH=ppc64el BASE=${BASE:-${arch}/ubuntu}
103+
TARGET_ARCH=powerpc64le TARGET_GOARCH=$arch DEBARCH=ppc64el BASE=${BASE:-${arch}/ubuntu} docker_cross_build $arch
35104
;;
36105
arm64)
37-
make docker-cross-build ${flags} WITH_EBPF=true TARGET_ARCH=aarch64 TARGET_GOARCH=$arch BASE=${BASE:-aarch64/ubuntu}
106+
TARGET_ARCH=aarch64 TARGET_GOARCH=$arch DEBARCH=$arch BASE=${BASE:-aarch64/ubuntu} docker_cross_build $arch
38107
;;
39108
s390x)
40-
make docker-cross-build ${flags} WITH_EBPF=true TARGET_ARCH=$arch TARGET_GOARCH=$arch BASE=${BASE:-${arch}/ubuntu}
109+
TARGET_ARCH=$arch TARGET_GOARCH=$arch DEBARCH=$arch BASE=${BASE:-${arch}/ubuntu} docker_cross_build $arch
41110
;;
42111
*)
43-
make docker-cross-build ${flags} WITH_EBPF=true TARGET_ARCH=$arch TARGET_GOARCH=$arch BASE=${BASE:-${arch}/ubuntu}
112+
TARGET_ARCH=$arch TARGET_GOARCH=$arch DEBARCH=$arch BASE=${BASE:-${arch}/ubuntu} docker_cross_build $arch
44113
;;
45114
esac
46115
done
@@ -57,18 +126,28 @@ docker_login() {
57126
set -x
58127
}
59128

129+
docker_image() {
130+
local arch=$1
131+
echo ${DOCKER_IMAGE}:$( docker_tag ${arch} )
132+
}
133+
134+
docker_inspect() {
135+
local arch=$1
136+
docker inspect --format='{{index .RepoDigests 0}}' $( docker_image ${arch} )
137+
}
138+
60139
docker_push() {
61140
for arch in $ARCHES
62141
do
63-
docker push ${DOCKER_IMAGE}:${arch}-${DOCKER_TAG}
142+
docker push $( docker_image ${arch} )
64143
done
65144
}
66145

67146
docker_manifest() {
68147
digests=""
69148
for arch in $ARCHES
70149
do
71-
digest=$( docker inspect --format='{{index .RepoDigests 0}}' ${DOCKER_IMAGE}:${arch}-${DOCKER_TAG} )
150+
digest=$( docker_inspect ${arch} )
72151
digests="${digests} $digest"
73152
done
74153

@@ -82,7 +161,7 @@ docker_manifest() {
82161

83162
for arch in $ARCHES
84163
do
85-
digest=$( docker inspect --format='{{index .RepoDigests 0}}' ${DOCKER_IMAGE}:${arch}-${DOCKER_TAG} )
164+
digest=$( docker_inspect ${arch} )
86165
docker manifest annotate --arch $arch "${DOCKER_IMAGE}:${DOCKER_TAG}" $digest
87166
done
88167

0 commit comments

Comments
 (0)