Merge pull request #491 from prasannabhat/feature/docker
Support docker build for cyclonedds
This commit is contained in:
commit
2287d7cd06
6 changed files with 279 additions and 0 deletions
63
scripts/build.sh
Executable file
63
scripts/build.sh
Executable file
|
@ -0,0 +1,63 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright(c) 2020 Prasanna Bhat
|
||||
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
|
||||
set -e
|
||||
|
||||
# It is assumed that this script is called from the root of the project
|
||||
WORKSPACE=$(pwd)
|
||||
echo "WORKSPACE is $WORKSPACE"
|
||||
|
||||
CYCLONEDDS_INSTALL_PREFIX=$WORKSPACE/build/install/
|
||||
CLEAN_BUILD=false
|
||||
|
||||
usage() {
|
||||
echo ""
|
||||
echo "Helper script to build cyclonedds"
|
||||
echo "Usage : "
|
||||
echo "<workspace>/scripts/build.sh [options]"
|
||||
echo "Supported options are "
|
||||
echo "clean : remove build folder (Default : keep build folder)"
|
||||
echo ""
|
||||
}
|
||||
|
||||
parse_args() {
|
||||
for arg in "$@"
|
||||
do
|
||||
case $arg in
|
||||
-h | --help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
clean)
|
||||
CLEAN_BUILD=true
|
||||
;;
|
||||
*)
|
||||
echo "ERROR : unknown parameter $arg"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
parse_args $@
|
||||
|
||||
if [ $CLEAN_BUILD == true ]
|
||||
then
|
||||
rm -rf build/
|
||||
fi
|
||||
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX=$CYCLONEDDS_INSTALL_PREFIX -DBUILD_IDLC=ON ..
|
||||
cmake --build .
|
||||
cmake --build . --target install
|
19
scripts/docker/Dockerfile
Normal file
19
scripts/docker/Dockerfile
Normal file
|
@ -0,0 +1,19 @@
|
|||
# Copyright(c) 2020 Prasanna Bhat
|
||||
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
|
||||
FROM ubuntu:bionic
|
||||
|
||||
# Dependencies required to build cyclonedds
|
||||
RUN apt update && apt install -y \
|
||||
cmake \
|
||||
default-jdk \
|
||||
maven \
|
||||
g++
|
||||
|
18
scripts/docker/DockerfileCycloneDds
Normal file
18
scripts/docker/DockerfileCycloneDds
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Copyright(c) 2020 Prasanna Bhat
|
||||
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
|
||||
# Build a docker image with pre-built cyclonedds core & examples
|
||||
FROM ubuntu:cyclonedds
|
||||
|
||||
ADD . /cyclonedds
|
||||
|
||||
WORKDIR /cyclonedds
|
||||
|
||||
RUN ./scripts/build.sh clean
|
71
scripts/docker/README.md
Normal file
71
scripts/docker/README.md
Normal file
|
@ -0,0 +1,71 @@
|
|||
# Overview
|
||||
|
||||
This contains helper scripts to build & run cyclonedds core & example applications in docker.
|
||||
Additionally you can also build a docker image with pre-built cyclonedds examples. This could be useful in quickly trying the examples (both IPC & network communication).
|
||||
|
||||
# Bulid docker image
|
||||
There are two docker images you can build.
|
||||
- **ubuntu:cyclonedds** : ubuntu bionic based image that contains dependencies to build cyclonedds.
|
||||
- **cyclonedds:latest** : ubuntu bionic based image with pre-built cyclonedds core & applications (based on the checked out revision).
|
||||
|
||||
## How to build the images
|
||||
|
||||
### Pre-requisites
|
||||
- Linux machine (native / runnin inside VM)
|
||||
- Docker (I have tested with 19.03.8, however past versions also would work, as there is no specific dependency)
|
||||
|
||||
### Steps
|
||||
|
||||
You can use the helper script `./scripts/docker/build_docker_image.sh` to build the docker images.
|
||||
|
||||
- Navigate to root of the project.
|
||||
- Run the script with -h to display usage.
|
||||
```
|
||||
./scripts/docker/build_docker_image.sh [images]
|
||||
```
|
||||
The following images are supported.
|
||||
`ubuntu` : Same as **ubuntu:cyclonedds** , mentioned above.
|
||||
`cyclonedds` : Same as **cyclonedds:latest**, mentioned above.
|
||||
You can run the script with `-h` option to display usage information.
|
||||
**NOTE** : *cyclonedds:latest* depends on image *ubuntu:cyclonedds*. You need to build *ubuntu:cyclonedds* first, if you want to use *cyclonedds:latest*.
|
||||
- Build cyclonedds core & examples (if you are using **ubuntu:cyclonedds**)
|
||||
Use the helper script `./scripts/docker/build_cyclonedds.sh` to build using the currently checked out revision.
|
||||
**NOTE** : You need to run this script from the root of the project.
|
||||
|
||||
# Run cyclonedds examples in docker
|
||||
You can use either of the above docker images to run the examples.
|
||||
If you use **ubuntu:cyclonedds**, you need to build cyclonedds inside container to build examples.
|
||||
Once you have built the cyclonedds , you are ready to run the examples inside docker container.
|
||||
|
||||
Let's do that !
|
||||
|
||||
## Run examples inside the same container (uses IPC)
|
||||
- Launch docker container, from the root of the project
|
||||
|
||||
```
|
||||
docker run --name cyclonedds -it --workdir /cyclonedds/build/bin cyclonedds:latest /bin/bash
|
||||
```
|
||||
This will open terminal connected to docker @ bin of the project, which contains sample applications.
|
||||
It will look something like this
|
||||
```
|
||||
root@22ff409a33e1:/cyclonedds/build/bin#
|
||||
```
|
||||
- From here you can run the example applications.
|
||||
- To run another terminal , connected to same docker container, use the following command.
|
||||
```
|
||||
docker exec -it cyclonedds /bin/bash
|
||||
```
|
||||
Run the partner example here. This will establish communication over IPC channel.
|
||||
|
||||
|
||||
## Run examples in different containers (uses docker networking)
|
||||
- Follow the same steps as in the previous section , instead connecting to existing docker container create a new docker container.
|
||||
e.g.
|
||||
`docker run --name cyclonedds1 -it --workdir /cyclonedds/build/bin cyclonedds:latest /bin/bash`
|
||||
**NOTE** : You need to run this script from the root of the project.
|
||||
At this point you can inspect the traffic using wireshark.
|
||||
Open docker network interface (`docker0` on my system) in wireshark.
|
||||
Good news is that wireshark has RTPS dissector.
|
||||
|
||||
|
||||
|
26
scripts/docker/build_cyclonedds.sh
Executable file
26
scripts/docker/build_cyclonedds.sh
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright(c) 2020 Prasanna Bhat
|
||||
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
|
||||
set -e
|
||||
|
||||
# It is assumed that this script is run from root of the project
|
||||
WORKSPACE=$(pwd)
|
||||
IMAGE_NAME="ubuntu:cyclonedds"
|
||||
CONTAINER_NAME="cyclonedds"
|
||||
|
||||
echo "WORKSPACE is $WORKSPACE"
|
||||
|
||||
docker run -it --rm -v $WORKSPACE/:/cyclonedds --workdir /cyclonedds $IMAGE_NAME /bin/bash -c "./scripts/build.sh clean"
|
||||
# Launch the docker after build
|
||||
docker run --name $CONTAINER_NAME -it -v $WORKSPACE/:/cyclonedds --workdir /cyclonedds $IMAGE_NAME /bin/bash
|
||||
# If you want to connect to the above docker to run cyclonedds examples (multiple apps in separate terminals) , use the below command
|
||||
# docker exec -it cyclonedds /bin/bash
|
82
scripts/docker/build_docker_image.sh
Executable file
82
scripts/docker/build_docker_image.sh
Executable file
|
@ -0,0 +1,82 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright(c) 2020 Prasanna Bhat
|
||||
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
|
||||
set -e
|
||||
|
||||
BUILD_UBUNTU=false
|
||||
BUILD_CYCLONEDDS=false
|
||||
|
||||
usage() {
|
||||
echo ""
|
||||
echo "Helper script to build docker images for cyclonedds"
|
||||
echo "Usage : "
|
||||
echo "<workspace>/scripts/docker/build_docker_image.sh [images]"
|
||||
echo "Supported images are "
|
||||
echo "ubuntu : ubuntu based image to build cyclone dds. Contains dependencies to build cyclonedds."
|
||||
echo "cyclonedds : pre-built cyclonedds core libs & example applications. Can be quickly used to test cyclonedds apps."
|
||||
echo ""
|
||||
}
|
||||
|
||||
parse_args() {
|
||||
for arg in "$@"
|
||||
do
|
||||
case $arg in
|
||||
-h | --help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
ubuntu)
|
||||
BUILD_UBUNTU=true
|
||||
;;
|
||||
cyclonedds)
|
||||
BUILD_CYCLONEDDS=true
|
||||
;;
|
||||
*)
|
||||
echo "ERROR : unknown parameter $arg"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
|
||||
if [ "$#" -eq 0 ]
|
||||
then
|
||||
echo "Supply at least one argument"
|
||||
echo "Run with -h/--help for usage"
|
||||
exit 1
|
||||
fi
|
||||
parse_args $@
|
||||
|
||||
|
||||
DOCKERFILE_DIR="$(dirname "$(readlink -fm "$0")")"
|
||||
WORKSPACE="$(dirname "$(dirname "${DOCKERFILE_DIR}")")"
|
||||
echo "WORKSPACE is $WORKSPACE"
|
||||
cd "$WORKSPACE"
|
||||
|
||||
if [ $BUILD_UBUNTU == true ]
|
||||
then
|
||||
UBUNTU_IMAGE="ubuntu:cyclonedds"
|
||||
docker build --file "${DOCKERFILE_DIR}/Dockerfile" . --tag "${UBUNTU_IMAGE}"
|
||||
fi
|
||||
|
||||
if [ $BUILD_CYCLONEDDS == true ]
|
||||
then
|
||||
CYCLONEDDS_IMAGE="cyclonedds:latest"
|
||||
docker build --file "${DOCKERFILE_DIR}/DockerfileCycloneDds" . --tag "${CYCLONEDDS_IMAGE}"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue