Technical documentation for standardization build image application.
Define Core Image
as References from sub / child container
# ubuntu-base
FROM ubuntu 20.04
# alpine-base
FROM alpine 3.15
# debian-base
FROM debian:buster
ARG BUILD_DATE
ARG BUILD_VERSION
ARG GIT_COMMIT
ARG GIT_URL
ENV VENDOR="DevOpsCornerID"
ENV AUTHOR="devopscornerid <support@devopscorner.id>"
ENV IMG_NAME="core-ubuntu"
ENV IMG_VERSION="20.04"
ENV IMG_DESC="core-ubuntu image"
ENV IMG_ARCH="amd64/x86_64"
## Simple Description ##
LABEL maintainer="$AUTHOR" \
architecture="$IMG_ARCH" \
ubuntu-version="$IMG_VERSION" \
org.label-schema.build-date="$BUILD_DATE" \
org.label-schema.name="$IMG_NAME" \
org.label-schema.description="$IMG_DESC" \
org.label-schema.vcs-ref="$GIT_COMMIT" \
org.label-schema.vcs-url="$GIT_URL" \
org.label-schema.vendor="$VENDOR" \
org.label-schema.version="$BUILD_VERSION" \
org.label-schema.schema-version="$IMG_VERSION" \
## Additional Detail Description ##
org.opencontainers.image.authors="$AUTHOR" \
org.opencontainers.image.description="$IMG_DESC" \
org.opencontainers.image.vendor="$VENDOR" \
org.opencontainers.image.version="$IMG_VERSION" \
org.opencontainers.image.revision="$GIT_COMMIT" \
org.opencontainers.image.created="$BUILD_DATE" \
fr.hbis.docker.base.build-date="$BUILD_DATE" \
fr.hbis.docker.base.name="$IMG_NAME" \
fr.hbis.docker.base.vendor="$VENDOR" \
fr.hbis.docker.base.version="$BUILD_VERSION"
-----
eg (detail):
LABEL maintainer="$AUTHOR" \
architecture="$IMG_ARCH" \
ubuntu-version="$IMG_VERSION" \
org.label-schema.build-date="$BUILD_DATE" \
org.label-schema.name="$IMG_NAME" \
org.label-schema.description="$IMG_DESC" \
org.label-schema.vcs-ref="$GIT_COMMIT" \
org.label-schema.vcs-url="$GIT_URL" \
org.label-schema.vendor="$VENDOR" \
org.label-schema.version="$BUILD_VERSION" \
org.label-schema.schema-version="$IMG_VERSION" \
org.opencontainers.image.authors="$AUTHOR" \
org.opencontainers.image.description="$IMG_DESC" \
org.opencontainers.image.vendor="$VENDOR" \
org.opencontainers.image.version="$IMG_VERSION" \
org.opencontainers.image.revision="$GIT_COMMIT" \
org.opencontainers.image.created="$BUILD_DATE" \
fr.hbis.docker.base.build-date="$BUILD_DATE" \
fr.hbis.docker.base.name="$IMG_NAME" \
fr.hbis.docker.base.vendor="$VENDOR" \
fr.hbis.docker.base.version="$BUILD_VERSION"
Install Container with no cache
RUN apt -o APT::Sandbox::User=root update; sync
RUN apt-get update; sync
RUN apt-get install -y [packages]
RUN apk add --no-cache --update [packages]
Remove unused packages from sub / child container that never use inside container
RUN apt-get remove [packages]; sync
RUN apt-get clean; sync
RUN rm -rf /var/cache/apk/*
Use sub / child docker container for installation library and for better compression size use cascade builder images
- From
Core Image
or Parent
FROM ubuntu-core:latest
FROM alpine-core:latest
FROM debian-core:latest
- Cascade (Multistage) Builder
### Builder ###
FROM golang:1.17-alpine3.15 as builder
WORKDIR /go/src/app
ENV GIN_MODE=release
ENV GOPATH=/go
RUN apk add --no-cache \
build-base \
git \
curl \
make \
bash
RUN git clone https://github.com/zeroc0d3/go-bookstore.git /go/src/app
RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=0 \
cd /go/src/app && \
go build -mod=readonly -ldflags="-s -w" -o goapp
### Binary ###
FROM golang:1.17-alpine3.15
ENV GIN_MODE=release
COPY --from=builder /go/src/app/goapp /usr/local/bin/goapp
ENTRYPOINT ["/usr/local/bin/goapp"]
EXPOSE 8080
Like this:
Like Loading...
Related