diff --git a/.circleci/config.yml b/.circleci/config.yml index 31521bb3c6..7e466c09ce 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -323,8 +323,10 @@ jobs: # To change the contents of the build container, modify docker/Dockerfile.ci # To change the final release container, modify docker/Dockerfile.iox perf_image: - docker: - - image: quay.io/influxdb/rust:ci + # need a machine executor to have a full-powered docker daemon (the `setup_remote_docker` system just provides a + # kinda small node) + machine: + image: ubuntu-2004:202111-01 resource_class: xlarge # use of a smaller executor tends crashes on link environment: # Disable incremental compilation to avoid overhead. We are not preserving these files anyway. @@ -337,49 +339,27 @@ jobs: RUSTFLAGS: "-C target-feature=+avx2" steps: - checkout - - rust_components - - cache_restore - - run: - name: Cargo release build with target arch set for CRoaring - command: cargo build --release --no-default-features --features="aws,gcp,azure,jemalloc_replacing_malloc" - # linking might take a while and doesn't produce CLI output - no_output_timeout: 20m - - run: - name: Compress debug symbols - command: objcopy --compress-debug-sections target/release/influxdb_iox - - run: | - echo "binary sha256sum after build is (not to be confused w/ the GIT SHA and the resulting image SHA!)" - sha256sum target/release/influxdb_iox - - run: - name: Print rustc target CPU options - command: target/release/influxdb_iox debug print-cpu - - setup_remote_docker: - # There seems to be a cache invalidation bug in docker - # or in the way that circleci implements layer caching. - # Disabling for now, and tracked further investigations - # in https://github.com/influxdata/k8s-idpe/issues/3038 - docker_layer_caching: false - version: 20.10.7 - - run: | - sudo apt-get update - sudo apt-get install -y docker.io - docker --version - run: | echo "$QUAY_INFLUXDB_IOX_PASS" | docker login quay.io --username $QUAY_INFLUXDB_IOX_USER --password-stdin - run: - # Docker has functionality to support per-Dockerfile .dockerignore - # This was added in https://github.com/moby/buildkit/pull/901 - # And included in 19.03 - https://docs.docker.com/engine/release-notes/19.03/#19030 - # Unfortunately CircleCI only seems to understand a root-level .dockerignore - # So we need to move it into position for it to not send ~10GB of build context - name: Fudge CircleCI Docker Context - command: mv docker/Dockerfile.iox.dockerignore .dockerignore - - run: | - BRANCH=$(git rev-parse --abbrev-ref HEAD | tr '/' '.') - COMMIT_SHA=$(git rev-parse --short HEAD) - docker build -t quay.io/influxdb/iox:$COMMIT_SHA -t quay.io/influxdb/iox:main -f docker/Dockerfile.iox . - docker push --all-tags quay.io/influxdb/iox - echo "export COMMIT_SHA=${COMMIT_SHA}" >> $BASH_ENV + name: Cargo release build with target arch set for CRoaring + command: | + BRANCH=$(git rev-parse --abbrev-ref HEAD | tr '/' '.') + COMMIT_SHA=$(git rev-parse --short HEAD) + + docker buildx build \ + --build-arg RUSTFLAGS="-C target-feature=+avx2" \ + --tag quay.io/influxdb/iox:$COMMIT_SHA \ + --tag quay.io/influxdb/iox:main \ + . + + docker run -it --rm quay.io/influxdb/iox:$COMMIT_SHA debug print-cpu + + docker push --all-tags quay.io/influxdb/iox + + echo "export COMMIT_SHA=${COMMIT_SHA}" >> $BASH_ENV + # linking might take a while and doesn't produce CLI output + no_output_timeout: 20m - run: name: Deploy tags command: | diff --git a/Dockerfile b/Dockerfile index d49bd137dc..c8b800b6f5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,34 +1,51 @@ #syntax=docker/dockerfile:1.2 -FROM rust:1.56-slim-bullseye as build +ARG RUST_VERSION=1.57 +FROM rust:${RUST_VERSION}-slim-bullseye as build # cache mounts below may already exist and owned by root USER root RUN apt update \ - && apt install --yes build-essential pkg-config libssl-dev clang \ + && apt install --yes binutils build-essential pkg-config libssl-dev clang \ && rm -rf /var/lib/{apt,dpkg,cache,log} # Build influxdb_iox COPY . /influxdb_iox WORKDIR /influxdb_iox +ARG CARGO_INCREMENTAL=yes +ARG CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 +ARG CARGO_PROFILE_RELEASE_LTO=thin +ARG FEATURES=aws,gcp,azure,jemalloc_replacing_malloc +ARG ROARING_ARCH="haswell" +ARG RUSTFLAGS="" +ENV CARGO_INCREMENTAL=$CARGO_INCREMENTAL \ + CARGO_PROFILE_RELEASE_CODEGEN_UNITS=$CARGO_PROFILE_RELEASE_CODEGEN_UNITS \ + CARGO_PROFILE_RELEASE_LTO=$CARGO_PROFILE_RELEASE_LTO \ + FEATURES=$FEATURES \ + ROARING_ARCH=$ROARING_ARCH \ + RUSTFLAGS=$RUSTFLAGS + RUN \ --mount=type=cache,id=influxdb_iox_registry,sharing=locked,target=/usr/local/cargo/registry \ --mount=type=cache,id=influxdb_iox_git,sharing=locked,target=/usr/local/cargo/git \ --mount=type=cache,id=influxdb_iox_target,sharing=locked,target=/influxdb_iox/target \ - du -cshx /usr/local/cargo/registry /usr/local/cargo/git /influxdb_iox/target && \ - cargo build --target-dir /influxdb_iox/target --release --no-default-features --features=aws,gcp,azure && \ - cp /influxdb_iox/target/release/influxdb_iox /root/influxdb_iox && \ - du -cshx /usr/local/cargo/registry /usr/local/cargo/git /influxdb_iox/target + du -cshx /usr/local/cargo/registry /usr/local/cargo/git /influxdb_iox/target && \ + cargo build --target-dir /influxdb_iox/target --release --no-default-features --features="$FEATURES" && \ + objcopy --compress-debug-sections target/release/influxdb_iox && \ + cp /influxdb_iox/target/release/influxdb_iox /root/influxdb_iox && \ + du -cshx /usr/local/cargo/registry /usr/local/cargo/git /influxdb_iox/target + + FROM debian:bullseye-slim RUN apt update \ - && apt install --yes libssl1.1 ca-certificates --no-install-recommends \ - && rm -rf /var/lib/{apt,dpkg,cache,log} + && apt install --yes ca-certificates gettext-base libssl1.1 --no-install-recommends \ + && rm -rf /var/lib/{apt,dpkg,cache,log} RUN groupadd --gid 1500 iox \ - && useradd --uid 1500 --gid iox --shell /bin/bash --create-home iox + && useradd --uid 1500 --gid iox --shell /bin/bash --create-home iox USER iox @@ -36,9 +53,12 @@ RUN mkdir ~/.influxdb_iox RUN ls -la ~/.influxdb_iox COPY --from=build /root/influxdb_iox /usr/bin/influxdb_iox +COPY docker/entrypoint.sh /usr/bin/entrypoint.sh + +ENV INFLUXDB_IOX_SERVER_MODE=database EXPOSE 8080 8082 -ENTRYPOINT ["/usr/bin/influxdb_iox"] +ENTRYPOINT ["/usr/bin/entrypoint.sh"] -CMD ["run", "database"] +CMD ["run", "$INFLUXDB_IOX_SERVER_MODE"] diff --git a/Dockerfile.dockerignore b/Dockerfile.dockerignore index c09b63f912..864b76d6cb 100644 --- a/Dockerfile.dockerignore +++ b/Dockerfile.dockerignore @@ -2,3 +2,4 @@ target/ tests/ docker/ +!docker/entrypoint.sh diff --git a/docker/Dockerfile.iox b/docker/Dockerfile.iox deleted file mode 100644 index ae1f38e13c..0000000000 --- a/docker/Dockerfile.iox +++ /dev/null @@ -1,27 +0,0 @@ -### -# Dockerfile used for deploying IOx -## -FROM debian:bullseye-slim - -RUN apt-get update \ - && apt-get install -y libssl1.1 libgcc1 libc6 ca-certificates gettext-base --no-install-recommends \ - && rm -rf /var/lib/{apt,dpkg,cache,log} - -RUN groupadd -g 1500 rust \ - && useradd -u 1500 -g rust -s /bin/bash -m rust - -USER rust - -RUN mkdir ~/.influxdb_iox -RUN ls -la ~/.influxdb_iox - -ENV INFLUXDB_IOX_SERVER_MODE=database - -COPY docker/entrypoint.sh /usr/bin/entrypoint.sh -COPY target/release/influxdb_iox /usr/bin/influxdb_iox - -EXPOSE 8080 8082 - -ENTRYPOINT ["/usr/bin/entrypoint.sh"] - -CMD ["run", "$INFLUXDB_IOX_SERVER_MODE"] diff --git a/docker/Dockerfile.iox.dockerignore b/docker/Dockerfile.iox.dockerignore deleted file mode 100644 index e63be90bd9..0000000000 --- a/docker/Dockerfile.iox.dockerignore +++ /dev/null @@ -1,5 +0,0 @@ -# Ignore everything -** -# Except -!docker/entrypoint.sh -!target/release/influxdb_iox