Published on

Commonly used Dockerfile and scripts

Authors
  • avatar
    Name
    Yuchen Wei
    Twitter

For JAVA

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/Shanghai" > /etc/timezone

EXPOSE 8090

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

For Front

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

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

#RUN sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && apt-get update && apt-get install procps

WORKDIR /app

# copy from node builder
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 env default value.
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

## add permissions for nginx user, https://www.rockyourcode.com/run-docker-nginx-as-non-root-user/
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
RUN 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;'

Automatically push image script

#!/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_ip=$1
  for i in `docker images --format="{{.Repository}}:{{.Tag}}" | grep "ingress\|loadbalance\|busybox\|keep"`
  do
  docker tag $i $registry_ip"/"$i
  done
else
  exit 1
fi

Yarn 3.0 on docker

Beacuse of :https://github.com/vercel/next.js/discussions/33567

So: Step 1:

Download the base image

docker pull centos:8

Execute the following code in container

cd /etc/yum.repos.d/
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
yum update -y
curl --silent --location https://rpm.nodesource.com/setup_18.x | bash -
yum -y install nodejs
yum -y install gcc-c++ make
curl -o- -L https://yarnpkg.com/install.sh | bash
yarn set version 3.6.1
dnf --enablerepo=powertools install glibc-static

Build the new docker image

docker commit <docker_id> next:1.0

Use this dockerfile to package

FROM x81336/next:5.0
#RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn set version 3.6.1 & yarn install
COPY . .
RUN rm -rf node_modules & cp -r /node_modules .
RUN yarn install
RUN yarn add @next/font -D & yarn add --dev sucrase
RUN yarn build

EXPOSE 3000

ENV PORT 3000

CMD ["node_modules/.bin/next", "start"]