news 2026/9/2 12:26:47

Dockerfile制作镜像示例 X86版本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dockerfile制作镜像示例 X86版本

基础镜像

ubuntu20.04

build命令

nohup docker build -t <image_name> . > build.log 2>&1 &

run命令

docker run -itd --name <container_name> -p <port>:<port> <image_name>

查看日志

docker logs -f <container_name>

测试

可以通过服务自身命令、端口等方面进行测试

Dockerfile

elasticsearch 7.15.0

FROM ubuntu:20.04-sec # 设置环境变量,避免交互模式询问 ENV DEBIAN_FRONTEND=noninteractive # 更新系统并安装必要的依赖 RUN apt-get update && apt-get install -y \ wget \ bash \ openjdk-8-jre-headless \ && rm -rf /var/lib/apt/lists/* # 创建 Elasticsearch 工作目录 RUN mkdir -p /opt/elasticsearch # 拷贝 Elasticsearch 压缩包 COPY ./elasticsearch-7.15.0-linux-x86_64.tar.gz /opt # 解压 Elasticsearch RUN tar -xzf /opt/elasticsearch-7.15.0-linux-x86_64.tar.gz -C /opt/elasticsearch --strip-components=1 # 删除压缩包 RUN rm /opt/elasticsearch-7.15.0-linux-x86_64.tar.gz # 创建数据和日志目录 RUN mkdir -p /opt/elasticsearch/data /opt/elasticsearch/logs # 设置配置文件 RUN sed -i 's|#path.data: /path/to/data|path.data: /opt/elasticsearch/data|' /opt/elasticsearch/config/elasticsearch.yml RUN sed -i 's|#path.logs: /path/to/logs|path.logs: /opt/elasticsearch/logs|' /opt/elasticsearch/config/elasticsearch.yml # 配置 Elasticsearch 为单节点模式并允许外部访问 RUN echo "network.host: 0.0.0.0" >> /opt/elasticsearch/config/elasticsearch.yml RUN echo "discovery.type: single-node" >> /opt/elasticsearch/config/elasticsearch.yml # 设置内存参数 ENV ES_JAVA_OPTS="-Xms2g -Xmx2g" # 设置环境变量 ENV ELASTICSEARCH_HOME=/opt/elasticsearch ENV PATH=$PATH:$ELASTICSEARCH_HOME/bin # 允许非 root 用户运行 Elasticsearch RUN chown -R nobody:nogroup /opt/elasticsearch # 暴露 Elasticsearch 端口 EXPOSE 9200 9300 # 以非 root 用户启动 Elasticsearch USER nobody # 启动 Elasticsearch CMD ["elasticsearch"]

etcd 3.5.4

FROM ubuntu:20.04-sec # 设置环境变量,避免交互模式询问 ENV DEBIAN_FRONTEND=noninteractive # 设置时区,避免安装过程中时区警告 ENV TZ=Asia/Shanghai # 设置环境变量 ENV ETCD_VERSION=v3.5.4 ENV ETCD_ARCH=amd64 # 安装必要的工具和依赖 RUN apt-get update && apt-get install -y \ curl \ tar \ wget \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # 下载并安装 etcd COPY ./etcd-v3.5.4-linux-amd64.tar.gz /tmp RUN tar -xvzf /tmp/etcd-v3.5.4-linux-amd64.tar.gz -C /tmp \ && mv /tmp/etcd-${ETCD_VERSION}-linux-${ETCD_ARCH}/etcd /usr/local/bin/ \ && mv /tmp/etcd-${ETCD_VERSION}-linux-${ETCD_ARCH}/etcdctl /usr/local/bin/ \ && rm -rf /tmp/etcd-v3.5.4-linux-amd64.tar.gz # 创建 etcd 配置目录 RUN mkdir -p /etc/etcd # 设置工作目录 WORKDIR /etc/etcd # 开放 etcd 默认端口 EXPOSE 2379 2380 # 设置启动命令 CMD ["etcd"]

kafka 3.7.1

FROM ubuntu:20.04-sec # 设定环境变量,避免交互模式的询问 ENV DEBIAN_FRONTEND=noninteractive # 更新系统并安装必要的依赖 RUN apt-get update && apt-get install -y \ wget \ openjdk-8-jre-headless \ && rm -rf /var/lib/apt/lists/* # 创建 Kafka 工作目录 RUN mkdir -p /opt/kafka # 下载 Kafka 3.7.1 版本 RUN wget -q https://archive.apache.org/dist/kafka/3.7.1/kafka_2.13-3.7.1.tgz -P /tmp # 解压 Kafka 压缩包到工作目录 RUN tar -xzf /tmp/kafka_2.13-3.7.1.tgz -C /opt/kafka --strip-components=1 # 删除下载的压缩包 RUN rm /tmp/kafka_2.13-3.7.1.tgz # 创建 Kafka 数据和日志目录 RUN mkdir -p /opt/kafka/data /opt/kafka/logs # 修改 server.properties 配置文件 RUN sed -i 's|log.dirs=/tmp/kafka-logs|log.dirs=/opt/kafka/data|' /opt/kafka/config/server.properties RUN echo "log4j.appender.kafkaAppender.File=/opt/kafka/logs/kafka.log" >> /opt/kafka/config/log4j.properties # 设置环境变量 ENV KAFKA_HOME=/opt/kafka ENV PATH=$PATH:$KAFKA_HOME/bin # 暴露 Kafka 端口 EXPOSE 9092 # 定义默认的 ZooKeeper 连接地址环境变量 ENV ZOOKEEPER_CONNECT=localhost:2181 # 编写启动脚本,根据环境变量配置 ZooKeeper 地址并启动 Kafka RUN echo '#!/bin/bash' > /start-kafka.sh RUN echo 'ZOOKEEPER_CONNECT=${ZOOKEEPER_CONNECT:-localhost:2181}' >> /start-kafka.sh RUN echo "sed -i \"s|zookeeper.connect=.*|zookeeper.connect=\$ZOOKEEPER_CONNECT|\" /opt/kafka/config/server.properties" >> /start-kafka.sh RUN echo 'exec kafka-server-start.sh /opt/kafka/config/server.properties' >> /start-kafka.sh RUN chmod +x /start-kafka.sh # 启动 Kafka CMD ["/start-kafka.sh"]

mongodb 4.4.29

FROM ubuntu:20.04-sec # 设置环境变量,避免交互模式询问 ENV DEBIAN_FRONTEND=noninteractive # 设置时区,避免安装过程中时区警告 ENV TZ=Asia/Shanghai # 更新并安装必要的依赖 RUN apt-get update && \ apt-get install -y \ gnupg \ curl \ lsb-release \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # 添加 MongoDB 官方的 GPG 密钥和 APT 存储库 RUN curl -fsSL https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add - && \ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list # 更新软件包列表并安装 MongoDB 4.4.29 RUN apt-get update && \ apt-get install -y mongodb-org=4.4.29 && \ rm -rf /var/lib/apt/lists/* # 创建一个目录来存储 MongoDB 数据 RUN mkdir -p /data/db # 暴露默认端口 27017 EXPOSE 27017 # 启动 MongoDB CMD ["mongod", "--bind_ip", "0.0.0.0"]

rabbitmq 3.8.3

FROM ubuntu:20.04-sec # 设置环境变量,避免交互模式询问 ENV DEBIAN_FRONTEND=noninteractive # 设置时区,避免安装过程中时区警告 ENV TZ=Asia/Shanghai # 更新并安装必要的依赖 RUN apt-get update && \ apt-get install -y \ curl \ gnupg \ lsb-release \ apt-transport-https \ ca-certificates \ && apt-get clean # 添加 RabbitMQ 官方的 apt 仓库 RUN curl -fsSL https://packages.rabbitmq.com/rabbitmq-release.gpg | tee /etc/apt/trusted.gpg.d/rabbitmq.asc && \ echo "deb https://packages.rabbitmq.com/debian/ erlang/24.x main" > /etc/apt/sources.list.d/rabbitmq-erlang.list && \ echo "deb https://packages.rabbitmq.com/debian/ rabbitmq-server main" > /etc/apt/sources.list.d/rabbitmq.list && \ apt-get update # 安装 Erlang 和 RabbitMQ RUN apt-get install -y \ erlang \ rabbitmq-server && \ apt-get clean # 开放 RabbitMQ 默认端口 EXPOSE 5672 15672 # 设置 RabbitMQ 环境变量 ENV RABBITMQ_USER=guest ENV RABBITMQ_PASSWORD=guest ENV RABBITMQ_VHOST=/ # 启动 RabbitMQ 服务 CMD ["rabbitmq-server"]

rocketmq 5.0.0

FROM ubuntu:20.04-sec # 设置环境变量,避免交互式安装时的提示 ENV DEBIAN_FRONTEND=noninteractive # 替换为国内镜像源 #RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://mirrors.aliyun.com/ubuntu/|g' /etc/apt/sources.list RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g' /etc/apt/sources.list # 安装 OpenJDK 8 RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ openjdk-8-jdk \ zip \ unzip \ && rm -rf /var/lib/apt/lists/* # 设置 Java 环境变量 ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ENV PATH=$JAVA_HOME/bin:$PATH # 使用本地文件 ADD rocketmq-all-5.0.0-bin-release.zip /opt/ RUN unzip /opt/rocketmq-all-5.0.0-bin-release.zip -d /opt \ && mv /opt/rocketmq-all-5.0.0-bin-release /opt/rocketmq \ && rm /opt/rocketmq-all-5.0.0-bin-release.zip # 设置 RocketMQ 环境变量 ENV ROCKETMQ_HOME=/opt/rocketmq ENV PATH=$ROCKETMQ_HOME/bin:$PATH # 暴露 RocketMQ 的默认端口 # NameServer 端口:9876 # Broker 端口:10911 EXPOSE 9876 10911 # 设置工作目录 WORKDIR /opt/rocketmq # 启动 NameServer 和 Broker CMD ["sh", "-c", "bin/mqnamesrv & bin/mqbroker -n localhost:9876"]

zookeeper 3.7.1

FROM ubuntu:20.04-sec # 设置环境变量 ENV ZOOKEEPER_VERSION=3.7.1 ENV ZOOKEEPER_HOME=/opt/zookeeper-$ZOOKEEPER_VERSION # 安装必要的依赖 RUN apt-get update && apt-get install -y \ wget \ openjdk-8-jre-headless \ && rm -rf /var/lib/apt/lists/* # 下载并解压 ZooKeeper RUN wget -q https://archive.apache.org/dist/zookeeper/zookeeper-$ZOOKEEPER_VERSION/apache-zookeeper-$ZOOKEEPER_VERSION-bin.tar.gz \ && tar -xzf apache-zookeeper-$ZOOKEEPER_VERSION-bin.tar.gz -C /opt \ && mv /opt/apache-zookeeper-$ZOOKEEPER_VERSION-bin $ZOOKEEPER_HOME \ && rm apache-zookeeper-$ZOOKEEPER_VERSION-bin.tar.gz # 创建数据目录和日志目录 RUN mkdir -p $ZOOKEEPER_HOME/data $ZOOKEEPER_HOME/logs # 复制配置文件模板 RUN cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg # 更新配置文件中的数据目录和日志目录 RUN sed -i "s|dataDir=/tmp/zookeeper|dataDir=$ZOOKEEPER_HOME/data|g" $ZOOKEEPER_HOME/conf/zoo.cfg \ && echo "dataLogDir=$ZOOKEEPER_HOME/logs" >> $ZOOKEEPER_HOME/conf/zoo.cfg # 设置环境变量 ENV PATH=$PATH:$ZOOKEEPER_HOME/bin # 暴露 ZooKeeper 端口 EXPOSE 2181 2888 3888 # 启动 ZooKeeper CMD ["zkServer.sh", "start-foreground"]
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 12:24:05

基于ESP32与STM32双核架构,复刻开源Peak示教器实现专业人机交互

上周&#xff0c;我在调试一个简单的机械臂项目时&#xff0c;遇到了一个几乎所有嵌入式开发者都绕不开的“最后一公里”问题&#xff1a;如何让一个没有屏幕、只有串口和几个LED的控制器&#xff0c;变得“可交互”&#xff1f;是接个屏幕写个简陋的UI&#xff0c;还是用蓝牙串…

作者头像 李华
网站建设 2026/9/2 12:23:46

MATLAB实现自适应动态规划:从理论到倒立摆控制实战

简介&#xff1a;本资源是一套面向控制理论研究者与自动化专业高年级本科生的自适应动态规划&#xff08;ADP&#xff09;MATLAB实现方案&#xff0c;聚焦解决传统动态规划在高维系统中面临的“维数灾难”问题&#xff0c;通过函数逼近&#xff08;如神经网络&#xff09;近似价…

作者头像 李华
网站建设 2026/9/2 12:20:45

MATLAB人脸关键点检测:Haar级联实战与工程调优

简介&#xff1a;本资源是一套面向图像处理初学者与计算机视觉入门者的MATLAB实践代码包&#xff0c;聚焦人脸区域及关键器官&#xff08;眼、鼻、嘴&#xff09;的定位与检测任务&#xff0c;适用于课程设计、毕业设计或算法原理验证等教学与学习场景。压缩包共2个文件&#x…

作者头像 李华
网站建设 2026/9/2 12:19:48

Prompt Optimizer 提示词优化:从零部署到进阶用法的实操笔记

Prompt Optimizer 提示词优化&#xff1a;从零部署到进阶用法的实操笔记 【免费下载链接】prompt-optimizer An AI prompt optimizer for writing better prompts and getting better AI results. 项目地址: https://gitcode.com/GitHub_Trending/pro/prompt-optimizer …

作者头像 李华
网站建设 2026/9/2 12:18:53

AI特效实战:从人物分割到风格化生成的全流程解析

从大学开始就在做视频特效和后期包装&#xff0c;前前后后跟过不少项目&#xff0c;也踩过无数渲染器崩掉、抠像抠到自闭的坑。所以当身边越来越多人在喊“特效已死&#xff0c;AI当立”的时候&#xff0c;我第一反应是不信&#xff0c;甚至想专门做一期视频狠狠打打这句话的脸…

作者头像 李华
网站建设 2026/9/2 12:16:32

【单片机课设毕设项目】基于 ESP‑01S 模块的 STM32 温度监控及设备控制系统 基于 STM32 单片机的本地按键与 APP 双端温控系统设计(011206)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华