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"]
相关推荐
XIAOHEZIcode20 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
武子康2 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn865 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化