Usage in Docker
To use the agent in a Docker container without having the agent installed in the host, the following steps must be taken. Full examples are after that.
Step 1 – installation
Can be performed either during container launch (installer directory mounted to container) or during image building (installer copied during image building and then run). The following command must be run either during building the image or as the first command when running the container: /path/to/plumbr-agent-installer/PlumbrAgentInstaller --unpack-only --cluster-id=example-cluster
with your desired cluster name.
Step 2 – launch agent process
The agent process must be launched in the background when launching the process, so it would not block the next command (original entry point). This requires changing the container entry point, which can be done either by putting all the commands (optional installation, agent launch, original entry point with environment variables) in a script file and mounting that, or including all of it in the container start command.
If your image is using a musl-based Docker base image, then the agent process must be launched differently, by prepending /lib/ld-musl-x86_64.so.1 –
to the command.
Step 3 – attach
To make the agent libraries get attached to processes in the container, the LD_PRELOAD=/opt/plumbr-agent/libplumbrmonitor.so
environment variable must be set. Since the original entry point must be manually invoked anyway due to entry point change, the easiest way to set this is include it in that command.
Full example – install in container, mount launch script
Mount agent installer:
/host/path/to/plumbr-agent-installer
to /opt/plumbr-agent-installer
as read-only
Mount the following as /launch-with-plumbr.sh
:
/opt/plumbr-agent-installer/PlumbrAgentInstaller --unpack-only --cluster-id=[example-cluster]
/opt/plumbr-agent/plumbrd &
LD_PRELOAD=/opt/plumbr-agent/libplumbrmonitor.so [original-entry-point] "$@"
Override entry point with /launch-with-plumbr.sh
.
Full example – install in container, launch command
Mount agent installer:
/host/path/to/plumbr-agent-installer
to /opt/plumbr-agent-installer
as read-only
Override entry point with /bin/sh
, set command to /opt/plumbr-agent-installer/PlumbrAgentInstaller --unpack-only --cluster-id=[example-cluster] && (/opt/plumbr-agent/plumbrd & LD_PRELOAD=/opt/plumbr-agent/libplumbrmonitor.so [original_entry_point])
.
Full example – install in image
Create launch script launch-with-plumbr.sh
:
/opt/plumbr-agent/plumbrd &
LD_PRELOAD=/opt/plumbr-agent/libplumbrmonitor.so [original-entry-point] "$@"
Dockerfile change:
COPY /path/to/launch-script.sh /launch-with-plumbr.sh
COPY /path/to/plumbr-agent-installer /opt/plumbr-agent-installer
RUN /opt/plumbr-agent-installer/PlumbrAgentInstaller --unpack-only --cluster-id=[example-cluster]
ENTRYPOINT ["/launch-with-plumbr.sh"]