1、Alpine
1. Dockerfile
FROM alpine:3.16.2
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="alpine-3.16.2" \
image.title="alpine" \
image.vendor="VMware, Inc." \
build.date="2022.10.2"
RUN set -x \
&& RUN apt-get update -y && apt-get upgrade -y
&& apk add -U tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& apk del tzdata
- 这样做出来的镜像虽然测试发现时间已改变,但是作为其他镜像的基础镜像时,时间依然不合适,尚不清楚啥原因?难道是因为卸载了?(其实是将
/etc/localtime
覆盖了导致)
2. 构建
docker build -t registry.cn-hangzhou.aliyuncs.com/depl/alpine:3.16.2 .
docker tag registry.cn-hangzhou.aliyuncs.com/depl/alpine:3.16.2 geray/alpine:3.16.2
docker push registry.cn-hangzhou.aliyuncs.com/depl/alpine:3.16.2
docker push geray/alpine:3.16.2
3、多架构镜像构建
docker buildx build -t geray/alpine:3.16.2 --platform=linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/386,linux/arm64,linux/ppc64le --push .
4. nginx
FROM geray/alpine:3.16.2
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.title="nginx" \
image.version="" \
image.vendor="VMware, Inc." \
build.date="2022.10.2"
RUN set -x \
&& apk --no-cache update \
&& apk add gcc \
&& apk add c++ \
&& apk add make cmake automake gfortran libffi-dev autoconf libtool pcre zlib wget vim \
# && apk add pcre-devel zlib-devel openssl-devel build-essential \
&&
2、Ubuntu
阿里云镜像开源镜像站(已经更换地址)
阿里云镜像开源社区镜像站(新地址)
网易开源镜像站
清华大学开源镜像站
中科大开源镜像站
1. Dockerfile
FROM ubuntu:20.04
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="ubuntu-20.04" \
image.title="ubuntu" \
image.vendor="VMware, Inc." \
build.date="2022.10.2"
RUN set -x \
&& apt-get update -y && apt-get upgrade -y \
&& apt-get install -y tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& rm -rf /var/lib/apt/lists/*
2. 构建
docker buildx build -t geray/ubuntu:20.04 --platform=linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/arm64,linux/ppc64le --push .
3. Ubuntu-development environment
安装gcc等依赖环境
FROM geray/ubuntu:20.04
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray,GCC and C++related dependencies are installed" \
image.ref.name="geray/ubuntu:20.04" \
image.title="ubuntu" \
image.vendor="VMware, Inc." \
build.date="2022.10.8"
# 安装依赖
RUN set -eux; \
apt-get update -y && apt-get upgrade -y; \
apt-get install -y gcc g++ \
make cmake automake wget \
gfortran libffi-dev autoconf libtool \
# ubuntu不同与centos:zlib zlib-devel pcre pcre-devel openssl-devel 对应zlib1g zlib1g-dev libpcre3-dev libssl-dev
zlib1g zlib1g-dev libpcre3-dev libssl-dev \
build-essential; \
rm -rf /var/lib/apt/lists/*
4. nginx
FROM geray/ubuntu:20.04-dependencies
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="geray/ubuntu:20.04-dependencies" \
image.title="nginx" \
image.version="1.22.0-fastdfs" \
image.vendor="VMware, Inc." \
build.date="2022.10.8"
COPY 1.22.0/openssl-1.1.1q.tar.gz .
COPY 1.22.0/pcre-8.45.tar.gz .
COPY 1.22.0/zlib-1.2.12.tar.gz .
# 安装fds
COPY libfastcommon-1.0.53.tar.gz .
COPY fastdfs-6.07.tar.gz .
COPY fastdfs-nginx-module-1.22.tar.gz .
COPY nginx-1.22.0.tar.gz .
# 安装依赖
RUN set -eux; \
# 1.安装Openssl
tar xf openssl-1.1.1q.tar.gz; \
cd openssl-1.1.1q; \
./config; \
make && make install; \
cd ..; rm -rf openssl-1.1.1q.tar.gz; \
# 2.安装Pcre
tar xf pcre-8.45.tar.gz; \
cd pcre-8.45; \
./configure; \
make && make install; \
cd ..; rm -rf pcre-8.45.tar.gz; \
# 3.安装Zlib
tar xf zlib-1.2.12.tar.gz; \
cd zlib-1.2.12; \
./configure; \
make && make install; \
cd .. ; rm -rf zlib-1.2.12.tar.gz; \
# 4.安装libfastcommon-1.0.53.tar.gz
tar xf libfastcommon-1.0.53.tar.gz; \
cd libfastcommon-1.0.53; \
./make.sh && ./make.sh install; \
cd ..; \
rm -rf libfastcommon-1.0.53.tar.gz; \
# 5.安装fastdfs
tar xf fastdfs-6.07.tar.gz; \
cd fastdfs-6.07; \
./make.sh && ./make.sh install; \
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf; \
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf; \
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf; \
cp ./conf/http.conf /etc/fdfs/; \
cp ./conf/mime.types /etc/fdfs/; \
cd ..; \
rm -rf fastdfs-6.07.tar.gz; \
# 6.安装 fastdfs-nginx-module-1.22.tar.gz
tar xf fastdfs-nginx-module-1.22.tar.gz; \
cd fastdfs-nginx-module-1.22; \
cp src/mod_fastdfs.conf /etc/fdfs/; \
# 修改mod_fastdfs.conf配置文件
sed -i 's/connect_timeout=2/connect_timeout=10/g' /etc/fdfs/mod_fastdfs.conf; \
sed -i 's/tracker_server=tracker:22122/tracker_server=127.0.0.1:22122/g' /etc/fdfs/mod_fastdfs.conf; \
sed -i 's/url_have_group_name = false/url_have_group_name = true/g' /etc/fdfs/mod_fastdfs.conf; \
# 修改src/config配置文件
sed -i 's/\/usr\/local\//\/usr\//g' src/config; \
# 创建配置中的默认路径
mkdir -p /home/yuqing/fastdfs; \
cd ..; \
rm -rf fastdfs-nginx-module-1.22.tar.gz; \
# 7.安装nginx
tar xf nginx-1.22.0.tar.gz; \
# 启动服务
# /etc/init.d/fdfs_trackerd start; \
# /etc/init.d/fdfs_storaged start; \
cd nginx-1.22.0; \
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-openssl=../openssl-1.1.1q --with-pcre=../pcre-8.45 --with-zlib=../zlib-1.2.12 --add-module=../fastdfs-nginx-module-1.22/src; \
make && make install; \
cd ..; rm -rf nginx-1.22.0.tar.gz; \
# 删除多余的安装包
rm -rf openssl-1.1.1q pcre-8.45 zlib-1.2.12; \
rm -rf libfastcommon-1.0.53.tar.gz fastdfs-6.07.tar.gz fastdfs-nginx-module-1.22; \
rm -rf nginx-1.22.0
VOLUME /usr/local/nginx/conf
VOLUME /usr/local/nginx/logs
COPY docker-entrypoint.sh /usr/bin/
#RUN set -x \
# && ps -ef \
# && rm -rf /home/yuqing/fastdfs/data/* \
# && rm -rf /home/yuqing/fastdfs/logs/*
WORKDIR /usr/local/nginx
RUN set -x; \
chmod +x /usr/bin/docker-entrypoint.sh
EXPOSE 80 22122 23000
#USER nginx
CMD ["/usr/bin/docker-entrypoint.sh"]
#!/bin/bash
/etc/init.d/fdfs_trackerd start
/etc/init.d/fdfs_storaged start
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
tail -f /usr/local/nginx/logs/error.log
构建
docker buildx build -t geray/nginx:1.22.0-fds --platform=linux/amd64,linux/amd64/v3,linux/arm64 --push .
3、Debian
1. Dockerfile
2. 构建
4、elasticsearch
FROM openjdk:8-jdk
LABEL maintainer="Geray <geray.zhu@gmail.com>" \
image.authors="geray" \
image.description="Application packaged by Geray,GCC and C++related dependencies are installed" \
PWD="2@42AMFtnNY4" \
image.ref.name="openjdk:8-jdk" \
image.title="elasticsearch" \
image.vendor="VMware, Inc." \
build.date="2022.10.23"
#useradd -r -g mysql -s /bin/false mysql
RUN set -x ; \
useradd -r -g elastic -s /bin/false elastic ; \
mkdir /data/
WORKDIR /data/
ADD elasticsearch-8.4.3-arm64.tar.gz /data/
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh
RUN set -x ;\
mv /data/elasticsearch-8.4.3 /data/elasticsearch ; \
rm -rf /data/elasticsearch-8.4.3-arm64.tar.gz ; \
chmod +x /usr/bin/docker-entrypoint.sh
VOLUME /data/elasticsearch/logs
VOLUME /data/elasticsearch/data
VOLUME /data/elasticsearch/config
USER 1000
EXPOSE 9200 9300
CMD ["/usr/bin/docker-entrypoint.sh"]
#!/bin/bash
/data/elasticsearch/bin/elasticsearch -d
tail -f /data/elasticsearch/logs/cluster-es.log
构建
docker build -t geray/elasticsearch:8.4.3-arm64 .
5、kafka-zookeeper
FROM openjdk:8-jdk
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="镜像包构建来自Geray" \
image.ref.name="openjdk:8-jdk" \
image.title="kafka" \
image.version="2.13-2.8.1" \
image.vendor="VMware, Inc." \
build.date="2022.11.16"
ENV KAFKA_VERSION 2.13-2.8.1
ENV JDK_VERSION 8
ENV SASL=false
ADD kafka_${KAFKA_VERSION}.tar.gz /opt/
RUN set -x ; \
#tar xf /opt/kafka_${KAFKA_VERSION}.tar.gz -C /opt/kafka --strip-components 1 ; \
tar xf /opt/kafka_${KAFKA_VERSION}.tar.gz ; \
mv /opt/kafka_${KAFKA_VERSION} /opt/kafka ; \
mkdir /opt/kafka/logs ; \
rm -rf /opt/kafka_${KAFKA_VERSION}.tar.gz
WORKDIR /opt/kafka/
# data目录
VOLUME /opt/kafka/zkData
VOLUME /opt/kafka/kafkaData
VOLUME /opt/kafka/logs
VOLUME /opt/kafka/config
ENV KAFKA_HOME=/opt/kafka
EXPOSE 9092
#CMD ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
#ENTRYPOINT ["/opt/kafka/bin/kafka-server-start.sh"]
#CMD ["/opt/kafka/config/server.properties"]
ENTRYPOINT ["/opt/kafka/bin/zookeeper-server-start.sh"]
CMD ["/opt/kafka/config/zookeeper.properties"]
- 构建
docker build -t geray/kafka:2.13-2.8.1-sasl-arm64 .
docker build -t geray/zookeeper:2.13-2.8.1-sasl-arm64 .
- kafka的数据配置:
log.dirs
- k8s部署时可以使用环境变量来控制JVM内存大小和是否使用sasl认证
KAFKA_HEAP_OPTS=-XX:+UseContainerSupport -XX:InitialRAMPercentage=75.0 -XX:MaxRAMPercentage=75.0 -Djava.security.auth.login.config=/opt/kafka/kafka_server_jaas.conf
- 认证文件(zk和kafka使用同一个认证文件)
$ cat kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="zfyx@2022"
user_admin="zfyx@2022"
user_producer="zfyx@2022"
user_consumer="zfyx@2022";
};
:::info 问题参考:
https://blog.csdn.net/Entity_G/article/details/128006085?spm=1001.2014.3001.5502
:::
项目镜像构建脚本
FROM openjdk:8-jdk
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="openjdk:8-jdk" \
image.title="dgms" \
image.vendor="VMware, Inc." \
build.date="2022.10.18"
ENV PARAMS="--server.port=8080 --eureka.client.service-url.defaultZone=http://admin:G7mQ6wC&@ump-eureka.yyjczcpt:8080/eureka/"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
COPY *.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
cat Dockerfile-conf
FROM openjdk:8-jdk
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="openjdk:8-jdk" \
image.title="dgms" \
version="2.14.0" \
image.vendor="VMware, Inc." \
build.date="2022.10.19"
ENV PARAMS="--server.port=8080 --eureka.client.service-url.defaultZone=http://admin:G7mQ6wC&@ump-eureka.yyjczcpt:8080/eureka/" \
CONFPATH="-Dloader.path=/config/prod"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ADD conf.tar /
COPY *.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar ${CONFPATH} app.jar ${PARAMS}"]
cat auto_buildImages.sh
#!/bin/bash
address=10.223.225.56:32000
ImageWarehouse=sjzcxt
PREFIX=dgms
SUFFIX=v2.14.0
NAMES=(
api
asset
config
data
integrate
kettle
meta
quality
scheduler
std
system
task
)
for name in ${NAMES[@]};do
echo "-----------| 准备构建 ${name} 镜像... "
if [ ${name} = config ] ;then
echo "================"
cp Dockerfile-conf $name;
ls -l ${name}
echo "================"
mv ${name}/Dockerfile-conf ${name}/Dockerfile
#cat ${name}/Dockerfile
#ls -l ${name}
#cat ${name}/Dockerfile*
echo "================"
else
cp Dockerfile $name;
fi
cd $name;
echo "docker build -t ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX} ."
docker build -t ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX} . ;
if [ $? -eq 0 ]; then
cd .. ;
echo "-----------| ${name} 镜像构建完成,准备推送至镜像仓库... "
docker push ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX}
if [ $? -ne 0 ]; then
echo "${name} 镜像推送失败!!!!!!!!!"
exit 1;
fi
else
echo "-----------| ${name} 镜像构建失败!!!!!!!"
exit 1;
fi
echo "------------| ${name} 镜像以推送至镜像仓库."
done
- 数据资产
cat buildImages.sh
#!/bin/bash
address=10.223.225.56:32000
ImageWarehouse=dgms
PREFIX=dgms
SUFFIX=V2.15.0-SNAPSHOT
NAMES=(
api
asset
collect
data
integrate
kettle
portal
quality
scheduler
std
system
task
)
# 复制Dockerfile到文件夹
function cp_Dockerfile(){
cp Dockerfile $name;
}
# 复制jar包到目录
function cp_jar(){
cp ${PREFIX}-${name}-${SUFFIX}.jar $name;
}
# 构建镜像
function buildImages(){
echo "docker build -t ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX} ."
docker build -t ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX} . ;
if [ $? -eq 0 ]; then
cd .. ;
echo "-----------| ${name} 镜像构建完成,准备推送至镜像仓库... "
docker push ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX}
echo "docker push ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX}"
if [ $? -ne 0 ]; then
echo "${name} 镜像推送失败!!!!!!!!!"
exit 1;
fi
else
echo "-----------| ${name} 镜像构建失败!!!!!!!"
exit 1;
fi
echo "------------| ${name} 镜像以推送至镜像仓库."
}
for name in ${NAMES[@]};do
echo "-----------| 准备构建 ${name} 镜像... "
if [ -d "$name" ]; then
echo "$name 目录已经存在"
else
echo "$name 目录不存在,创建..."
mkdir $name
fi
if [ ${name} = kettle ] ;then
echo "================"
cp Dockerfile-kettle $name;
echo "================"
mv ${name}/Dockerfile-kettle ${name}/Dockerfile
echo "================"
else
cp_Dockerfile;
fi
#cp_jar;
cd $name;
buildImages;
done
- Dockerfile
FROM openjdk:8-jdk
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="openjdk:8-jdk" \
image.title="dgms" \
image.vendor="VMware, Inc." \
build.date="2022.11.9"
ENV PARAMS="--server.port=8080 --spring.cloud.nacos.discovery.server-addr=nacos.dgms:8848 --spring.cloud.nacos.discovery.username=nacos --spring.cloud.nacos.discovery.password=Dgms@2022 --spring.cloud.nacos.discovery.namespace=dev --security.oauth2.resource.user-info-uri=http://ump-authentication.yyjczcpt:8080/user"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
COPY *.jar /app.jar
VOLUME /dgms/file
VOLUME /tmp/temporary/upload/
WORKDIR /
EXPOSE 8080
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
- Dockerfile-kettle
cat Dockerfile-kettle
FROM geray/hs_jdk:v1.8.0_291
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="openjdk:8-jdk" \
image.title="dgms" \
image.vendor="VMware, Inc." \
build.date="2022.11.9"
ENV PARAMS="--server.port=8080 --spring.cloud.nacos.discovery.server-addr=nacos.dgms:8848 --spring.cloud.nacos.discovery.username=nacos --spring.cloud.nacos.discovery.password=Dgms@2022 --spring.cloud.nacos.discovery.namespace=dev --security.oauth2.resource.user-info-uri=http://ump-authentication.yyjczcpt:8080/user"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ADD datax.tar.gz /
COPY *.jar /app.jar
VOLUME /datax/conf
VOLUME /datax/job
VOLUME /datax/log
VOLUME /dgms/file
VOLUME /tmp/temporary/upload/
WORKDIR /
EXPOSE 8080
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
java镜像构建模板
1. 具备注册中心和配置中心的微服务镜像构建
聚合
FROM openjdk:8-jdk
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="openjdk:8-jdk" \
image.title="gxjh_desp_exchange" \
image.vendor="VMware, Inc." \
build.date="2022.10.16"
ENV PARAMS="--server.port=8080 --spring.profiles.active=prod --spring.cloud.nacos.discovery.server-addr=nacos.ruoyi:8848 --spring.cloud.nacos.config.server-addr=nacos.ruoyi:8848 --spring.cloud.nacos.config.namespace=prod --spring.cloud.nacos.config.file-extension=yml"
ENV JVM_MEMORY="-Xms1g -Xmx1g"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
COPY *.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["/bin/sh","-c","java ${JVM_MEMORY} -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
2. 不具备注册中心和配置中心的微服务镜像构建
desp交换
需要挂载配置文件等
FROM openjdk:8-jdk
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="openjdk:8-jdk" \
image.title="gxjh_desp_exchange" \
image.vendor="VMware, Inc." \
build.date="2022.10.16"
ENV PARAMS="--server.port=8080"
ENV CONFPATH="-Dloader.path=/app-conf/resources,/app-conf/lib"
ENV JVM_MEMORY="-Xms1g -Xmx1g"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone ; \
mkdir /app-conf/
ADD resources.tar.gz /app-conf/
ADD lib.tar.gz /app-conf/
COPY *.jar /app.jar
EXPOSE 8080
#ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar ${CONFPATH} app.jar ${PARAMS}"]
CMD ["/bin/sh","-c","java ${JVM_MEMORY} -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar ${CONFPATH} app.jar ${PARAMS}"]
设置内存参数:
建议优化jvm参数占用pod百分比
https://www.yuque.com/geray-alxoc/bapt5y/ckk8t8dn70g4ic0i?singleDoc# 《JAVA项目容器化部署JVM配置》
3. web
FROM 10.223.225.56:32000/library/nginx:1.23.1
LABEL maintainer="Geray <1690014753@qq.com>" \
image.authors="geray" \
image.description="Application packaged by Geray" \
image.ref.name="nginx:1.23.1" \
image.title="ump" \
image.vendor="VMware, Inc." \
build.date="2022.10.18"
COPY default.conf /etc/nginx/conf.d/
ADD dist-ump.tar.gz /usr/share/nginx/html/
VOLUME /usr/share/nginx/html