1、Alpine
1. Dockerfile
FROM alpine:3.16.2LABEL 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.2docker push registry.cn-hangzhou.aliyuncs.com/depl/alpine:3.16.2docker 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.2LABEL 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.04LABEL 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.04LABEL 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-devzlib1g zlib1g-dev libpcre3-dev libssl-dev \build-essential; \rm -rf /var/lib/apt/lists/*
4. nginx
FROM geray/ubuntu:20.04-dependenciesLABEL 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 .# 安装fdsCOPY 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.安装Openssltar 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.安装Pcretar xf pcre-8.45.tar.gz; \cd pcre-8.45; \./configure; \make && make install; \cd ..; rm -rf pcre-8.45.tar.gz; \# 3.安装Zlibtar 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.gztar 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.安装fastdfstar 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.gztar 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.安装nginxtar 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.0VOLUME /usr/local/nginx/confVOLUME /usr/local/nginx/logsCOPY 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/nginxRUN set -x; \chmod +x /usr/bin/docker-entrypoint.shEXPOSE 80 22122 23000#USER nginxCMD ["/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.conftail -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-jdkLABEL 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 mysqlRUN 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.shRUN 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.shVOLUME /data/elasticsearch/logsVOLUME /data/elasticsearch/dataVOLUME /data/elasticsearch/configUSER 1000EXPOSE 9200 9300CMD ["/usr/bin/docker-entrypoint.sh"]
#!/bin/bash/data/elasticsearch/bin/elasticsearch -dtail -f /data/elasticsearch/logs/cluster-es.log
构建
docker build -t geray/elasticsearch:8.4.3-arm64 .
5、kafka-zookeeper
FROM openjdk:8-jdkLABEL 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.1ENV JDK_VERSION 8ENV SASL=falseADD 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.gzWORKDIR /opt/kafka/# data目录VOLUME /opt/kafka/zkDataVOLUME /opt/kafka/kafkaDataVOLUME /opt/kafka/logsVOLUME /opt/kafka/configENV KAFKA_HOME=/opt/kafkaEXPOSE 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.confKafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="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-jdkLABEL 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/timezoneCOPY *.jar /app.jarEXPOSE 8080ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
cat Dockerfile-confFROM openjdk:8-jdkLABEL 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/timezoneADD conf.tar /COPY *.jar /app.jarEXPOSE 8080ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar ${CONFPATH} app.jar ${PARAMS}"]
cat auto_buildImages.sh#!/bin/bashaddress=10.223.225.56:32000ImageWarehouse=sjzcxtPREFIX=dgmsSUFFIX=v2.14.0NAMES=(apiassetconfigdataintegratekettlemetaqualityschedulerstdsystemtask)for name in ${NAMES[@]};doecho "-----------| 准备构建 ${name} 镜像... "if [ ${name} = config ] ;thenecho "================"cp Dockerfile-conf $name;ls -l ${name}echo "================"mv ${name}/Dockerfile-conf ${name}/Dockerfile#cat ${name}/Dockerfile#ls -l ${name}#cat ${name}/Dockerfile*echo "================"elsecp Dockerfile $name;ficd $name;echo "docker build -t ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX} ."docker build -t ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX} . ;if [ $? -eq 0 ]; thencd .. ;echo "-----------| ${name} 镜像构建完成,准备推送至镜像仓库... "docker push ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX}if [ $? -ne 0 ]; thenecho "${name} 镜像推送失败!!!!!!!!!"exit 1;fielseecho "-----------| ${name} 镜像构建失败!!!!!!!"exit 1;fiecho "------------| ${name} 镜像以推送至镜像仓库."done
- 数据资产
cat buildImages.sh#!/bin/bashaddress=10.223.225.56:32000ImageWarehouse=dgmsPREFIX=dgmsSUFFIX=V2.15.0-SNAPSHOTNAMES=(apiassetcollectdataintegratekettleportalqualityschedulerstdsystemtask)# 复制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 ]; thencd .. ;echo "-----------| ${name} 镜像构建完成,准备推送至镜像仓库... "docker push ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX}echo "docker push ${address}/${ImageWarehouse}/${PREFIX}-${name}:${SUFFIX}"if [ $? -ne 0 ]; thenecho "${name} 镜像推送失败!!!!!!!!!"exit 1;fielseecho "-----------| ${name} 镜像构建失败!!!!!!!"exit 1;fiecho "------------| ${name} 镜像以推送至镜像仓库."}for name in ${NAMES[@]};doecho "-----------| 准备构建 ${name} 镜像... "if [ -d "$name" ]; thenecho "$name 目录已经存在"elseecho "$name 目录不存在,创建..."mkdir $namefiif [ ${name} = kettle ] ;thenecho "================"cp Dockerfile-kettle $name;echo "================"mv ${name}/Dockerfile-kettle ${name}/Dockerfileecho "================"elsecp_Dockerfile;fi#cp_jar;cd $name;buildImages;done
- Dockerfile
FROM openjdk:8-jdkLABEL 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/timezoneCOPY *.jar /app.jarVOLUME /dgms/fileVOLUME /tmp/temporary/upload/WORKDIR /EXPOSE 8080ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
- Dockerfile-kettle
cat Dockerfile-kettleFROM geray/hs_jdk:v1.8.0_291LABEL 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/timezoneADD datax.tar.gz /COPY *.jar /app.jarVOLUME /datax/confVOLUME /datax/jobVOLUME /datax/logVOLUME /dgms/fileVOLUME /tmp/temporary/upload/WORKDIR /EXPOSE 8080ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
java镜像构建模板
1. 具备注册中心和配置中心的微服务镜像构建
聚合
FROM openjdk:8-jdkLABEL 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/timezoneCOPY *.jar /app.jarEXPOSE 8080ENTRYPOINT ["/bin/sh","-c","java ${JVM_MEMORY} -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
2. 不具备注册中心和配置中心的微服务镜像构建
desp交换
需要挂载配置文件等
FROM openjdk:8-jdkLABEL 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.jarEXPOSE 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.1LABEL 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
