diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..1e94b8ac --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +# Build binary release +FROM golang:1.14.10-alpine3.12 AS builder +RUN apk add gcc g++ libc-dev +WORKDIR /go/src/github.com/mayswind/lab +COPY . . +RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -a -v -i -trimpath -o lab lab.go + +# Package docker image +FROM alpine:3.12.0 +RUN addgroup -S -g 1000 labapp && adduser -S -G labapp -u 1000 labapp +RUN apk --no-cache add su-exec tzdata +COPY --from=builder /go/src/github.com/mayswind/lab/lab /usr/local/bin/labapp/lab +RUN chmod +x /usr/local/bin/labapp/lab +COPY conf /usr/local/bin/labapp/conf +COPY public /usr/local/bin/labapp/public +WORKDIR /usr/local/bin/labapp +COPY docker/docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod +x /docker-entrypoint.sh +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/build-docker.sh b/build-docker.sh new file mode 100755 index 00000000..ef2cbced --- /dev/null +++ b/build-docker.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +mode=$1; +version=`grep "const LAB_VERSION" lab.go | awk -F '=' '{print $2}' | tr -d ' ' | tr -d '"'`; + +if [ "$mode" == "--snapshot" ]; then + version="SNAPSHOT-"`date "+%Y%m%d"`; +fi + +echo "Building docker image..."; +docker build -t lab:${version} . diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh new file mode 100755 index 00000000..80fe2957 --- /dev/null +++ b/docker/docker-entrypoint.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +set -e; +export LAB_USER=labapp; +export LAB_GROUP=labapp; + +prepare_directories() { + local log_path="/var/log/labapp"; + + if [ "${LAB_LOG_PATH}" != "" ]; then + log_path="${LAB_LOG_PATH}"; + fi + + if [ ! -d "${log_path}" ]; then + mkdir ${log_path}; + chown ${LAB_USER}:${LAB_GROUP} -R ${log_path}; + fi +} + +prepare_directories; + +conf_path_param=""; + +if [ "${LAB_CONF_PATH}" != "" ]; then + conf_path_param="--conf-path=${LAB_CONF_PATH}"; +fi + +exec su-exec ${LAB_USER} /usr/local/bin/labapp/lab server run ${conf_path_param};