基础镜像
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"]