From 2ac947f4ec8a34a6c302a76260f646b36a2078b1 Mon Sep 17 00:00:00 2001 From: Manuel Bentele Date: Mon, 2 Nov 2020 09:44:34 +0100 Subject: [BUILD] add CMake support to build docker images based on Archlinux --- CMakeLists.txt | 17 +++++++++++++---- cmake/DockerImage.cmake | 10 +++++----- pkg/docker/Dockerfile | 28 ---------------------------- pkg/docker/archlinux_dockerfile | 28 ++++++++++++++++++++++++++++ pkg/docker/ubuntu-20-04_dockerfile | 28 ++++++++++++++++++++++++++++ 5 files changed, 74 insertions(+), 37 deletions(-) delete mode 100644 pkg/docker/Dockerfile create mode 100644 pkg/docker/archlinux_dockerfile create mode 100644 pkg/docker/ubuntu-20-04_dockerfile diff --git a/CMakeLists.txt b/CMakeLists.txt index 42f259c..219ec00 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -197,11 +197,20 @@ if(CMAKE_BUILD_TYPE MATCHES Release) if(NOT DNBD3_KERNEL_MODULE AND DNBD3_PACKAGE_DOCKER) find_package(Docker REQUIRED) include(DockerImage) - set(DOCKER_FILE ${CMAKE_SOURCE_DIR}/pkg/docker/Dockerfile) + set(DOCKER_TAG ${CPACK_PACKAGE_NAME}:${REPOSITORY_VERSION_FULL}) - set(PACKAGE_FILE ${CPACK_PACKAGE_NAME}_${REPOSITORY_VERSION_FULL}_${CMAKE_SYSTEM_PROCESSOR}.deb) - set(DOCKER_IMAGE ${CPACK_PACKAGE_NAME}_${REPOSITORY_VERSION_FULL}_${CMAKE_SYSTEM_PROCESSOR}_ubuntu-20-04_docker.tar) - add_docker_image(docker-ubuntu-20-04 ${DOCKER_IMAGE} ${DOCKER_FILE} ${DOCKER_TAG} ${PACKAGE_FILE} ${CMAKE_BINARY_DIR}) + + # define Ubuntu docker image + set(DOCKER_FILE_UBUNTU ${CMAKE_SOURCE_DIR}/pkg/docker/ubuntu-20-04_dockerfile) + set(PACKAGE_FILE_UBUNTU ${CPACK_PACKAGE_NAME}_${REPOSITORY_VERSION_FULL}_${CMAKE_SYSTEM_PROCESSOR}.deb) + set(DOCKER_IMAGE_UBUNTU ${CPACK_PACKAGE_NAME}_${REPOSITORY_VERSION_FULL}_${CMAKE_SYSTEM_PROCESSOR}_ubuntu-20-04_docker.tar) + add_docker_image(docker-ubuntu-20-04 ${DOCKER_IMAGE_UBUNTU} ${DOCKER_FILE_UBUNTU} ${DOCKER_TAG} ${PACKAGE_FILE_UBUNTU} ${CMAKE_BINARY_DIR}) + + # define Archlinux docker image + set(DOCKER_FILE_ARCHLINUX ${CMAKE_SOURCE_DIR}/pkg/docker/archlinux_dockerfile) + set(PACKAGE_FILE_ARCHLINUX ${CPACK_PACKAGE_NAME}_${REPOSITORY_VERSION_FULL}_${CMAKE_SYSTEM_PROCESSOR}.tar.gz) + set(DOCKER_IMAGE_ARCHLINUX ${CPACK_PACKAGE_NAME}_${REPOSITORY_VERSION_FULL}_${CMAKE_SYSTEM_PROCESSOR}_archlinux_docker.tar) + add_docker_image(docker-archlinux ${DOCKER_IMAGE_ARCHLINUX} ${DOCKER_FILE_ARCHLINUX} ${DOCKER_TAG} ${PACKAGE_FILE_ARCHLINUX} ${CMAKE_BINARY_DIR}) endif(NOT DNBD3_KERNEL_MODULE AND DNBD3_PACKAGE_DOCKER) endif(CMAKE_BUILD_TYPE MATCHES Release) diff --git a/cmake/DockerImage.cmake b/cmake/DockerImage.cmake index 54751e4..83f4b9d 100644 --- a/cmake/DockerImage.cmake +++ b/cmake/DockerImage.cmake @@ -3,16 +3,16 @@ # Copyright (C) 2020 Manuel Bentele # +# create a pseudo target to do packaging before docker image is built +add_custom_target(package_docker + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package + VERBATIM) + # macro to build a docker image based on a provided Dockerfile and an installation package macro(add_docker_image TARGET_NAME DOCKER_IMAGE DOCKER_FILE DOCKER_TAG PACKAGE_FILE BUILD_DIR) get_filename_component(PACKAGE_FILE_PATH ${PACKAGE_FILE} PATH) get_filename_component(PACKAGE_FILE_NAME ${PACKAGE_FILE} NAME) - # create a pseudo target to do packaging before docker image is built - add_custom_target(package_docker - COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target package - VERBATIM) - # commands and target to build docker image add_custom_command(OUTPUT ${DOCKER_IMAGE} COMMAND docker image build -t ${DOCKER_TAG} --file ${DOCKER_FILE} --build-arg DNBD3_PACKAGE_FILE_NAME=${PACKAGE_FILE_NAME} ${BUILD_DIR} diff --git a/pkg/docker/Dockerfile b/pkg/docker/Dockerfile deleted file mode 100644 index ad2adcb..0000000 --- a/pkg/docker/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -# use Ubuntu 20.04 as base image -FROM ubuntu:focal - -# declare arguments that should be set by 'docker build --build-arg ...' -ARG DNBD3_PACKAGE_FILE_NAME - -# copy built package file from host to docker image -COPY ${DNBD3_PACKAGE_FILE_NAME} /tmp - -# install required dependencies -RUN apt-get update -RUN apt-get install -y libfuse2 libjansson4 - -# install installation package -RUN dpkg -i /tmp/${DNBD3_PACKAGE_FILE_NAME} - -# use default config for dnbd3-server -RUN ln -s /etc/dnbd3-server/sample/server.conf /etc/dnbd3-server -RUN ln -s /etc/dnbd3-server/sample/alt-servers /etc/dnbd3-server - -# make default storage point for dnbd3-server -RUN mkdir -p /mnt/storage - -# expose the port of the dnbd3-server to the host -EXPOSE 5003 - -# run dnbd3-server -CMD [ "dnbd3-server", "-n" ] diff --git a/pkg/docker/archlinux_dockerfile b/pkg/docker/archlinux_dockerfile new file mode 100644 index 0000000..ea6145b --- /dev/null +++ b/pkg/docker/archlinux_dockerfile @@ -0,0 +1,28 @@ +# use Archlinux as base image +FROM archlinux:latest + +# declare arguments that should be set by 'docker build --build-arg ...' +ARG DNBD3_PACKAGE_FILE_NAME + +# copy built package file from host to docker image +COPY ${DNBD3_PACKAGE_FILE_NAME} /tmp + +# install required dependencies +RUN pacman --noconfirm -Sy +RUN pacman --noconfirm -S fuse2 jansson + +# install installation package +RUN tar -xf /tmp/${DNBD3_PACKAGE_FILE_NAME} --strip-components=1 -C / + +# use default config for dnbd3-server +RUN ln -s /etc/dnbd3-server/sample/server.conf /etc/dnbd3-server +RUN ln -s /etc/dnbd3-server/sample/alt-servers /etc/dnbd3-server + +# make default storage point for dnbd3-server +RUN mkdir -p /mnt/storage + +# expose the port of the dnbd3-server to the host +EXPOSE 5003 + +# run dnbd3-server +CMD [ "dnbd3-server", "-n" ] diff --git a/pkg/docker/ubuntu-20-04_dockerfile b/pkg/docker/ubuntu-20-04_dockerfile new file mode 100644 index 0000000..ad2adcb --- /dev/null +++ b/pkg/docker/ubuntu-20-04_dockerfile @@ -0,0 +1,28 @@ +# use Ubuntu 20.04 as base image +FROM ubuntu:focal + +# declare arguments that should be set by 'docker build --build-arg ...' +ARG DNBD3_PACKAGE_FILE_NAME + +# copy built package file from host to docker image +COPY ${DNBD3_PACKAGE_FILE_NAME} /tmp + +# install required dependencies +RUN apt-get update +RUN apt-get install -y libfuse2 libjansson4 + +# install installation package +RUN dpkg -i /tmp/${DNBD3_PACKAGE_FILE_NAME} + +# use default config for dnbd3-server +RUN ln -s /etc/dnbd3-server/sample/server.conf /etc/dnbd3-server +RUN ln -s /etc/dnbd3-server/sample/alt-servers /etc/dnbd3-server + +# make default storage point for dnbd3-server +RUN mkdir -p /mnt/storage + +# expose the port of the dnbd3-server to the host +EXPOSE 5003 + +# run dnbd3-server +CMD [ "dnbd3-server", "-n" ] -- cgit v1.2.3-55-g7522