├── .gitignore ├── .idea └── vcs.xml ├── README.MD ├── base ├── centos │ ├── Dockerfile │ ├── README.MD │ └── build.sh ├── ssh │ ├── Dockerfile │ ├── README.MD │ └── build.sh ├── ubuntu │ ├── Dockerfile │ ├── README.MD │ └── build.sh └── webssh │ ├── Dockerfile │ ├── README.MD │ └── build.sh ├── demo ├── net │ ├── Dockerfile │ └── build.sh └── nginx │ └── Dockerfile ├── java ├── openjdk11 │ ├── Dockerfile │ ├── README.MD │ ├── build.sh │ └── run.sh ├── openjdk11_slim │ ├── Dockerfile │ ├── README.MD │ ├── build.sh │ └── run.sh ├── openjdk8 │ ├── Dockerfile │ ├── README.MD │ ├── build.sh │ └── run.sh ├── openjdk8_alpine │ ├── Dockerfile │ ├── README.MD │ ├── build.sh │ └── run.sh ├── oracle_java8 │ ├── Dockerfile │ ├── README.MD │ └── build.sh └── oracle_java8_2 │ ├── .gitignore │ ├── Dockerfile │ ├── README.MD │ └── build.sh └── server ├── kafka └── wurstmeister │ └── 2.12-2.4.0 │ ├── README.md │ └── docker-compose.yml ├── rocketmq ├── rocketmq │ ├── 4.4.0 │ │ ├── Dockerfile │ │ ├── build-image.sh │ │ ├── docker-compose │ │ │ └── docker-compose.yml │ │ ├── kubernetes │ │ │ └── deployment.yaml │ │ ├── play-consumer.sh │ │ ├── play-docker-compose.sh │ │ ├── play-docker.sh │ │ ├── play-kubernetes.sh │ │ ├── play-producer.sh │ │ └── scripts │ │ │ ├── runbroker-customize.sh │ │ │ └── runserver-customize.sh │ └── README.md └── rocketmqinc_rocketmq │ ├── Dockerfile │ ├── README.MD │ └── build.sh └── zookeeper ├── zookeeper_cluster ├── README.MD └── docker-compose.yml └── zookeeper_one ├── Dockerfile ├── README.MD ├── build.sh └── run.sh /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | .idea 3 | *.iws 4 | *.iml 5 | *.ipr 6 | .idea/dockerfile-images.iml 7 | .idea/inspectionProfiles/ 8 | .idea/modules.xml 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 2 | 3 | ## base 4 | - [Dockerfile 安装 Ubuntu 系统](https://github.com/lianggzone/dockerfile-images/tree/master/base/ubuntu) 5 | - [Dockerfile 安装 CentOS 系统](https://github.com/lianggzone/dockerfile-images/tree/master/base/centos) 6 | - [Dockerfile 安装 SSH](https://github.com/lianggzone/dockerfile-images/tree/master/base/ssh) 7 | - [Dockerfile 安装 Web SSH](https://github.com/lianggzone/dockerfile-images/tree/master/base/webssh) 8 | 9 | ## java 10 | - [Dockerfile 安装 Oracle Java 方式一:通过 yum 的方式进行安装](https://github.com/lianggzone/dockerfile-images/tree/master/java/oracle_java8) 11 | - [Dockerfile 安装 Oracle Java 方式二:通过下载的安装包的方式进行安装](https://github.com/lianggzone/dockerfile-images/tree/master/java/oracle_java8_2) 12 | - [Dockerfile 安装 OpenJDK 8](https://github.com/lianggzone/dockerfile-images/tree/master/java/openjdk8) 13 | - [Dockerfile 安装 OpenJDK 8 Alpine](https://github.com/lianggzone/dockerfile-images/tree/master/java/openjdk8_alpine) 14 | - [Dockerfile 安装 OpenJDK 11](https://github.com/lianggzone/dockerfile-images/tree/master/java/openjdk11) 15 | - [Dockerfile 安装 OpenJDK 11 Slim](https://github.com/lianggzone/dockerfile-images/tree/master/java/openjdk11_slim) 16 | 17 | ## Zookeeper 18 | - [Dockerfile 安装 Zookeeper 单机版](https://github.com/lianggzone/dockerfile-images/tree/master/server/zookeeper/zookeeper_one) 19 | - [Dockerfile 安装 Zookeeper 集群版](https://github.com/lianggzone/dockerfile-images/tree/master/server/zookeeper/zookeeper_cluster) 20 | 21 | ## RocketMQ 22 | - [Dockerfile 安装 RocketMQ 单机版](https://github.com/lianggzone/dockerfile-images/tree/master/server/rocketmq) 23 | - [Dockerfile 安装 RocketMQ 集群版](https://github.com/lianggzone/dockerfile-images/tree/master/server/rocketmq) 24 | 25 | ## Kafka 26 | - [Dockerfile 安装 Kafka 单机版](https://github.com/lianggzone/dockerfile-images/tree/master/server/kafka) 27 | -------------------------------------------------------------------------------- /base/centos/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos 2 | MAINTAINER LiangGzone "lianggzone@163.com" -------------------------------------------------------------------------------- /base/centos/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 CentOS 系统 2 | 3 | 4 | ```bash 5 | FROM centos:7 6 | MAINTAINER LiangGzone "lianggzone@163.com" 7 | ``` 8 | -------------------------------------------------------------------------------- /base/centos/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/centos" . -------------------------------------------------------------------------------- /base/ssh/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | MAINTAINER LiangGzone "lianggzone@163.com" 3 | RUN yum -y install openssh-server 4 | # 修改root用户密码 5 | RUN /bin/echo "test" | passwd --stdin root 6 | # 生成密钥 7 | RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \ 8 | && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key \ 9 | && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key 10 | # 修改配置信息 11 | RUN /bin/sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd \ 12 | && /bin/sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \ 13 | && /bin/sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config 14 | EXPOSE 22 15 | CMD ["/usr/sbin/sshd","-D"] 16 | -------------------------------------------------------------------------------- /base/ssh/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 SSH 2 | 3 | 4 | ```bash 5 | FROM centos:7 6 | MAINTAINER LiangGzone "lianggzone@163.com" 7 | RUN yum -y install openssh-server 8 | # 修改root用户密码 9 | RUN /bin/echo "test" | passwd --stdin root 10 | # 生成密钥 11 | RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \ 12 | && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key \ 13 | && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key 14 | # 修改配置信息 15 | RUN /bin/sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd \ 16 | && /bin/sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \ 17 | && /bin/sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config 18 | EXPOSE 22 19 | CMD ["/usr/sbin/sshd","-D"] 20 | ``` 21 | -------------------------------------------------------------------------------- /base/ssh/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/ssh" . 3 | -------------------------------------------------------------------------------- /base/ubuntu/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu 2 | MAINTAINER LiangGzone "lianggzone@163.com" -------------------------------------------------------------------------------- /base/ubuntu/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 Ubuntu 系统 2 | 3 | 4 | ```bash 5 | FROM ubuntu 6 | MAINTAINER LiangGzone "lianggzone@163.com" 7 | ``` 8 | -------------------------------------------------------------------------------- /base/ubuntu/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/ubuntu" . -------------------------------------------------------------------------------- /base/webssh/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM liftoff/gateone 2 | MAINTAINER LiangGzone "lianggzone@163.com" 3 | ## 配置证书(可选) 4 | #ADD gateone-ssl/certificate.pem /etc/gateone/ssl/certificate.pem 5 | #ADD gateone-ssl/keyfile.pem /etc/gateone/ssl/keyfile.pem 6 | CMD [ "gateone" ] 7 | -------------------------------------------------------------------------------- /base/webssh/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 Web SSH 2 | 3 | 4 | ```bash 5 | FROM liftoff/gateone 6 | MAINTAINER LiangGzone "lianggzone@163.com" 7 | CMD [ "gateone" ] 8 | 9 | ``` 10 | -------------------------------------------------------------------------------- /base/webssh/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/webssh" . 3 | -------------------------------------------------------------------------------- /demo/net/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | MAINTAINER LiangGzone "lianggzone@163.com" 3 | RUN yum install -y iputils && \ 4 | yum install net-tools.x86_64 5 | EXPOSE 80 6 | CMD /bin/bash 7 | -------------------------------------------------------------------------------- /demo/net/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/net_test" . -------------------------------------------------------------------------------- /demo/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | MAINTAINER LiangGzone "lianggzone@163.com" 3 | RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 4 | RUN yum install -y nginx 5 | EXPOSE 80 6 | -------------------------------------------------------------------------------- /java/openjdk11/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:11-jre 2 | MAINTAINER LiangGzone "lianggzone@163.com" -------------------------------------------------------------------------------- /java/openjdk11/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 OpenJDK 11 2 | 3 | 4 | ```bash 5 | FROM openjdk:11-jre 6 | ``` 7 | -------------------------------------------------------------------------------- /java/openjdk11/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/openjdk11" . -------------------------------------------------------------------------------- /java/openjdk11/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker run --name openjdk -it lianggzone/openjdk11 /bin/bash -------------------------------------------------------------------------------- /java/openjdk11_slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:11-jre-slim 2 | MAINTAINER LiangGzone "lianggzone@163.com" -------------------------------------------------------------------------------- /java/openjdk11_slim/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 OpenJDK 11 Slim 2 | 3 | 自 JDK 11 GA 起,以前提供的 Alpine Linux 版本已被删除。它不是生产版本的,因为它没有经过足够的测试,不能被认为是 GA 版本。 4 | 5 | 目前,Alpine 唯一稳定的 OpenJDK 版本是 7 和 8。 6 | 7 | `openjdk:11-jre-slim` 镜像使用基础镜像是 `debian:sid-slim` 8 | 9 | ```bash 10 | FROM openjdk:11-jre-slim 11 | ``` 12 | -------------------------------------------------------------------------------- /java/openjdk11_slim/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/openjdk11-slim" . -------------------------------------------------------------------------------- /java/openjdk11_slim/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker run --name openjdk11-slim -it lianggzone/openjdk11-slim /bin/sh -------------------------------------------------------------------------------- /java/openjdk8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-jre 2 | MAINTAINER LiangGzone "lianggzone@163.com" -------------------------------------------------------------------------------- /java/openjdk8/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 OpenJDK 8 2 | 3 | 4 | ```bash 5 | FROM openjdk:8-jre 6 | ``` 7 | -------------------------------------------------------------------------------- /java/openjdk8/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/openjdk8" . -------------------------------------------------------------------------------- /java/openjdk8/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker run --name openjdk -it lianggzone/openjdk8 /bin/bash -------------------------------------------------------------------------------- /java/openjdk8_alpine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-jre-alpine 2 | MAINTAINER LiangGzone "lianggzone@163.com" -------------------------------------------------------------------------------- /java/openjdk8_alpine/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 OpenJDK 8 Alpine 2 | 3 | Alpine Linux 是一个基于 musl libc 和 BusyBox 的简化 Linux 发行版。 Docker Hub 包含一个基于 Alpine 的 OpenJDK,可以下载为 `openjdk:alpine`。 4 | 5 | 同样,`openjdk:8-jre` 为 309MB,`openjdk:8-jre-alpine` 为 107.8 MB。 6 | 7 | ```bash 8 | FROM openjdk:8-jre-alpine 9 | ``` 10 | 11 | 注意的是,Alpine Linux 镜像不包含 bash, 替代的,我们可以使用 `/bin/ash` , `/bin/sh` , `ash` `sh`。 12 | 13 | ``` 14 | docker run -it --rm alpine /bin/ash 15 | docker run -it --rm alpine /bin/sh 16 | docker run -it --rm alpine ash 17 | docker run -it --rm alpine sh 18 | ``` 19 | 20 | 那么,运行容器命令如下。 21 | 22 | ``` 23 | docker run --name openjdk8 -it lianggzone/openjdk8-alpine /bin/sh 24 | ``` -------------------------------------------------------------------------------- /java/openjdk8_alpine/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/openjdk8-alpine" . -------------------------------------------------------------------------------- /java/openjdk8_alpine/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker run --name openjdk8-alpine -it lianggzone/openjdk8-alpine /bin/sh -------------------------------------------------------------------------------- /java/oracle_java8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | MAINTAINER LiangGzone "lianggzone@163.com" 3 | 4 | RUN yum update -y && \ 5 | curl --insecure --junk-session-cookies --location --remote-name --silent --header "Cookie: oraclelicense=accept-securebackup-cookie" \ 6 | https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.rpm && \ 7 | yum localinstall -y jdk-8u201-linux-x64.rpm && \ 8 | rm jdk-8u201-linux-x64.rpm && \ 9 | yum clean all 10 | 11 | ENV JAVA_HOME=/usr/java/jdk1.8.0_201/ \ 12 | LANG=en_US.UTF-8 \ 13 | LC_ALL=en_US.UTF-8 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /java/oracle_java8/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 Oracle Java 2 | 3 | > 方式一:通过 yum 的方式进行安装 4 | > 5 | > 注意的是,这种方式等待时间会比较长,因为要从远程进行下载安装。 6 | 7 | ```bash 8 | FROM centos:7 9 | MAINTAINER LiangGzone "lianggzone@163.com" 10 | 11 | RUN yum update -y && \ 12 | curl --insecure --junk-session-cookies --location --remote-name --silent --header "Cookie: oraclelicense=accept-securebackup-cookie" \ 13 | https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.rpm && \ 14 | yum localinstall -y jdk-8u201-linux-x64.rpm && \ 15 | rm jdk-8u201-linux-x64.rpm && \ 16 | yum clean all 17 | 18 | ENV JAVA_HOME=/usr/java/jdk1.8.0_201/ \ 19 | LANG=en_US.UTF-8 \ 20 | LC_ALL=en_US.UTF-8 21 | ``` -------------------------------------------------------------------------------- /java/oracle_java8/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/oracle_java8" . -------------------------------------------------------------------------------- /java/oracle_java8_2/.gitignore: -------------------------------------------------------------------------------- 1 | *.tar.gz 2 | -------------------------------------------------------------------------------- /java/oracle_java8_2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | MAINTAINER LiangGzone "lianggzone@163.com" 3 | 4 | ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/ 5 | ENV JAVA_HOME /usr/local/java/jdk1.8.0_202 6 | ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib 7 | ENV PATH ${JAVA_HOME}/bin:$PATH 8 | 9 | -------------------------------------------------------------------------------- /java/oracle_java8_2/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 Oracle Java 2 | 3 | > 方式二:通过下载的安装包的方式进行安装 4 | 5 | 6 | ```bash 7 | FROM centos:7 8 | MAINTAINER LiangGzone "lianggzone@163.com" 9 | 10 | ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/ 11 | ENV JAVA_HOME /usr/local/java/jdk1.8.0_202 12 | ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib 13 | ENV PATH ${JAVA_HOME}/bin:$PATH 14 | ``` -------------------------------------------------------------------------------- /java/oracle_java8_2/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/oracle_java8" . -------------------------------------------------------------------------------- /server/kafka/wurstmeister/2.12-2.4.0/README.md: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 Kafka 2 | 3 | > http://wurstmeister.github.io/kafka-docker/ 4 | > 5 | > https://www.cnblogs.com/snow-backup/p/12750602.html 6 | 7 | Start a cluster: 8 | 9 | ```bash 10 | docker-compose up -d 11 | ``` 12 | 13 | Add more brokers: 14 | 15 | ```bash 16 | docker-compose scale kafka=3 17 | ``` 18 | 19 | Destroy a cluster: 20 | 21 | ``` 22 | docker-compose stop 23 | ``` 24 | -------------------------------------------------------------------------------- /server/kafka/wurstmeister/2.12-2.4.0/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.2' 2 | services: 3 | zookeeper: 4 | container_name: zookeeper 5 | image: wurstmeister/zookeeper 6 | ports: 7 | - "2181:2181" 8 | restart: always 9 | kafka: 10 | container_name: kafka 11 | image: wurstmeister/kafka:2.12-2.4.0 12 | ports: 13 | - "9092:9092" 14 | environment: 15 | - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 16 | - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.31.44:9092 17 | - KAFKA_LISTENERS=PLAINTEXT://:9092 18 | volumes: 19 | - /var/run/docker.sock:/var/run/docker.sock 20 | restart: always -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/Dockerfile: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | FROM centos:7 19 | 20 | RUN yum install -y java-1.8.0-openjdk-headless unzip gettext nmap-ncat openssl\ 21 | && yum clean all -y 22 | 23 | ARG user=rocketmq 24 | ARG group=rocketmq 25 | ARG uid=3000 26 | ARG gid=3000 27 | 28 | # RocketMQ is run with user `rocketmq`, uid = 3000 29 | # If you bind mount a volume from the host or a data container, 30 | # ensure you use the same uid 31 | RUN groupadd -g ${gid} ${group} \ 32 | && useradd -u ${uid} -g ${gid} -m -s /bin/bash ${user} 33 | 34 | ARG version 35 | 36 | # Rocketmq version 37 | ENV ROCKETMQ_VERSION ${version} 38 | 39 | # Rocketmq home 40 | ENV ROCKETMQ_HOME /opt/rocketmq-${ROCKETMQ_VERSION} 41 | 42 | WORKDIR ${ROCKETMQ_HOME} 43 | 44 | # get the version 45 | RUN curl https://dist.apache.org/repos/dist/release/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip -o rocketmq.zip \ 46 | && unzip rocketmq.zip \ 47 | && mv rocketmq-all*/* . \ 48 | && rmdir rocketmq-all* \ 49 | && rm rocketmq.zip 50 | 51 | # add scripts 52 | COPY scripts/ ${ROCKETMQ_HOME}/bin/ 53 | 54 | RUN chown -R 3000:3000 ${ROCKETMQ_HOME}/bin/ 55 | 56 | # expose namesrv port 57 | EXPOSE 9876 58 | 59 | # add customized scripts for namesrv 60 | RUN mv ${ROCKETMQ_HOME}/bin/runserver-customize.sh ${ROCKETMQ_HOME}/bin/runserver.sh \ 61 | && chmod a+x ${ROCKETMQ_HOME}/bin/runserver.sh \ 62 | && chmod a+x ${ROCKETMQ_HOME}/bin/mqnamesrv 63 | 64 | # expose broker ports 65 | EXPOSE 10909 10911 66 | 67 | # add customized scripts for broker 68 | RUN mv ${ROCKETMQ_HOME}/bin/runbroker-customize.sh ${ROCKETMQ_HOME}/bin/runbroker.sh \ 69 | && chmod a+x ${ROCKETMQ_HOME}/bin/runbroker.sh \ 70 | && chmod a+x ${ROCKETMQ_HOME}/bin/mqbroker 71 | 72 | # export Java options 73 | RUN export JAVA_OPT=" -Duser.home=/opt" 74 | 75 | # Add ${JAVA_HOME}/lib/ext as java.ext.dirs 76 | RUN sed -i 's/${JAVA_HOME}\/jre\/lib\/ext/${JAVA_HOME}\/jre\/lib\/ext:${JAVA_HOME}\/lib\/ext/' ${ROCKETMQ_HOME}/bin/tools.sh 77 | 78 | USER ${user} 79 | 80 | WORKDIR ${ROCKETMQ_HOME}/bin 81 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/build-image.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ -z "${ROCKETMQ_VERSION}" ] 3 | then 4 | ROCKETMQ_VERSION="4.4.0" 5 | fi 6 | 7 | # Build rocketmq 8 | docker build --no-cache -t rocketmqinc/rocketmq:${ROCKETMQ_VERSION} --build-arg version=${ROCKETMQ_VERSION} . 9 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/docker-compose/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | namesrv: 4 | image: rocketmqinc/rocketmq:4.4.0 5 | container_name: rmqnamesrv 6 | ports: 7 | - 9876:9876 8 | volumes: 9 | - ./data/namesrv/logs:/home/rocketmq/logs 10 | - ./data/namesrv/store:/home/rocketmq/store 11 | command: sh mqnamesrv 12 | broker: 13 | image: rocketmqinc/rocketmq:4.4.0 14 | container_name: rmqbroker 15 | # links: 16 | # - namesrv 17 | ports: 18 | - 10909:10909 19 | - 10911:10911 20 | environment: 21 | - NAMESRV_ADDR=namesrv:9876 22 | volumes: 23 | - ./data/broker/logs:/home/rocketmq/logs 24 | - ./data/broker/store:/home/rocketmq/store 25 | - ./data/broker/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf 26 | command: sh mqbroker -c ../conf/broker.conf 27 | # depends_on: 28 | # - namesrv 29 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/kubernetes/deployment.yaml: -------------------------------------------------------------------------------- 1 | kind: Deployment 2 | apiVersion: extensions/v1beta1 3 | metadata: 4 | name: rocketmq-ns-deployment 5 | spec: 6 | replicas: 1 7 | selector: 8 | matchLabels: 9 | app: rocketmq-nameserver 10 | name: rocketmq-nameserver 11 | template: 12 | metadata: 13 | labels: 14 | app: rocketmq-nameserver 15 | name: rocketmq-nameserver 16 | spec: 17 | containers: 18 | - name: rocketmq-nameserver 19 | image: rocketmqinc/rocketmq:4.4.0 20 | command: ["sh","mqnamesrv"] 21 | imagePullPolicy: IfNotPresent 22 | ports: 23 | - containerPort: 9876 24 | volumeMounts: 25 | - mountPath: /home/rocketmq/logs 26 | name: namesrvlogs 27 | - mountPath: /home/rocketmq/store 28 | name: namesrvstore 29 | volumes: 30 | - name: namesrvlogs 31 | emptyDir: {} 32 | - name: namesrvstore 33 | emptyDir: {} 34 | --- 35 | kind: Deployment 36 | apiVersion: extensions/v1beta1 37 | metadata: 38 | name: rocketmq-broker-deployment 39 | spec: 40 | replicas: 1 41 | selector: 42 | matchLabels: 43 | app: rocketmq-broker 44 | name: rocketmq-broker 45 | template: 46 | metadata: 47 | labels: 48 | app: rocketmq-broker 49 | name: rocketmq-broker 50 | spec: 51 | containers: 52 | - name: rocketmq-broker 53 | image: rocketmqinc/rocketmq:4.4.0 54 | command: ["sh","mqbroker", "-n","rocketmq-ns-deployment:9876"] 55 | imagePullPolicy: IfNotPresent 56 | ports: 57 | - containerPort: 10909 58 | - containerPort: 10911 59 | volumeMounts: 60 | - mountPath: /home/rocketmq/logs 61 | name: brokerlogs 62 | - mountPath: /home/rocketmq/store 63 | name: brokerstore 64 | volumes: 65 | - name: brokerlogs 66 | emptyDir: {} 67 | - name: brokerstore 68 | emptyDir: {} 69 | 70 | 71 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/play-consumer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Consume messages 4 | docker exec -ti rmqbroker sh ./tools.sh org.apache.rocketmq.example.quickstart.Consumer -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/play-docker-compose.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | RMQ_CONTAINER=$(docker ps -a|awk '/rmq/ {print $1}') 4 | if [[ -n "$RMQ_CONTAINER" ]]; then 5 | echo "Removing RocketMQ Container..." 6 | docker rm -fv $RMQ_CONTAINER 7 | # Wait till the existing containers are removed 8 | sleep 5 9 | fi 10 | 11 | if [ ! -d "`pwd`/data" ]; then 12 | mkdir -p "data" 13 | fi 14 | 15 | # Run namesrv and broker 16 | docker-compose -f ./docker-compose/docker-compose.yml up -d 17 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/play-docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | RMQ_CONTAINER=$(docker ps -a|awk '/rmq/ {print $1}') 4 | if [[ -n "$RMQ_CONTAINER" ]]; then 5 | echo "Removing RocketMQ Container..." 6 | docker rm -fv $RMQ_CONTAINER 7 | # Wait till the existing containers are removed 8 | sleep 5 9 | fi 10 | 11 | if [ ! -d "`pwd`/data" ]; then 12 | mkdir -p "data" 13 | fi 14 | 15 | echo "Starting RocketMQ nodes..." 16 | 17 | # Start nameserver 18 | docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/home/rocketmq/logs -v `pwd`/data/namesrv/store:/home/rocketmq/store --name rmqnamesrv rocketmqinc/rocketmq:4.4.0 sh mqnamesrv 19 | 20 | # Start Broker 21 | docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/home/rocketmq/logs -v `pwd`/data/broker/store:/home/rocketmq/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq:4.4.0 sh mqbroker autoCreateTopicEnable=true 22 | 23 | # Servive unavailable when not ready 24 | # sleep 20 25 | 26 | # Produce messages 27 | # sh ./play-producer.sh 28 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/play-kubernetes.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ ! -d "`pwd`/data" ]; then 4 | mkdir -p "data" 5 | fi 6 | 7 | # Run nameserver and broker on your Kubernetes cluster 8 | kubectl apply -f kubernetes/deployment.yaml 9 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/play-producer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Produce messages 4 | docker exec -ti rmqbroker sh ./tools.sh org.apache.rocketmq.example.quickstart.Producer -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/scripts/runbroker-customize.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | #=========================================================================================== 19 | # Java Environment Setting 20 | #=========================================================================================== 21 | error_exit () 22 | { 23 | echo "ERROR: $1 !!" 24 | exit 1 25 | } 26 | 27 | [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java 28 | [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java 29 | [ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!" 30 | 31 | export JAVA_HOME 32 | export JAVA="$JAVA_HOME/bin/java" 33 | export BASE_DIR=$(dirname $0)/.. 34 | export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH} 35 | 36 | #=========================================================================================== 37 | # JVM Configuration 38 | #=========================================================================================== 39 | # Get the max heap used by a jvm, which used all the ram available to the container. 40 | if [ -z "$MAX_POSSIBLE_HEAP" ] 41 | then 42 | MAX_POSSIBLE_RAM_STR=$(java -XX:+UnlockExperimentalVMOptions -XX:MaxRAMFraction=1 -XshowSettings:vm -version |& awk '/Max\. Heap Size \(Estimated\): [0-9KMG]+/{ print $5}') 43 | MAX_POSSIBLE_RAM=$MAX_POSSIBLE_RAM_STR 44 | CAL_UNIT=${MAX_POSSIBLE_RAM_STR: -1} 45 | if [ "$CAL_UNIT" == "G" -o "$CAL_UNIT" == "g" ]; then 46 | MAX_POSSIBLE_RAM=$(echo ${MAX_POSSIBLE_RAM_STR:0:${#MAX_POSSIBLE_RAM_STR}-1} `expr 1 \* 1024 \* 1024 \* 1024` | awk '{printf "%d",$1*$2}') 47 | elif [ "$CAL_UNIT" == "M" -o "$CAL_UNIT" == "m" ]; then 48 | MAX_POSSIBLE_RAM=$(echo ${MAX_POSSIBLE_RAM_STR:0:${#MAX_POSSIBLE_RAM_STR}-1} `expr 1 \* 1024 \* 1024` | awk '{printf "%d",$1*$2}') 49 | elif [ "$CAL_UNIT" == "K" -o "$CAL_UNIT" == "k" ]; then 50 | MAX_POSSIBLE_RAM=$(echo ${MAX_POSSIBLE_RAM_STR:0:${#MAX_POSSIBLE_RAM_STR}-1} `expr 1 \* 1024` | awk '{printf "%d",$1*$2}') 51 | fi 52 | MAX_POSSIBLE_HEAP=$[MAX_POSSIBLE_RAM/4] 53 | fi 54 | 55 | # Dynamically calculate parameters, for reference. 56 | Xms=$MAX_POSSIBLE_HEAP 57 | Xmx=$MAX_POSSIBLE_HEAP 58 | Xmn=$[MAX_POSSIBLE_HEAP/2] 59 | MaxDirectMemorySize=$MAX_POSSIBLE_HEAP 60 | # Set for `JAVA_OPT`. 61 | JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}" 62 | JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8" 63 | JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy" 64 | JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" 65 | JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" 66 | JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch" 67 | JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=${MaxDirectMemorySize}" 68 | JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking" 69 | JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib" 70 | #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n" 71 | JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" 72 | JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" 73 | 74 | numactl --interleave=all pwd > /dev/null 2>&1 75 | if [ $? -eq 0 ] 76 | then 77 | if [ -z "$RMQ_NUMA_NODE" ] ; then 78 | numactl --interleave=all $JAVA ${JAVA_OPT} $@ 79 | else 80 | numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@ 81 | fi 82 | else 83 | $JAVA ${JAVA_OPT} $@ 84 | fi 85 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/4.4.0/scripts/runserver-customize.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | #=========================================================================================== 19 | # Java Environment Setting 20 | #=========================================================================================== 21 | error_exit () 22 | { 23 | echo "ERROR: $1 !!" 24 | exit 1 25 | } 26 | 27 | [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java 28 | [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java 29 | [ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!" 30 | 31 | export JAVA_HOME 32 | export JAVA="$JAVA_HOME/bin/java" 33 | export BASE_DIR=$(dirname $0)/.. 34 | export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH} 35 | 36 | #=========================================================================================== 37 | # JVM Configuration 38 | #=========================================================================================== 39 | # Get the max heap used by a jvm, which used all the ram available to the container. 40 | if [ -z "$MAX_POSSIBLE_HEAP" ] 41 | then 42 | MAX_POSSIBLE_RAM_STR=$(java -XX:+UnlockExperimentalVMOptions -XX:MaxRAMFraction=1 -XshowSettings:vm -version |& awk '/Max\. Heap Size \(Estimated\): [0-9KMG]+/{ print $5}') 43 | MAX_POSSIBLE_RAM=$MAX_POSSIBLE_RAM_STR 44 | CAL_UNIT=${MAX_POSSIBLE_RAM_STR: -1} 45 | if [ "$CAL_UNIT" == "G" -o "$CAL_UNIT" == "g" ]; then 46 | MAX_POSSIBLE_RAM=$(echo ${MAX_POSSIBLE_RAM_STR:0:${#MAX_POSSIBLE_RAM_STR}-1} `expr 1 \* 1024 \* 1024 \* 1024` | awk '{printf "%d",$1*$2}') 47 | elif [ "$CAL_UNIT" == "M" -o "$CAL_UNIT" == "m" ]; then 48 | MAX_POSSIBLE_RAM=$(echo ${MAX_POSSIBLE_RAM_STR:0:${#MAX_POSSIBLE_RAM_STR}-1} `expr 1 \* 1024 \* 1024` | awk '{printf "%d",$1*$2}') 49 | elif [ "$CAL_UNIT" == "K" -o "$CAL_UNIT" == "k" ]; then 50 | MAX_POSSIBLE_RAM=$(echo ${MAX_POSSIBLE_RAM_STR:0:${#MAX_POSSIBLE_RAM_STR}-1} `expr 1 \* 1024` | awk '{printf "%d",$1*$2}') 51 | fi 52 | MAX_POSSIBLE_HEAP=$[MAX_POSSIBLE_RAM/4] 53 | fi 54 | 55 | # Dynamically calculate parameters, for reference. 56 | Xms=$MAX_POSSIBLE_HEAP 57 | Xmx=$MAX_POSSIBLE_HEAP 58 | Xmn=$[MAX_POSSIBLE_HEAP/2] 59 | # Set for `JAVA_OPT`. 60 | JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}" 61 | JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC" 62 | JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails" 63 | JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" 64 | JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" 65 | JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib" 66 | #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n" 67 | JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" 68 | JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" 69 | 70 | $JAVA ${JAVA_OPT} $@ 71 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmq/README.md: -------------------------------------------------------------------------------- 1 | # RocketMQ-Docker 2 | 3 | ```bash 4 | https://github.com/apache/rocketmq-externals/tree/master/rocketmq-docker 5 | ``` 6 | 7 | This is the Git repo of the Docker Image for Apache RocketMQ. You could run it through the following ways: 8 | 9 | 1. Single Node. 10 | 2. Cluster with docker-compose. 11 | 3. Cluster on Kubernetes. 12 | 13 | 14 | ## Prerequisites 15 | 16 | The Docker images in this repository should support Docker version 1.12+, and Kubernetes version 1.9+. 17 | 18 | 19 | ## Quick start 20 | 21 | ### Single Node 22 | 23 | Run: 24 | 25 | ``` 26 | cd 4.4.0 27 | 28 | ./play-docker.sh 29 | 30 | ``` 31 | 32 | ### Cluster with docker-compose 33 | 34 | Run: 35 | 36 | ``` 37 | cd 4.4.0 38 | 39 | ./play-docker-compose.sh 40 | 41 | ``` 42 | 43 | 44 | ### Cluster on Kubernetes 45 | 46 | Run: 47 | 48 | ``` 49 | cd 4.4.0 50 | 51 | ./play-kubernetes.sh 52 | 53 | ``` 54 | 55 | ## To use specified heap size for JVM 56 | 57 | 1. Use the environment variable MAX_POSSIBLE_HEAP to specify the max heap which JVM could use. Meanwhile, the max direct memory is the same size as MAX_POSSIBLE_HEAP. 58 | 59 | 2. To verify the usage: 60 | 61 | Run: 62 | 63 | ``` 64 | 65 | docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:4.4.0 sh mqnamesrv 66 | 67 | docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:4.4.0 sh mqbroker 68 | 69 | ``` 70 | 71 | ## How to verify RocketMQ works well 72 | 73 | ### Verify with Docker and docker-compose 74 | 75 | 1. Use `docker ps|grep rmqbroker` to find your RocketMQ broker container id. 76 | 77 | 2. Use `docker exec -it {container_id} ./mqadmin clusterList -n {nameserver_ip}:9876` to verify if RocketMQ broker works, for example: 78 | ``` 79 | root$ docker exec -it 63950574b491 ./mqadmin clusterList -n 192.168.43.56:9876 80 | OpenJDK 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 81 | OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0 82 | #Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE 83 | DefaultCluster 63950574b491 0 172.17.0.3:10911 V4_3_0 0.00(0,0ms) 0.00(0,0ms) 0 429398.92 -1.0000 84 | 85 | ``` 86 | 87 | ### Verify with Kubernetes 88 | 89 | 1. Use `kubectl get pods|grep rocketmq` to find your RocketMQ broker Pod id, for example: 90 | ``` 91 | [root@k8s-master rocketmq]# kubectl get pods |grep rocketmq 92 | rocketmq-7697d9d574-b5z7g 2/2 Running 0 2d 93 | ``` 94 | 95 | 2. Use `kubectl -n {namespace} exec -it {pod_id} -c broker bash` to login the broker pod, for example: 96 | ``` 97 | [root@k8s-master rocketmq]# kubectl -n default exec -it rocketmq-7697d9d574-b5z7g -c broker bash 98 | [root@rocketmq-7697d9d574-b5z7g bin]# 99 | ``` 100 | 101 | 3. Use `mqadmin clusterList -n {nameserver_ip}:9876` to verify if RocketMQ broker works, for example: 102 | ``` 103 | [root@rocketmq-7697d9d574-b5z7g bin]# ./mqadmin clusterList -n localhost:9876 104 | OpenJDK 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 105 | OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0 106 | #Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE 107 | DefaultCluster rocketmq-7697d9d574-b5z7g 0 192.168.196.14:10911 V4_3_0 0.00(0,0ms) 0.00(0,0ms) 0 429399.44 -1.0000 108 | 109 | ``` 110 | 111 | So you will find it works, enjoy ! 112 | 113 | 114 | ## FAQ 115 | 116 | #### 1. If I want the broker container to load my customized configuration file (which means `broker.conf`) when it starts, how can I achieve this? 117 | 118 | First, create the customized `broker.conf`, like below: 119 | ``` 120 | brokerClusterName = DefaultCluster 121 | brokerName = broker-a 122 | brokerId = 0 123 | deleteWhen = 04 124 | fileReservedTime = 48 125 | brokerRole = ASYNC_MASTER 126 | flushDiskType = ASYNC_FLUSH 127 | #set `brokerIP1` if you want to set physical IP as broker IP. 128 | brokerIP1=10.10.101.80 #change you own physical IP Address 129 | ``` 130 | 131 | And put the customized `broker.conf` file at a specific path, like "`pwd`/data/broker/conf/broker.conf". 132 | 133 | Then we can modify the `play-docker.sh` and volume this file to the broker container when it starts. For example: 134 | 135 | ``` 136 | docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store -v `pwd`/data/broker/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq:4.4 137 | .0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf 138 | 139 | ``` 140 | 141 | Finally we can find the customized `broker.conf` has been used in the broker container. For example: 142 | 143 | ``` 144 | huandeMacBook-Pro:4.4.0 huan$ docker ps |grep mqbroker 145 | a32c67aed6dd rocketmqinc/rocketmq:4.4.0 "sh mqbroker" 20 minutes ago Up 20 minutes 0.0.0.0:10909->10909/tcp, 9876/tcp, 0.0.0.0:10911->10911/tcp rmqbroker 146 | huandeMacBook-Pro:4.4.0 huan$ docker exec -it a32c67aed6dd cat /opt/rocketmq-4.4.0/conf/broker.conf 147 | brokerClusterName = DefaultCluster 148 | brokerName = broker-a 149 | brokerId = 0 150 | deleteWhen = 04 151 | fileReservedTime = 48 152 | brokerRole = ASYNC_MASTER 153 | flushDiskType = ASYNC_FLUSH 154 | #set `brokerIP1` if you want to set physical IP as broker IP. 155 | brokerIP1=10.10.101.80 #change you own physical IP Address 156 | 157 | ``` 158 | 159 | In the case of docker-compose, change the docker-compose.yml like following: 160 | ``` 161 | version: '2' 162 | services: 163 | namesrv: 164 | image: rocketmqinc/rocketmq:4.4.0 165 | container_name: rmqnamesrv 166 | ports: 167 | - 9876:9876 168 | volumes: 169 | - ./data/namesrv/logs:/home/rocketmq/logs 170 | - ./data/namesrv/store:/home/rocketmq/store 171 | command: sh mqnamesrv 172 | broker: 173 | image: rocketmqinc/rocketmq:4.4.0 174 | container_name: rmqbroker 175 | ports: 176 | - 10909:10909 177 | - 10911:10911 178 | volumes: 179 | - ./data/broker/logs:/home/rocketmq/logs 180 | - ./data/broker/store:/home/rocketmq/store 181 | - ./data/broker/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf 182 | #command: sh mqbroker -n namesrv:9876 183 | command: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf 184 | depends_on: 185 | - namesrv 186 | 187 | ``` 188 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmqinc_rocketmq/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rocketmqinc/rocketmq:4.4.0 2 | MAINTAINER LiangGzone "lianggzone@163.com" 3 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmqinc_rocketmq/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 RocketMQ 2 | 3 | 镜像地址 4 | 5 | ``` 6 | https://hub.docker.com/r/rocketmqinc/rocketmq/tags 7 | ``` 8 | 9 | 生成镜像 10 | 11 | ```bash 12 | FROM rocketmqinc/rocketmq:4.4.0 13 | MAINTAINER LiangGzone "lianggzone@163.com" 14 | ``` 15 | 16 | 启动 nameserver 命令 17 | 18 | ```bash 19 | docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv lianggzone/rocketmq sh mqnamesrv 20 | ``` 21 | 22 | 启动 broker 命令 23 | 24 | ```bash 25 | docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" lianggzone/rocketmq sh mqbroker -c ../conf/broker.conf 26 | ``` 27 | 28 | 启动 rocketmq-console 命令 29 | 30 | ```bash 31 | docker run -d -p 8080:8080 --name rmq-ng --link rmqnamesrv:namesrv -e "rocketmq.config.namesrvAddr=namesrv:9876" styletang/rocketmq-console-ng 32 | ``` 33 | 34 | Docker 会在后台运行一个 RocketMQ 容器。 35 | -------------------------------------------------------------------------------- /server/rocketmq/rocketmqinc_rocketmq/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/rocketmq" . 3 | -------------------------------------------------------------------------------- /server/zookeeper/zookeeper_cluster/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 Zookeeper 集群版 2 | 3 | 运行命令 4 | 5 | ```bash 6 | COMPOSE_PROJECT_NAME=zk_cluster docker-compose up 7 | ``` 8 | 9 | Docker 会在后台运行一个 Zookeeper 容器, 名字是 zookeeper_one, 并且它默认会暴露 2181 端口。 10 | 11 | 此时,我们可以通过 `COMPOSE_PROJECT_NAME=zk_cluster docker-compose ps` 查看 ZK 的运行情况。 12 | 13 | 同时,我们也可以使用 IDEA 的 `Zookeeper` 插件进行访问。地址:https://plugins.jetbrains.com/plugin/7364-zookeeper 14 | -------------------------------------------------------------------------------- /server/zookeeper/zookeeper_cluster/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '1' 2 | services: 3 | zk1: 4 | image: zookeeper 5 | restart: always 6 | container_name: zk1 7 | ports: 8 | - "2181:2181" 9 | environment: 10 | ZOO_MY_ID: 1 11 | ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 12 | 13 | zk2: 14 | image: zookeeper 15 | restart: always 16 | container_name: zk2 17 | ports: 18 | - "2182:2181" 19 | environment: 20 | ZOO_MY_ID: 2 21 | ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 22 | 23 | zk3: 24 | image: zookeeper 25 | restart: always 26 | container_name: zk3 27 | ports: 28 | - "2183:2181" 29 | environment: 30 | ZOO_MY_ID: 3 31 | ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 32 | -------------------------------------------------------------------------------- /server/zookeeper/zookeeper_one/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM zookeeper:latest 2 | MAINTAINER LiangGzone "lianggzone@163.com" 3 | -------------------------------------------------------------------------------- /server/zookeeper/zookeeper_one/README.MD: -------------------------------------------------------------------------------- 1 | # Dockerfile 安装 Zookeeper 单机版 2 | 3 | 生成镜像 4 | 5 | ```bash 6 | FROM zookeeper:latest 7 | MAINTAINER LiangGzone "lianggzone@163.com" 8 | ``` 9 | 10 | 运行命令 11 | 12 | ```bash 13 | docker run -p 2181:2181 --name zookeeper_one -d lianggzone/zookeeper_one 14 | ``` 15 | 16 | Docker 会在后台运行一个 Zookeeper 容器, 名字是 zookeeper_one, 并且它默认会暴露 2181 端口。 17 | 18 | 此时,我们可以通过 `docker logs -f zookeeper_one` 查看 ZK 的运行情况。 19 | 20 | 同时,我们也可以使用 IDEA 的 `Zookeeper` 插件进行访问。地址:https://plugins.jetbrains.com/plugin/7364-zookeeper 21 | -------------------------------------------------------------------------------- /server/zookeeper/zookeeper_one/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker build -t="lianggzone/zookeeper_one" . 3 | -------------------------------------------------------------------------------- /server/zookeeper/zookeeper_one/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | docker run -p 2181:2181 --name zookeeper_one -d lianggzone/zookeeper_one 3 | --------------------------------------------------------------------------------