Published on

Common Dockerfiles and Scripts

Authors
  • avatar
    Name
    Yuchen Wei
    Twitter

Script: Automatically Push Docker Images

This script is used to automatically tag and push Docker images to a specified registry.

#!/bin/bash
set -e

if [[ "$1" =~ (2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[1-9]?[0-9])(\.(2[0-4][0-9]|25[0-5]|1[0-9][0-9]|[1-9]?[0-9])){3} ]]; then
  echo "$0 [Registry Address] "
  registry_ip=$1
  for i in `docker images --format="{{.Repository}}:{{.Tag}}"`; do
    docker tag $i $registry_ip"/"$i
  done
else
  exit 1
fi

Dockerfile: Java Application with Timezone Configuration

FROM openjdk-8-jre-dmp:latest

LABEL maintainer="qi.gao"

ENV VERSION 2.0.0

COPY apollo-adminservice/target/apollo-adminservice-${VERSION}.jar /app.jar

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Sydney" > /etc/timezone

EXPOSE 8090

ENTRYPOINT java -XX:+PrintFlagsFinal \
                -XX:+UnlockExperimentalVMOptions \
                -XX:+UseCGroupMemoryLimitForHeap \
                $JAVA_OPTS -jar /app.jar

Dockerfile: Multi-stage Build for Node.js and Nginx

## step1
FROM docker-local.art.ocp.csvw.com/mac/node:10 as builder

WORKDIR /app
COPY ./ /app/

RUN npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass
RUN npm install --registry https://registry.npm.taobao.org
RUN npm run build

## step2
FROM docker-local.art.ocp.csvw.com/mac/nginx:1.16.1
LABEL io.daocloud.system=build-in

WORKDIR /app

# Copy built files from Node.js build stage
COPY --from=builder /app/dist /usr/share/nginx/html
COPY --from=builder /app/nginx.conf /etc/nginx/nginx.conf
COPY --from=builder /app/run.sh /app/run.sh

# Set environment variables
ENV USER_CENTER_URL=http://dmp-user-center:9050 \
    HELP_URL=https://guide.daocloud.io/dmp-2.4 \
    DMP_META=http://dmp-apollo-configservice:8080 \
    TWICE_URL=http://dmp-twice:8765  \
    CONFIG_CENTER_URL=http://dmp-apollo-adminservice:8090 \
    FATE_URL=http://dmp-fate:9056

# Adjust permissions for Nginx
RUN chown -R nginx:nginx /app && \
    chown -R nginx:nginx /usr/share/nginx && \
    chown -R nginx:nginx /var/cache/nginx && \
    chown -R nginx:nginx /var/log/nginx && \
    chown -R nginx:nginx /etc/nginx && \
    touch /var/run/nginx.pid && \
    chown -R nginx:nginx /var/run/nginx.pid && \
    touch /etc/nginx/nginx.conf.old && \
    chown -R nginx:nginx /etc/nginx/nginx.conf.old && \
    chmod -R 777 /app /usr/share/nginx /var/cache/ /var/log/ /etc/nginx /var/run

USER nginx

EXPOSE 8080

CMD /app/run.sh && nginx -g 'daemon off;'