Skip to content

Commit a78e837

Browse files
committed
Merged PR 6: add dockerfile
2 parents 95ea64f + 7d668d8 commit a78e837

6 files changed

Lines changed: 119 additions & 0 deletions

File tree

docker/Dockerfile

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# =================================
2+
# Build and test environment for CI
3+
# =================================
4+
5+
FROM ubuntu:20.04 as cpp-docker-ci
6+
7+
ARG DEBIAN_FRONTEND=noninteractive
8+
9+
RUN apt-get update && apt-get -y dist-upgrade && apt-get -y install --fix-missing \
10+
binutils \
11+
build-essential \
12+
bzip2 \
13+
clang-format \
14+
cmake \
15+
cppcheck \
16+
lsb-release \
17+
ninja-build \
18+
python \
19+
python3-pip \
20+
ssh \
21+
software-properties-common \
22+
sudo \
23+
tar \
24+
wget \
25+
&& apt-get autoremove -y && apt-get clean
26+
RUN bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" \
27+
RUN pip install --user conan
28+
29+
30+
31+
# =================================
32+
# DEV environment for local machine
33+
# =================================
34+
35+
FROM cpp-docker-ci as cpp-docker-dev
36+
37+
ARG DEV_USER=dev
38+
39+
RUN apt-get -y install --fix-missing \
40+
ccache \
41+
curl \
42+
doxygen \
43+
graphviz \
44+
shellcheck \
45+
valgrind \
46+
vim \
47+
&& apt-get autoremove -y && apt-get clean
48+
49+
# Dev user for inside the container
50+
RUN groupadd -g 1000 ${DEV_USER} && \
51+
useradd -m -u 1000 -g 1000 -d /home/${DEV_USER} -s /bin/bash ${DEV_USER} && \
52+
usermod -a -G adm,cdrom,sudo,dip,plugdev ${DEV_USER} && \
53+
echo "${DEV_USER}:${DEV_USER}" | chpasswd && \
54+
echo "${DEV_USER} ALL=(ALL:ALL) ALL" >> /etc/sudoers
55+
56+
# fix "Missing privilege separation directory" error in SSHD
57+
# see: https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/45234
58+
RUN mkdir /var/run/sshd && chmod 0755 /var/run/sshd
59+
60+
COPY ccache.conf /etc/.
61+
62+
USER ${DEV_USER}
63+
WORKDIR /home/${DEV_USER}
64+
65+
RUN sed -i 's/\\h/docker/;s/01;32m/01;33m/' /home/${DEV_USER}/.bashrc \
66+
&& mkdir /home/${DEV_USER}/git

docker/build-ci-image.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash -e
2+
3+
DOCKER_BUILDKIT=1 docker -l debug build \
4+
--target cpp-docker-ci \
5+
-t cppcienv:latest .

docker/build-dev-image.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/bash -e
2+
3+
DOCKER_BUILDKIT=1 docker -l debug build \
4+
--target cpp-docker-dev \
5+
--build-arg DEV_USER=dev \
6+
-t cppdevenv:latest .

docker/ccache.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
max_size = 20.0G

docker/cppdev-docker

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#! /bin/bash
2+
CONTAINER=cpp_docker_env
3+
WORKDIR=$(pwd)
4+
5+
if ! /usr/bin/docker ps | grep "${CONTAINER}" > /dev/null; then
6+
docker-compose up -d
7+
fi
8+
9+
if [ $# -ne 0 ]; then
10+
docker exec -i -t -u dev:dev "${CONTAINER}" bash -c "if [ -d \"${WORKDIR}\" ]; then cd ${WORKDIR}; fi; $*"
11+
else
12+
# (The shell is interactive if bash is called without arguments :)
13+
docker exec -i -t -u dev:dev "${CONTAINER}" bash -c "if [ -d \"${WORKDIR}\" ]; then cd ${WORKDIR}; fi; bash"
14+
fi

docker/docker-compose.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
version: '3'
2+
3+
services:
4+
ssh:
5+
security_opt: # options needed for gdb debugging
6+
- seccomp:unconfined
7+
- apparmor:unconfined
8+
cap_add:
9+
- SYS_PTRACE
10+
container_name: cpp_docker_env
11+
image: cppdevenv:latest
12+
environment:
13+
- TERM=xterm-256color # For a colored Terminal
14+
- SSH_AUTH_SOCK=/ssh-agent
15+
volumes:
16+
- ${SSH_AUTH_SOCK}:/ssh-agent # Forward local machine SSH to docker
17+
- ${HOME}/.ssh/known_hosts:/home/dev/.ssh/known_hosts # If the host trusts, we shall trust as well.
18+
- ${HOME}/.ssh/config:/home/dev/.ssh/config
19+
- ${HOME}/.gitconfig:/home/dev/.gitconfig
20+
- ${HOME}/git:/home/dev/git
21+
command: /usr/sbin/sshd -D
22+
user: root
23+
network_mode: "bridge"
24+
ports:
25+
- "2222:22"
26+
privileged: true
27+
hostname: cpp_docker_env

0 commit comments

Comments
 (0)