自己手动构建nacos镜像实现非root用户启动

发布于:2023-01-04 ⋅ 阅读:(556) ⋅ 点赞:(0)

背景

在这里插入图片描述
官方docker仓库可以找到nacos镜像并运行,为什么还要自己动手构建nacos镜像呢?因为官方的镜像不支持以非root用户启动,有时出于安全等因素考虑,希望以非root用户启动应用,那么就不得不动手自己来构建镜像。

准备工作

  • nacos源码: https://github.com/alibaba/nacos/releases
  • 官方Dockerfile: https://github.com/nacos-group/nacos-docker.git

修改官方Dockerfile

原始的Dockerfile

FROM centos:7.9.2009
MAINTAINER pader "huangmnlove@163.com"

# set environment
ENV MODE="cluster" \
    PREFER_HOST_MODE="ip"\
    BASE_DIR="/home/nacos" \
    CLASSPATH=".:/home/nacos/conf:$CLASSPATH" \
    CLUSTER_CONF="/home/nacos/conf/cluster.conf" \
    FUNCTION_MODE="all" \
    JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk" \
    NACOS_USER="nacos" \
    JAVA="/usr/lib/jvm/java-1.8.0-openjdk/bin/java" \
    JVM_XMS="1g" \
    JVM_XMX="1g" \
    JVM_XMN="512m" \
    JVM_MS="128m" \
    JVM_MMS="320m" \
    NACOS_DEBUG="n" \
    TOMCAT_ACCESSLOG_ENABLED="false" \
    TIME_ZONE="Asia/Shanghai"

ARG NACOS_VERSION=2.1.1
ARG HOT_FIX_FLAG=""

WORKDIR $BASE_DIR

RUN set -x \
    && yum update -y \
    && yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel wget iputils nc  vim libcurl
RUN wget  https://github.com/alibaba/nacos/releases/download/${NACOS_VERSION}${HOT_FIX_FLAG}/nacos-server-${NACOS_VERSION}.tar.gz -P /home
RUN tar -xzvf /home/nacos-server-${NACOS_VERSION}.tar.gz -C /home \
    && rm -rf /home/nacos-server-${NACOS_VERSION}.tar.gz /home/nacos/bin/* /home/nacos/conf/*.properties /home/nacos/conf/*.example /home/nacos/conf/nacos-mysql.sql
RUN yum autoremove -y wget \
    && ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone \
    && yum clean all

ADD bin/docker-startup.sh bin/docker-startup.sh
ADD conf/application.properties conf/application.properties

# set startup log dir
RUN mkdir -p logs \
	&& cd logs \
	&& touch start.out \
	&& ln -sf /dev/stdout start.out \
	&& ln -sf /dev/stderr start.out
RUN chmod +x bin/docker-startup.sh

EXPOSE 8848
ENTRYPOINT ["bin/docker-startup.sh"]

删除yum安装步骤

实测yum安装过程实在太久了,每次修改重新构建都要经过一个安装步骤,实在无法忍受,于是在Dockerfile中删除以下内容

RUN set -x \
    && yum update -y \
    && yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel wget iputils nc  vim libcurl

指定JDK镜像

由于去掉了yum安装jdk的步骤,那么需要我们手动添加一个JDK,那我们直接基于JDK的镜像来制作即可,修改第一行

FROM openjdk:8

删除源码下载步骤

每次构建时都要重新下载源码,影响构建速度,有时在内网构建还不一定能通外网,所以删除源码下载步骤

RUN wget  https://github.com/alibaba/nacos/releases/download/${NACOS_VERSION}${HOT_FIX_FLAG}/nacos-server-${NACOS_VERSION}.tar.gz -P /home

去掉用到wget和yum命令的地方

由于yum安装步骤已经去掉,也没有了wget命令,所以用到的地方也要修改,

  • 修改前
RUN yum autoremove -y wget \
    && ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone \
    && yum clean all
  • 修改后
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone

创建用户以及用户组

ENV APP_USER=nacos
ENV WORK_DIR=$BASE_DIR
RUN groupadd -g 3000 $APP_USER &&\
    useradd -g 3000 -u 3000 -d $WORK_DIR -m $APP_USER
RUN chown -R $APP_USER.$APP_USER $WORK_DIR
USER $APP_USER

EXPOSE 8848
ENTRYPOINT ["bin/docker-startup.sh"]

构建镜像并推送到私有仓库

把需要的文件拷贝到一个目录

bin
conf
Dockerfile
Dockerfile.Slim
nacos-server-2.1.1.tar.gz

在Dockerfile所在目录执行以下命令

docker image build --tag harbor.xxx.com/myself/nacos-server:v2.1.1 .
docker image push harbor.xxx.com/myself/nacos-server:v2.1.1

这样我们就构建好了nacos镜像


网站公告

今日签到

点亮在社区的每一天
去签到