test: Dockerfile:s to build test images
This commit is contained in:
parent
0e06e4acaa
commit
b92708726a
|
@ -0,0 +1,42 @@
|
||||||
|
## This is a fast-build Dockerfile only for testing
|
||||||
|
FROM ubuntu:20.04
|
||||||
|
ARG PROFILE=emqx
|
||||||
|
|
||||||
|
RUN apt-get update; \
|
||||||
|
apt-get install -y --no-install-recommends ca-certificates procps; \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN mkdir /opt/emqx
|
||||||
|
RUN date > /opt/emqx/BUILD_TIME
|
||||||
|
COPY _build/${PROFILE}/rel/emqx /opt/emqx
|
||||||
|
RUN ln -s /opt/emqx/bin/* /usr/local/bin/
|
||||||
|
COPY deploy/docker/docker-entrypoint.sh /usr/bin/
|
||||||
|
|
||||||
|
WORKDIR /opt/emqx
|
||||||
|
|
||||||
|
|
||||||
|
RUN groupadd -r -g 1000 emqx; \
|
||||||
|
useradd -r -m -u 1000 -g emqx emqx; \
|
||||||
|
chgrp -Rf emqx /opt/emqx; \
|
||||||
|
chmod -Rf g+w /opt/emqx; \
|
||||||
|
chown -Rf emqx /opt/emqx
|
||||||
|
|
||||||
|
USER emqx
|
||||||
|
|
||||||
|
VOLUME ["/opt/emqx/log", "/opt/emqx/data"]
|
||||||
|
|
||||||
|
# emqx will occupy these port:
|
||||||
|
# - 1883 port for MQTT
|
||||||
|
# - 8081 for mgmt API
|
||||||
|
# - 8083 for WebSocket/HTTP
|
||||||
|
# - 8084 for WSS/HTTPS
|
||||||
|
# - 8883 port for MQTT(SSL)
|
||||||
|
# - 11883 port for internal MQTT/TCP
|
||||||
|
# - 18083 for dashboard
|
||||||
|
# - 4370 default Erlang distrbution port
|
||||||
|
# - 5369 for backplain gen_rpc
|
||||||
|
EXPOSE 1883 8081 8083 8084 8883 11883 18083 4370 5369
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
|
||||||
|
|
||||||
|
CMD ["/opt/emqx/bin/emqx", "foreground"]
|
|
@ -0,0 +1,4 @@
|
||||||
|
*
|
||||||
|
!_build/emqx
|
||||||
|
!_build/emqx-enterprise
|
||||||
|
!deploy
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
set -x
|
||||||
|
|
||||||
|
PROFILE="$1"
|
||||||
|
COMPILE="${2:-no}"
|
||||||
|
DISTRO="$(./scripts/get-distro.sh)"
|
||||||
|
PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh "$PROFILE")}"
|
||||||
|
|
||||||
|
case "$DISTRO" in
|
||||||
|
ubuntu20*)
|
||||||
|
EMQX_DOCKERFILE="Dockerfile.ubuntu20.04.runner"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "sorry, no support for $DISTRO yet"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$COMPILE" = '--compile' ]; then
|
||||||
|
make "$PROFILE"
|
||||||
|
sync
|
||||||
|
fi
|
||||||
|
|
||||||
|
export DOCKER_BUILDKIT=1
|
||||||
|
docker build --build-arg PROFILE="${PROFILE}" \
|
||||||
|
-t "emqx/emqx:${PKG_VSN}-${DISTRO}" \
|
||||||
|
-f "$EMQX_DOCKERFILE" .
|
|
@ -2,14 +2,6 @@
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
## This script takes the first argument as docker image name,
|
|
||||||
## starts two containers running with the built code mount
|
|
||||||
## into docker containers.
|
|
||||||
##
|
|
||||||
## NOTE: containers are not instructed to rebuild emqx,
|
|
||||||
## Please use a docker image which is compatible with
|
|
||||||
## the docker host.
|
|
||||||
##
|
|
||||||
## EMQX can only start with longname (https://erlang.org/doc/reference_manual/distributed.html)
|
## EMQX can only start with longname (https://erlang.org/doc/reference_manual/distributed.html)
|
||||||
## The host name part of EMQX's node name has to be static, this means we should either
|
## The host name part of EMQX's node name has to be static, this means we should either
|
||||||
## pre-assign static IP for containers, or ensure containers can communiate with each other by name
|
## pre-assign static IP for containers, or ensure containers can communiate with each other by name
|
||||||
|
@ -19,7 +11,6 @@ set -euo pipefail
|
||||||
cd -P -- "$(dirname -- "$0")/.."
|
cd -P -- "$(dirname -- "$0")/.."
|
||||||
|
|
||||||
IMAGE="${1}"
|
IMAGE="${1}"
|
||||||
PROJ_DIR="$(pwd)"
|
|
||||||
|
|
||||||
NET='emqx.io'
|
NET='emqx.io'
|
||||||
NODE1="node1.$NET"
|
NODE1="node1.$NET"
|
||||||
|
@ -35,23 +26,23 @@ docker network create "$NET"
|
||||||
|
|
||||||
docker run -d -t --restart=always --name "$NODE1" \
|
docker run -d -t --restart=always --name "$NODE1" \
|
||||||
--net "$NET" \
|
--net "$NET" \
|
||||||
|
-e EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug \
|
||||||
-e EMQX_NODE_NAME="emqx@$NODE1" \
|
-e EMQX_NODE_NAME="emqx@$NODE1" \
|
||||||
-e EMQX_NODE_COOKIE="$COOKIE" \
|
-e EMQX_NODE_COOKIE="$COOKIE" \
|
||||||
-p 18083:18083 \
|
-p 18083:18083 \
|
||||||
-v "$PROJ_DIR"/_build/emqx/rel/emqx:/built \
|
"$IMAGE"
|
||||||
"$IMAGE" sh -c 'cp -r /built /emqx && /emqx/bin/emqx console'
|
|
||||||
|
|
||||||
docker run -d -t --restart=always --name "$NODE2" \
|
docker run -d -t --restart=always --name "$NODE2" \
|
||||||
--net "$NET" \
|
--net "$NET" \
|
||||||
|
-e EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug \
|
||||||
-e EMQX_NODE_NAME="emqx@$NODE2" \
|
-e EMQX_NODE_NAME="emqx@$NODE2" \
|
||||||
-e EMQX_NODE_COOKIE="$COOKIE" \
|
-e EMQX_NODE_COOKIE="$COOKIE" \
|
||||||
-p 18084:18083 \
|
-p 18084:18083 \
|
||||||
-v "$PROJ_DIR"/_build/emqx/rel/emqx:/built \
|
"$IMAGE"
|
||||||
"$IMAGE" sh -c 'cp -r /built /emqx && /emqx/bin/emqx console'
|
|
||||||
|
|
||||||
wait (){
|
wait (){
|
||||||
container="$1"
|
container="$1"
|
||||||
while ! docker exec "$container" /emqx/bin/emqx_ctl status >/dev/null 2>&1; do
|
while ! docker exec "$container" emqx_ctl status >/dev/null 2>&1; do
|
||||||
echo -n '.'
|
echo -n '.'
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
@ -61,4 +52,4 @@ wait $NODE1
|
||||||
wait $NODE2
|
wait $NODE2
|
||||||
echo
|
echo
|
||||||
|
|
||||||
docker exec $NODE1 /emqx/bin/emqx_ctl cluster join "emqx@$NODE2"
|
docker exec $NODE1 emqx_ctl cluster join "emqx@$NODE2"
|
||||||
|
|
Loading…
Reference in New Issue