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"]
相关推荐
2501_9200470329 分钟前
linux-系统性能监控
linux·运维·服务器
Britz_Kevin1 小时前
从零开始的云计算生活——第三十八天,避坑落井,Docker容器模块
docker·容器·生活
呉師傅1 小时前
奔图P2500NW打印机手机无线连接方法
运维·网络·windows·智能手机·计算机外设·电脑
jsons11 小时前
centos KVM
linux·运维·centos
趴着喝可乐1 小时前
CentOS的ISO镜像下载
linux·运维·centos
Clain2 小时前
如何搭建一台属于自己的服务器并部署网站,超详细小白教程
linux·运维·前端
白鹭2 小时前
服务器巡检项目
linux·运维·服务器
Generalzy2 小时前
Linux发行版分类与Centos替代品
linux·运维·centos
茗创科技3 小时前
Nature Neuroscience | 如何在大规模自动化MRI分析中规避伪影陷阱?
运维·自动化
__Smile°3 小时前
Gitlab+Jenkins+K8S+Registry 建立 CI/CD 流水线
linux·ci/cd·docker·kubernetes·gitlab·jenkins