-
Notifications
You must be signed in to change notification settings - Fork 23
Closed
Description
It would be cool if there would be Dockerfile(s) in repo instead/in addition to Docker image binaries from website. With file like that you have good base for building your own application images for FastDDS.
Currently I have made something like that for HelloWorldPublisher/Subscriber. Image size comes is 181MB.
Dockerfile
ARG BUILDER_IMAGE=python:3.12-slim-bookworm
###############################################
# STEP 1 build FastDDS python library and generate code from project IDL files
###############################################
FROM ${BUILDER_IMAGE} as builder
ARG fastdds_version=1.4.1
ENV fastdds_version=${fastdds_version}
RUN apt update && \
apt install -y --no-install-recommends \
git \
cmake \
build-essential \
wget \
libasio-dev \
libtinyxml2-dev \
swig \
libpython3-dev \
openjdk-17-jdk
# Install `colcon` and `vcs`
RUN pip install -U colcon-common-extensions vcstool
RUN mkdir -p /fastdds_python_ws/src && \
cd /fastdds_python_ws && \
wget "https://raw.githubusercontent.com/eProsima/Fast-DDS-python/v${fastdds_version}/fastdds_python.repos" && \
vcs import src < fastdds_python.repos
# Build python library
RUN cd /fastdds_python_ws && \
colcon build
# Create fastddsgen jar file to be able to generate code from IDL files
RUN cd /fastdds_python_ws/src/fastddsgen/ && \
./gradlew assemble
WORKDIR /project
COPY . .
# Generate code from IDL files using fastddsgen
RUN cd /project && \
. /fastdds_python_ws/install/setup.sh && \
/usr/bin/java -jar /fastdds_python_ws/src/fastddsgen/share/fastddsgen/java/fastddsgen.jar \
-python HelloWorld.idl && \
cmake . && \
make
#########################
# STEP 2 build the image
#########################
FROM python:3.12-slim-bookworm
ENV USER=appuser
ENV UID=10001
# Create appuser to run code as an unprivileged user.
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
# --shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
"${USER}"
RUN apt update && \
apt install -y --no-install-recommends \
ca-certificates \
tzdata \
libtinyxml2-dev && \
update-ca-certificates
# Import from builder.
COPY --from=builder /fastdds_python_ws/install /fastdds_python_ws/install
COPY --from=builder /project/entrypoint.sh /project/entrypoint.sh
COPY --from=builder /project /project
WORKDIR /project
# Use an unprivileged user to run the code.
USER ${USER}:${UID}
ENTRYPOINT ["/project/entrypoint.sh"]
CMD ["/project/HelloWorldSubscriber.py"]and entrypoint.sh is
#!/usr/bin/env sh
set -e
DIR=$(dirname "$0")
cd "$DIR"
. /fastdds_python_ws/install/setup.sh
# `-u` disables python output buffering so output will be immediately visible from container
exec python3 -u "$@"
These files assume that you have following files in same folder
HelloWorld.idlHelloWorldPublisher.pyHelloWorldSubscriber.pyDEFAULT_FASTRTPS_PROFILES.xml(in my case I want to try with udp only transport)
and I build Docker image for the application with
sudo docker build . -t fastdds-python-exampleand run subscriber with:
sudo docker run --rm --network host fastdds-python-exampleand publisher with:
sudo docker run --rm --network host fastdds-python-example /project/HelloWorldPublisher.pyor using docker IPC to use shared memory
sudo docker run --rm --ipc=shareable fastdds-python-example
sudo docker run --rm --ipc=container:$(sudo docker container ls -a --format "{{.Names}}" -f ancestor=fastdds-python-example) fastdds-python-example /project/HelloWorldPublisher.pyMetadata
Metadata
Assignees
Labels
No labels