diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..6b8710a711 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.git diff --git a/doc/developer/building-frr-on-alpine.rst b/doc/developer/building-frr-on-alpine.rst index 6fcb5de107..f0f2aee138 100644 --- a/doc/developer/building-frr-on-alpine.rst +++ b/doc/developer/building-frr-on-alpine.rst @@ -34,26 +34,38 @@ This will put the apk packages in: Usage ----- -To add the packages to a docker image, create a Dockerfile in ./docker/pkgs: +To create a base image with the frr packages installed: :: - FROM alpine:3.7 - RUN mkdir -p /pkgs - ADD apk/ /pkgs/ - RUN apk add --no-cache --allow-untrusted /pkgs/x86_64/*.apk + docker build --rm -f docker/alpine/Dockerfile -t frr:latest . -And build a docker image: +Or, if you don't have a git checkout of the sources, you can build a base +image directly off the github account: :: - docker build --rm --force-rm -t alpine-dev-pkgs:latest docker/pkgs + docker build --rm -f docker/alpine/Dockerfile -t frr:latest \ + https://github.com/frrouting/frr.git -And run the image: +And to run the image: :: - docker run -it --rm alpine-dev-pkgs:latest /bin/sh + docker run -it --rm frr:latest /bin/sh Currently, we only package the raw daemons and example files, so, you'll need to run the daemons by hand (or, better, orchestrate in the Dockerfile). + +We can also build directly from docker-compose, with a docker-compose.yml file +like this one: + +:: + + version: '2.2' + + services: + frr: + build: + context: https://github.com/frrouting/frr.git + dockerfile: docker/alpine/Dockerfile diff --git a/docker/.gitignore b/docker/.gitignore index e9beab556e..6f91eb5ec3 100644 --- a/docker/.gitignore +++ b/docker/.gitignore @@ -1,2 +1 @@ -src.tar pkgs/ diff --git a/docker/alpine/Dockerfile b/docker/alpine/Dockerfile index e186fdccdf..6bd7d90aef 100644 --- a/docker/alpine/Dockerfile +++ b/docker/alpine/Dockerfile @@ -12,8 +12,7 @@ RUN apk add --no-cache abuild acct alpine-sdk attr autoconf automake bash \ patch pax-utils pcre perl pkgconf python2 python2-dev readline \ readline-dev sqlite-libs squashfs-tools sudo tar texinfo xorriso xz-libs \ groff gzip bc py-sphinx -RUN mkdir -p /src -ADD src.tar /src +ADD . /src RUN (cd /src && \ ./bootstrap.sh && \ ./configure \ @@ -22,9 +21,13 @@ RUN (cd /src && \ make dist) FROM alpine:3.7 as alpine-builder RUN apk add --no-cache abuild alpine-sdk && mkdir -p /pkgs/apk -ADD alpine-build.sh /usr/bin/ -ADD builder /etc/sudoers.d +ADD docker/alpine/alpine-build.sh /usr/bin/ +ADD docker/alpine/builder /etc/sudoers.d COPY --from=source-builder /src/*.tar.gz /src/alpine/APKBUILD /dist/ RUN adduser -D -G abuild builder && chown -R builder /dist /pkgs USER builder RUN /usr/bin/alpine-build.sh +FROM alpine:3.7 +RUN mkdir -p /pkgs/apk +COPY --from=alpine-builder /pkgs/apk/ /pkgs/apk/ +RUN apk add --no-cache --allow-untrusted /pkgs/apk/x86_64/*.apk diff --git a/docker/alpine/build.sh b/docker/alpine/build.sh index 357ea12dee..40ed1194fe 100755 --- a/docker/alpine/build.sh +++ b/docker/alpine/build.sh @@ -9,12 +9,8 @@ set -x ## c=`git rev-parse --short=10 HEAD` commit=`printf '%u\n' 0x$c` -git archive --format=tar $c > docker/alpine/src.tar -(cd docker/alpine && \ - docker build --build-arg commit=$commit --rm --force-rm -t \ - frr:alpine-$c . && \ - rm -f src.tar) - +docker build -f docker/alpine/Dockerfile \ + --build-arg commit=$commit -t frr:alpine-$c . id=`docker create frr:alpine-$c` docker cp ${id}:/pkgs/ docker docker rm $id