build(docker): change docker base image to debian, and add new tag for alpine image
This commit is contained in:
parent
9ea923d9d7
commit
d5704c2c48
|
@ -344,7 +344,8 @@ jobs:
|
|||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- alpine3.15.1
|
||||
- [alpine3.15.1, "alpine:3.15.1", "deploy/docker/Dockerfile.alpine"]
|
||||
- [debian11, "debian:11-slim", "deploy/docker/Dockerfile"]
|
||||
profile: ${{ fromJson(needs.prepare.outputs.BUILD_PROFILES) }}
|
||||
# NOTE: for docker, only support latest otp and elixir
|
||||
# versions, not a matrix
|
||||
|
@ -368,7 +369,7 @@ jobs:
|
|||
- arch: amd64
|
||||
build_machine: aws-arm64
|
||||
include:
|
||||
- os: alpine3.15.1
|
||||
- os: [debian11, "debian:11-slim", "deploy/docker/Dockerfile"]
|
||||
profile: emqx
|
||||
otp: 24.2.1-1
|
||||
elixir: 1.13.4
|
||||
|
@ -376,7 +377,7 @@ jobs:
|
|||
build_elixir: no_elixir
|
||||
build_machine: ubuntu-20.04
|
||||
registry: public.ecr.aws
|
||||
- os: alpine3.15.1
|
||||
- os: [debian11, "debian:11-slim", "deploy/docker/Dockerfile"]
|
||||
profile: emqx
|
||||
otp: 24.2.1-1
|
||||
elixir: 1.13.4
|
||||
|
@ -402,7 +403,7 @@ jobs:
|
|||
path: |
|
||||
source/_build/default/lib/quicer/
|
||||
source/deps/quicer/
|
||||
key: ${{ matrix.os }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ needs.prepare.outputs.DEP_QUICER_REF }}
|
||||
key: ${{ matrix.os[0] }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ needs.prepare.outputs.DEP_QUICER_REF }}
|
||||
|
||||
- name: Login for docker.
|
||||
uses: docker/login-action@v1
|
||||
|
@ -423,7 +424,6 @@ jobs:
|
|||
- name: prepare for docker-action-parms
|
||||
id: pre-meta
|
||||
run: |
|
||||
img=$(echo ${{ matrix.os }} | sed 's#\([0-9.]\+\)$#:\1#g')
|
||||
emqx_name=${{ matrix.profile }}
|
||||
img_suffix=${{ matrix.arch }}
|
||||
img_labels="org.opencontainers.image.otp.version=${{ matrix.otp }}"
|
||||
|
@ -433,7 +433,9 @@ jobs:
|
|||
img_suffix="elixir-${{ matrix.arch }}"
|
||||
img_labels="org.opencontainers.image.elixir.version=${{ matrix.elixir }}\n${img_labels}"
|
||||
fi
|
||||
echo "::set-output name=img::${img}"
|
||||
if [[ ${{ matrix.os[0] }} =~ "alpine" ]]; then
|
||||
img_suffix="${img_suffix}-alpine"
|
||||
fi
|
||||
echo "::set-output name=emqx_name::${emqx_name}"
|
||||
echo "::set-output name=img_suffix::${img_suffix}"
|
||||
echo "::set-output name=img_labels::${img_labels}"
|
||||
|
@ -465,10 +467,10 @@ jobs:
|
|||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
build-args: |
|
||||
BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-16:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}
|
||||
RUN_FROM=${{ steps.pre-meta.outputs.img }}
|
||||
BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-16:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os[0] }}
|
||||
RUN_FROM=${{ matrix.os[1] }}
|
||||
EMQX_NAME=${{ steps.pre-meta.outputs.emqx_name }}
|
||||
file: source/deploy/docker/Dockerfile
|
||||
file: source/${{ matrix.os[2] }}
|
||||
context: source
|
||||
|
||||
docker-push-multi-arch-manifest:
|
||||
|
@ -483,6 +485,9 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- [alpine3.15.1, "alpine:3.15.1", "deploy/docker/Dockerfile.alpine"]
|
||||
- [debian11, "debian:11-slim", "deploy/docker/Dockerfile"]
|
||||
profile: ${{ fromJson(needs.prepare.outputs.BUILD_PROFILES) }}
|
||||
# NOTE: for docker, only support latest otp version, not a matrix
|
||||
otp:
|
||||
|
@ -506,7 +511,7 @@ jobs:
|
|||
- arch: amd64
|
||||
build_machine: aws-arm64
|
||||
include:
|
||||
- os: alpine3.15.1
|
||||
- os: [debian11, "debian:11-slim", "deploy/docker/Dockerfile"]
|
||||
profile: emqx
|
||||
otp: 24.2.1-1
|
||||
elixir: 1.13.4
|
||||
|
@ -514,7 +519,7 @@ jobs:
|
|||
build_elixir: no_elixir
|
||||
build_machine: ubuntu-20.04
|
||||
registry: public.ecr.aws
|
||||
- os: alpine3.15.1
|
||||
- os: [debian11, "debian:11-slim", "deploy/docker/Dockerfile"]
|
||||
profile: emqx
|
||||
otp: 24.2.1-1
|
||||
elixir: 1.13.4
|
||||
|
@ -551,7 +556,6 @@ jobs:
|
|||
- name: prepare for docker-action-parms
|
||||
id: pre-meta
|
||||
run: |
|
||||
img=$(echo ${{ matrix.os }} | sed 's#\([0-9.]\+\)$#:\1#g')
|
||||
emqx_name=${{ matrix.profile }}
|
||||
img_suffix=${{ matrix.arch }}
|
||||
img_labels="org.opencontainers.image.otp.version=${{ matrix.otp }}"
|
||||
|
@ -561,6 +565,9 @@ jobs:
|
|||
img_suffix="elixir-${{ matrix.arch }}"
|
||||
img_labels="org.opencontainers.image.elixir.version=${{ matrix.elixir }}\n$img_labels"
|
||||
fi
|
||||
if [[ ${{ matrix.os[0] }} =~ "alpine" ]]; then
|
||||
img_suffix="${img_suffix}-alpine"
|
||||
fi
|
||||
echo "::set-output name=img::${img}"
|
||||
echo "::set-output name=emqx_name::${emqx_name}"
|
||||
echo "::set-output name=img_suffix::${img_suffix}"
|
||||
|
|
|
@ -47,7 +47,7 @@ jobs:
|
|||
- mnesia
|
||||
- rlog
|
||||
os:
|
||||
- alpine3.15.1
|
||||
- ["alpine3.15.1", "alpine:3.15.1"]
|
||||
otp:
|
||||
- 24.2.1-1
|
||||
elixir:
|
||||
|
@ -78,12 +78,13 @@ jobs:
|
|||
path: |
|
||||
source/_build/default/lib/quicer/
|
||||
source/deps/quicer/
|
||||
key: ${{ matrix.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }}
|
||||
key: ${{ matrix.os[0] }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }}
|
||||
|
||||
- name: make docker image
|
||||
working-directory: source
|
||||
env:
|
||||
EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-16:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}
|
||||
EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-16:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os[0] }}
|
||||
EMQX_RUNNER: ${{ matrix.os[1] }}
|
||||
run: |
|
||||
make ${{ matrix.profile }}-docker
|
||||
- name: run emqx
|
||||
|
@ -128,7 +129,7 @@ jobs:
|
|||
profile:
|
||||
- emqx
|
||||
os:
|
||||
- alpine3.15.1
|
||||
- ["debian11", "debian:11-slim"]
|
||||
otp:
|
||||
- 24.2.1-1
|
||||
elixir:
|
||||
|
@ -158,12 +159,13 @@ jobs:
|
|||
uses: actions/cache@v2
|
||||
with:
|
||||
path: source/_build/default/lib/quicer/
|
||||
key: ${{ matrix.os }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }}
|
||||
key: ${{ matrix.os[0] }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }}
|
||||
|
||||
- name: make docker image
|
||||
working-directory: source
|
||||
env:
|
||||
EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-16:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}
|
||||
EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-16:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os[0] }}
|
||||
EMQX_RUNNER: ${{ matrix.os[1] }}
|
||||
run: |
|
||||
make ${{ matrix.profile }}-docker
|
||||
echo "TARGET=emqx/${{ matrix.profile }}" >> $GITHUB_ENV
|
||||
|
|
5
Makefile
5
Makefile
|
@ -3,12 +3,11 @@ REBAR = $(CURDIR)/rebar3
|
|||
BUILD = $(CURDIR)/build
|
||||
SCRIPTS = $(CURDIR)/scripts
|
||||
export EMQX_RELUP ?= true
|
||||
export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/5.0-16:1.13.4-24.2.1-1-alpine3.15.1
|
||||
export EMQX_DEFAULT_RUNNER = alpine:3.15.1
|
||||
export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/5.0-16:1.13.4-24.2.1-1-debian11
|
||||
export EMQX_DEFAULT_RUNNER = debian:11-slim
|
||||
export OTP_VSN ?= $(shell $(CURDIR)/scripts/get-otp-vsn.sh)
|
||||
export ELIXIR_VSN ?= $(shell $(CURDIR)/scripts/get-elixir-vsn.sh)
|
||||
export EMQX_DASHBOARD_VERSION ?= v0.35.0
|
||||
export DOCKERFILE := deploy/docker/Dockerfile
|
||||
export EMQX_REL_FORM ?= tgz
|
||||
ifeq ($(OS),Windows_NT)
|
||||
export REBAR_COLOR=none
|
||||
|
|
15
build
15
build
|
@ -209,13 +209,18 @@ make_tgz() {
|
|||
log "Tarball sha256sum: $(cat "${target}.sha256")"
|
||||
}
|
||||
|
||||
## This function builds the default docker image based on alpine:3.15.1 (by default)
|
||||
## This function builds the default docker image based on debian 11
|
||||
make_docker() {
|
||||
EMQX_BUILDER="${EMQX_BUILDER:-${EMQX_DEFAULT_BUILDER}}"
|
||||
EMQX_RUNNER="${EMQX_RUNNER:-${EMQX_DEFAULT_RUNNER}}"
|
||||
|
||||
if [[ "$PROFILE" = *-elixir ]]
|
||||
then
|
||||
if [ -z "${EMQX_DOCKERFILE:-}" ]; then
|
||||
if [[ "$EMQX_BUILDER" =~ "alpine" ]]; then
|
||||
EMQX_DOCKERFILE='deploy/docker/Dockerfile.alpine'
|
||||
else
|
||||
EMQX_DOCKERFILE='deploy/docker/Dockerfile'
|
||||
fi
|
||||
fi
|
||||
if [[ "$PROFILE" = *-elixir ]]; then
|
||||
PKG_VSN="$PKG_VSN-elixir"
|
||||
fi
|
||||
|
||||
|
@ -225,7 +230,7 @@ make_docker() {
|
|||
--build-arg RUN_FROM="${EMQX_RUNNER}" \
|
||||
--build-arg EMQX_NAME="$PROFILE" \
|
||||
--tag "emqx/${PROFILE%%-elixir}:${PKG_VSN}" \
|
||||
-f "${DOCKERFILE}" .
|
||||
-f "${EMQX_DOCKERFILE}" .
|
||||
}
|
||||
|
||||
function join {
|
||||
|
|
|
@ -1,28 +1,7 @@
|
|||
ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-16:1.13.4-24.2.1-1-alpine3.15.1
|
||||
ARG RUN_FROM=alpine:3.15.1
|
||||
ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-16:1.13.4-24.2.1-1-debian11
|
||||
ARG RUN_FROM=debian:11-slim
|
||||
FROM ${BUILD_FROM} AS builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
bison \
|
||||
bsd-compat-headers \
|
||||
coreutils \
|
||||
curl \
|
||||
flex \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
jq \
|
||||
libc-dev \
|
||||
libstdc++ \
|
||||
libtool \
|
||||
make \
|
||||
ncurses-dev \
|
||||
openssl-dev \
|
||||
perl
|
||||
|
||||
COPY . /emqx
|
||||
|
||||
ARG EMQX_NAME=emqx
|
||||
|
@ -45,15 +24,18 @@ COPY deploy/docker/docker-entrypoint.sh /usr/bin/
|
|||
COPY --from=builder /emqx-rel/emqx /opt/emqx
|
||||
|
||||
RUN ln -s /opt/emqx/bin/* /usr/local/bin/
|
||||
RUN apk add --no-cache curl ncurses-libs openssl sudo libstdc++ bash
|
||||
|
||||
RUN apt-get update; \
|
||||
apt-get install -y --no-install-recommends ca-certificates procps; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /opt/emqx
|
||||
|
||||
RUN adduser -D -u 1000 emqx \
|
||||
&& echo "emqx ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers
|
||||
|
||||
RUN chgrp -Rf emqx /opt/emqx && chmod -Rf g+w /opt/emqx \
|
||||
&& chown -Rf emqx /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
|
||||
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-15:1.13.3-24.2.1-1-alpine3.15.1
|
||||
ARG RUN_FROM=alpine:3.15.1
|
||||
FROM ${BUILD_FROM} AS builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
bison \
|
||||
bsd-compat-headers \
|
||||
coreutils \
|
||||
curl \
|
||||
flex \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
jq \
|
||||
libc-dev \
|
||||
libstdc++ \
|
||||
libtool \
|
||||
make \
|
||||
ncurses-dev \
|
||||
openssl-dev \
|
||||
perl
|
||||
|
||||
COPY . /emqx
|
||||
|
||||
ARG EMQX_NAME=emqx
|
||||
ENV EMQX_RELUP=false
|
||||
|
||||
RUN export PROFILE="$EMQX_NAME" \
|
||||
&& export EMQX_NAME=${EMQX_NAME%%-elixir} \
|
||||
&& export EMQX_LIB_PATH="_build/$EMQX_NAME/lib" \
|
||||
&& export EMQX_REL_PATH="/emqx/_build/$EMQX_NAME/rel/emqx" \
|
||||
&& export EMQX_REL_FORM='docker' \
|
||||
&& cd /emqx \
|
||||
&& rm -rf $EMQX_LIB_PATH \
|
||||
&& make $PROFILE \
|
||||
&& mkdir -p /emqx-rel \
|
||||
&& mv $EMQX_REL_PATH /emqx-rel
|
||||
|
||||
FROM $RUN_FROM
|
||||
|
||||
COPY deploy/docker/docker-entrypoint.sh /usr/bin/
|
||||
COPY --from=builder /emqx-rel/emqx /opt/emqx
|
||||
|
||||
RUN ln -s /opt/emqx/bin/* /usr/local/bin/
|
||||
RUN apk add --no-cache curl ncurses-libs openssl sudo libstdc++ bash
|
||||
|
||||
WORKDIR /opt/emqx
|
||||
|
||||
RUN adduser -D -u 1000 emqx \
|
||||
&& echo "emqx ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers
|
||||
|
||||
RUN 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 gen_rpc port mapping
|
||||
# - 6369 6370 for distributed node
|
||||
EXPOSE 1883 8081 8083 8084 8883 11883 18083 4370 5369 6369 6370
|
||||
|
||||
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
|
||||
|
||||
CMD ["/opt/emqx/bin/emqx", "foreground"]
|
Loading…
Reference in New Issue