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