# ab_server container for the AB CIP integration suite. # # ab_server is a C program in libplctag/libplctag under src/tools/ab_server. # We clone at a pinned commit, build just the ab_server target via CMake, # and copy the resulting binary into a slim runtime stage so the published # image stays small (~60MB vs ~350MB for the build stage). # -------- stage 1: build ab_server from source -------- FROM debian:bookworm-slim AS build RUN apt-get update && apt-get install -y --no-install-recommends \ git \ build-essential \ cmake \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # Pinned tag matches the `ab_server` version AbServerFixture + CI treat as # canonical. Bump deliberately alongside a driver-side change that needs # something newer. ARG LIBPLCTAG_TAG=release RUN git clone --depth 1 --branch "${LIBPLCTAG_TAG}" https://github.com/libplctag/libplctag.git /src WORKDIR /src RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \ && cmake --build build --target ab_server --parallel # -------- stage 2: runtime -------- FROM debian:bookworm-slim LABEL org.opencontainers.image.source="https://github.com/dohertj2/lmxopcua" \ org.opencontainers.image.description="libplctag ab_server for OtOpcUa AB CIP driver integration tests" # libplctag's ab_server is statically linked against libc / libstdc++ on # Debian bookworm; no runtime dependencies beyond what the slim image # already has. COPY --from=build /src/build/bin_dist/ab_server /usr/local/bin/ab_server EXPOSE 44818 # docker-compose.yml overrides the command with per-family flags. CMD ["ab_server", "--plc=ControlLogix", "--path=1,0", "--port=44818", \ "--tag=TestDINT:DINT[1]", "--tag=TestREAL:REAL[1]", "--tag=TestBOOL:BOOL[1]"]