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"]
相关推荐
CarryBest5 分钟前
Jenkins 环境搭建---基于 Docker
运维·jenkins
若云止水44 分钟前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_process_options
运维·nginx
s_fox_1 小时前
nginx ngx_http_module(9) 指令详解
运维·nginx·http
_院长大人_1 小时前
Docker Mysql 数据迁移
mysql·adb·docker
xing.yu.CTF3 小时前
Web入侵实战分析-常见web攻击类应急处置实验2
运维·服务器·windows·web安全·apache·php漏洞·phpstudy后门漏洞
我们的五年3 小时前
【Linux网络】TCP/IP地址的有机结合(有能力VS100%???),IP地址的介绍
linux·运维·网络·tcp/ip
drebander6 小时前
Docker 与 Kubernetes(K8s)初探
docker
m0_748238788 小时前
Nginx 负载均衡详解
运维·nginx·负载均衡
EasyNVR8 小时前
EasyRTC:全平台支持与自研算法驱动的智能音视频通讯解决方案
运维·服务器·小程序·音视频·webrtc·p2p·智能硬件
柳鲲鹏8 小时前
Ubuntu编译ZLMediaKit
linux·运维·ubuntu