Skip to content

Commit

Permalink
Improve build logic (#28)
Browse files Browse the repository at this point in the history
* dockerfiles: Drop duplicate mkdir

The mkdir gets executed if "Building from local dev copy", whereas if built from
upstream git, go get will take care of it.

* dockerfiles: Drop extra community repo

No longer needed with current edge or stable tags of alpine linux.

* dockerfiles: Drop gcc as an explicit dep; go pulls it

Current edge and 3.5 declare gcc as a dep for go.

* dockerfiles: Install glide from package repo

Both edge and 3.5 provide a packaged glide.  By using the provided package,
we reduce the build time a little.

* dockerfiles: Set GLIDE_HOME to prevent glide to pollute /root

glide promptly ignores HOME (it checks /etc/passwd), but honours GLIDE_HOME.
So, by pointing GLIDE_HOME to a ephemeral dir, ~/.glide will be created there
instead of /root/.glide, simplifying the cleanup process.

* dockerfiles: Use --purge to ensure clean package uninstalls

This way, /usr/lib/go gets purged, and we don't have to remove it manually.

* dockerfiles: Move netboot tree instead of copying it

Less space used and slightly faster build.

* dockerfiles: Simplify build steps

go build will honour GOBIN and leave the executable there.

* dockerfiles: Move the installation of packages to the top

* dockerfiles: Upgrade first, then install new stuff

* dockerfiles: Tie build deps with a virtual package for easier removal

By deleting the virtual .build-deps package, one ensures the
no-package-left-behind policy :-)

* dockerfiles: Split package list in multiple lines

It's a good practice for enhancing the readability of pull requests,
since addition or removal of packages from the list will result in single line
changes.

* dockerfiles: Drop changing dir to /

No need to change directory in order do the cleanup.

* dockerfiles: Test the existence of the go package, instead of .git

This way we can add .git to .dockerignore, thus preventing copying it over when
building the image.

* dockerfiles: Add .dockerfile files to minimize the files that are copied over

* dockerfiles: Place build logic in the Dockerfile

Makes it easier to understand the build process if the whole sequence is stored
in a single place.

OTOH, editing the shell script inside the Dockerfile is a bit harder.

* dockerfiles: Create a sandbox where to put all transient files

* dockerfiles: Set GLIDE_HOME to the sandbox

* dockerfiles: Set GOPATH to a dir under the sandbox

* dockerfiles: Simplify cleanup

* dockerfiles: Rename 'stuff' to 'context', to use Dockerfile lore

* dockerfiles: Install entrypoint onto /usr/local/bin

This is the default location for locally managed binaries, and as such, PATH
includes it.  This way, it is easier to run it interactively.

* dockerfiles: Extract sandbox and context paths into variables

* dockerfiles: Move vars up to help define other vars before they are used

* dockerfiles: Add the required vars to eliminate duplicated paths

* dockerfiles: Replace hardcoded paths with references to vars

* dockerfiles: Fix wording for clarity

* dockerfiles: Add emtpy line to improve readability

* dockerfiles: Tell the go linker to strip debugging symbols

This produces a sensibly smaller binary.

* dockerfiles: Drop the --rm to docker build, as it is the default behaviour

* dockerfiles: Use long flags for readability

* dockerfiles: Base image onto alpine:3.5

Now that 3.5 has been released, we can use it instead of edge, since it
provides go 1.7.3.  We get a more stable environment, plus a smaller image.
  • Loading branch information
panchoh authored and danderson committed Jan 5, 2017
1 parent 176c8f6 commit 7e671a0
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 35 deletions.
6 changes: 6 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
**/.dockerignore
**/Dockerfile
.git
Makefile
*.md
LICENSE
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ none:
@echo "This makefile is just a shortcut for building docker containers."

pixiecore:
sudo docker build --rm -t danderson/pixiecore -f dockerfiles/pixiecore/Dockerfile .
sudo docker build --tag danderson/pixiecore --file dockerfiles/pixiecore/Dockerfile .

pixiecore-git:
sudo docker build --rm -t danderson/pixiecore dockerfiles/pixiecore
sudo docker build --tag danderson/pixiecore dockerfiles/pixiecore
4 changes: 4 additions & 0 deletions dockerfiles/pixiecore/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.dockerignore
# TODO: don't uncomment the next line until quay.io fixes how they handle
# .dockerignore that include Dockerfile (already notified them)
#Dockerfile
51 changes: 47 additions & 4 deletions dockerfiles/pixiecore/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,50 @@
FROM alpine:edge
FROM alpine:3.5

MAINTAINER David Anderson <[email protected]>

COPY . /tmp/stuff
RUN cd /tmp/stuff; [ -f build.sh ] && ./build.sh || ./dockerfiles/pixiecore/build.sh
ENV PIXIECORE_SANDBOX /tmp/sandbox
ENV PIXIECORE_CONTEXT "$PIXIECORE_SANDBOX"/context

COPY . "$PIXIECORE_CONTEXT"

RUN set -x; \
set -e; \
\
apk upgrade --update-cache; \
apk add ca-certificates; \
apk add --virtual .build-deps \
git \
go \
glide \
musl-dev; \
\
# Pixiecore assets \
NAMESPACE=go.universe.tf; \
REPO=netboot; \
PKG=cmd/pixiecore; \
\
export GOPATH="$PIXIECORE_SANDBOX"/go; \
export GLIDE_HOME="$PIXIECORE_SANDBOX"; \
\
NAMESPACE_PATH="$GOPATH/src/$NAMESPACE"; \
REPO_PATH="$NAMESPACE_PATH/$REPO"; \
PKG_PATH="$REPO_PATH/$PKG"; \
\
if [ -d "$PIXIECORE_CONTEXT"/"$PKG" ]; then \
echo "Building from local dev copy"; \
mkdir -p "$NAMESPACE_PATH"; \
mv -v "$PIXIECORE_CONTEXT" "$REPO_PATH"; \
else \
echo "Building from upstream git repo"; \
fi; \
\
go get -v -d "$NAMESPACE/$REPO/$PKG"; \
cd "$REPO_PATH"; \
glide install; \
go test $(glide nv); \
GOBIN=/usr/local/bin go install -ldflags -s ./"$PKG"; \
\
apk del --purge .build-deps; \
rm -rf "$PIXIECORE_SANDBOX" /var/cache/apk/*;

ENTRYPOINT ["/pixiecore"]
ENTRYPOINT ["/usr/local/bin/pixiecore"]
29 changes: 0 additions & 29 deletions dockerfiles/pixiecore/build.sh

This file was deleted.

0 comments on commit 7e671a0

Please sign in to comment.