From 1a1366b58638e0b7854337c311e3b6c86de7ecb7 Mon Sep 17 00:00:00 2001 From: Kyle Quest Date: Mon, 5 Feb 2018 00:03:50 -0800 Subject: [PATCH] sample golang apps --- README.md | 10 ++++++-- examples/apps/golang_alpine/Dockerfile | 6 +++++ examples/apps/golang_alpine/app.go | 7 ++++++ examples/apps/golang_alpine/build.command | 5 ++++ examples/apps/golang_alpine/clean.command | 6 +++++ examples/apps/golang_alpine/run_full.command | 5 ++++ examples/apps/golang_alpine/run_slim.command | 5 ++++ examples/apps/golang_alpine/slim.command | 5 ++++ examples/apps/golang_standard/Dockerfile | 6 +++++ examples/apps/golang_standard/app.go | 7 ++++++ examples/apps/golang_standard/build.command | 5 ++++ examples/apps/golang_standard/clean.command | 6 +++++ .../apps/golang_standard/run_full.command | 5 ++++ .../apps/golang_standard/run_slim.command | 5 ++++ examples/apps/golang_standard/slim.command | 5 ++++ examples/apps/golang_ubuntu/Dockerfile | 23 +++++++++++++++++++ examples/apps/golang_ubuntu/app.go | 7 ++++++ examples/apps/golang_ubuntu/build.command | 5 ++++ examples/apps/golang_ubuntu/clean.command | 6 +++++ examples/apps/golang_ubuntu/run_full.command | 5 ++++ examples/apps/golang_ubuntu/run_slim.command | 5 ++++ examples/apps/golang_ubuntu/slim.command | 5 ++++ 22 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 examples/apps/golang_alpine/Dockerfile create mode 100644 examples/apps/golang_alpine/app.go create mode 100755 examples/apps/golang_alpine/build.command create mode 100755 examples/apps/golang_alpine/clean.command create mode 100755 examples/apps/golang_alpine/run_full.command create mode 100755 examples/apps/golang_alpine/run_slim.command create mode 100755 examples/apps/golang_alpine/slim.command create mode 100644 examples/apps/golang_standard/Dockerfile create mode 100644 examples/apps/golang_standard/app.go create mode 100755 examples/apps/golang_standard/build.command create mode 100755 examples/apps/golang_standard/clean.command create mode 100755 examples/apps/golang_standard/run_full.command create mode 100755 examples/apps/golang_standard/run_slim.command create mode 100755 examples/apps/golang_standard/slim.command create mode 100644 examples/apps/golang_ubuntu/Dockerfile create mode 100644 examples/apps/golang_ubuntu/app.go create mode 100755 examples/apps/golang_ubuntu/build.command create mode 100755 examples/apps/golang_ubuntu/clean.command create mode 100755 examples/apps/golang_ubuntu/run_full.command create mode 100755 examples/apps/golang_ubuntu/run_slim.command create mode 100755 examples/apps/golang_ubuntu/slim.command diff --git a/README.md b/README.md index 134411efa8..3bca415fa1 100755 --- a/README.md +++ b/README.md @@ -304,7 +304,7 @@ It's used to minify the `container-transform` tool. You can get the minified ima ## CURRENT STATE -It works pretty well with the sample Node.js, Python (2 and 3), Ruby and Java images (built from `examples/apps`). More testing needs to be done to see how it works with other images. Rails/unicorn app images are not fully supported yet (WIP). +It works pretty well with the sample Node.js, Python (2 and 3), Ruby, Java and Golang images (built from `examples/apps`). More testing needs to be done to see how it works with other images. Rails/unicorn app images are not fully supported yet (WIP). Sample images (built with the standard Ubuntu 14.04 base image): @@ -318,11 +318,17 @@ Sample images built with Alpine: * nodejs app container: 66.4 MB => 34.7 MB * python app container: 86 MB => 22.1 MB +Sample Golang application images: + +* from golang:latest: 700MB => 1.55MB +* from ubuntu:14.04: 529MB => 1.86MB +* from golang:alpine: 258MB => 1.55MB + You can also run `docker-slim` in the `info` mode and it'll generate useful image information including a "reverse engineered" Dockerfile. DockerSlim now also generates Seccomp (usable) and AppArmor (WIP) profiles for your container. -Works with Docker 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 17.03. +Works with Docker 1.8 - 1.9, 1.10, 1.11, 1.12, 1.13, 17.03, 17.12. Note: diff --git a/examples/apps/golang_alpine/Dockerfile b/examples/apps/golang_alpine/Dockerfile new file mode 100644 index 0000000000..db0269ad83 --- /dev/null +++ b/examples/apps/golang_alpine/Dockerfile @@ -0,0 +1,6 @@ +FROM golang:alpine +WORKDIR /app +ADD . /app +RUN cd /app && go build -o app + +ENTRYPOINT ["/app/app"] diff --git a/examples/apps/golang_alpine/app.go b/examples/apps/golang_alpine/app.go new file mode 100644 index 0000000000..5e875ec953 --- /dev/null +++ b/examples/apps/golang_alpine/app.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Sample golang app (alpine)") +} diff --git a/examples/apps/golang_alpine/build.command b/examples/apps/golang_alpine/build.command new file mode 100755 index 0000000000..ddfdf5a633 --- /dev/null +++ b/examples/apps/golang_alpine/build.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker build -t my/golang-app-alpine . diff --git a/examples/apps/golang_alpine/clean.command b/examples/apps/golang_alpine/clean.command new file mode 100755 index 0000000000..f4f7c3b728 --- /dev/null +++ b/examples/apps/golang_alpine/clean.command @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker rmi my/golang-app-alpine . +docker rmi my/golang-app-alpine.slim . \ No newline at end of file diff --git a/examples/apps/golang_alpine/run_full.command b/examples/apps/golang_alpine/run_full.command new file mode 100755 index 0000000000..d038ecea4b --- /dev/null +++ b/examples/apps/golang_alpine/run_full.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker run --rm -it my/golang-app-alpine diff --git a/examples/apps/golang_alpine/run_slim.command b/examples/apps/golang_alpine/run_slim.command new file mode 100755 index 0000000000..b5e590b346 --- /dev/null +++ b/examples/apps/golang_alpine/run_slim.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker run --rm -it my/golang-app-alpine.slim diff --git a/examples/apps/golang_alpine/slim.command b/examples/apps/golang_alpine/slim.command new file mode 100755 index 0000000000..ea4d8a496c --- /dev/null +++ b/examples/apps/golang_alpine/slim.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker-slim build my/golang-app-alpine diff --git a/examples/apps/golang_standard/Dockerfile b/examples/apps/golang_standard/Dockerfile new file mode 100644 index 0000000000..dd154bb630 --- /dev/null +++ b/examples/apps/golang_standard/Dockerfile @@ -0,0 +1,6 @@ +FROM golang:latest +WORKDIR /app +ADD . /app +RUN cd /app && go build -o app + +ENTRYPOINT ["/app/app"] diff --git a/examples/apps/golang_standard/app.go b/examples/apps/golang_standard/app.go new file mode 100644 index 0000000000..405eb73dac --- /dev/null +++ b/examples/apps/golang_standard/app.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Sample golang app (standard)") +} diff --git a/examples/apps/golang_standard/build.command b/examples/apps/golang_standard/build.command new file mode 100755 index 0000000000..834368be4d --- /dev/null +++ b/examples/apps/golang_standard/build.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker build -t my/golang-app . diff --git a/examples/apps/golang_standard/clean.command b/examples/apps/golang_standard/clean.command new file mode 100755 index 0000000000..00df704ea0 --- /dev/null +++ b/examples/apps/golang_standard/clean.command @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker rmi my/golang-app . +docker rmi my/golang-app.slim . \ No newline at end of file diff --git a/examples/apps/golang_standard/run_full.command b/examples/apps/golang_standard/run_full.command new file mode 100755 index 0000000000..b26c6df61a --- /dev/null +++ b/examples/apps/golang_standard/run_full.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker run --rm -it my/golang-app diff --git a/examples/apps/golang_standard/run_slim.command b/examples/apps/golang_standard/run_slim.command new file mode 100755 index 0000000000..869746c788 --- /dev/null +++ b/examples/apps/golang_standard/run_slim.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker run --rm -it my/golang-app.slim diff --git a/examples/apps/golang_standard/slim.command b/examples/apps/golang_standard/slim.command new file mode 100755 index 0000000000..97e7a49ad7 --- /dev/null +++ b/examples/apps/golang_standard/slim.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker-slim build my/golang-app diff --git a/examples/apps/golang_ubuntu/Dockerfile b/examples/apps/golang_ubuntu/Dockerfile new file mode 100644 index 0000000000..75e39d29a8 --- /dev/null +++ b/examples/apps/golang_ubuntu/Dockerfile @@ -0,0 +1,23 @@ +FROM ubuntu:14.04 + +RUN apt-get update && \ + apt-get install software-properties-common -y && \ + add-apt-repository ppa:gophers/archive -y && \ + apt-get update && \ + apt-get install golang-1.9-go -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +ENV GOPATH /go +ENV GOROOT /usr/lib/go-1.9 +ENV PATH /usr/lib/go-1.9/bin:/go/bin:/usr/local/bin:$PATH + +WORKDIR /app +ADD . /app +RUN cd /app && go build -o app + +ENTRYPOINT ["/app/app"] + + + + diff --git a/examples/apps/golang_ubuntu/app.go b/examples/apps/golang_ubuntu/app.go new file mode 100644 index 0000000000..b93ee0effe --- /dev/null +++ b/examples/apps/golang_ubuntu/app.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Sample golang app (ubuntu)") +} diff --git a/examples/apps/golang_ubuntu/build.command b/examples/apps/golang_ubuntu/build.command new file mode 100755 index 0000000000..055a044f0d --- /dev/null +++ b/examples/apps/golang_ubuntu/build.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker build -t my/golang-app-ubuntu . diff --git a/examples/apps/golang_ubuntu/clean.command b/examples/apps/golang_ubuntu/clean.command new file mode 100755 index 0000000000..f1917dece0 --- /dev/null +++ b/examples/apps/golang_ubuntu/clean.command @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker rmi my/golang-app-ubuntu +docker rmi my/golang-app-ubuntu.slim \ No newline at end of file diff --git a/examples/apps/golang_ubuntu/run_full.command b/examples/apps/golang_ubuntu/run_full.command new file mode 100755 index 0000000000..b8c19b3f0d --- /dev/null +++ b/examples/apps/golang_ubuntu/run_full.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker run --rm -it my/golang-app-ubuntu diff --git a/examples/apps/golang_ubuntu/run_slim.command b/examples/apps/golang_ubuntu/run_slim.command new file mode 100755 index 0000000000..ed79e13072 --- /dev/null +++ b/examples/apps/golang_ubuntu/run_slim.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker run --rm -it my/golang-app-ubuntu.slim diff --git a/examples/apps/golang_ubuntu/slim.command b/examples/apps/golang_ubuntu/slim.command new file mode 100755 index 0000000000..8ba11a2536 --- /dev/null +++ b/examples/apps/golang_ubuntu/slim.command @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +here="$(dirname "$BASH_SOURCE")" +cd $here +docker-slim build my/golang-app-ubuntu