Skip to content

Commit

Permalink
fix: Experimenting with docker in docker for local testing
Browse files Browse the repository at this point in the history
  • Loading branch information
milesburton committed Jan 24, 2025
1 parent e38abd3 commit 4447101
Showing 1 changed file with 59 additions and 26 deletions.
85 changes: 59 additions & 26 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,56 +8,89 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
git \
curl \
fish \
docker.io \
sudo \
build-essential \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Add user to docker group
RUN usermod -aG docker vscode

# Create directories and set permissions
RUN mkdir -p /home/vscode/.local/share/CMakeTools \
&& chown -R vscode:vscode /home/vscode/.local/share/CMakeTools \
&& mkdir -p /home/vscode/.ssh \
&& chown -R vscode:vscode /home/vscode/.local/share/CMakeTools

RUN mkdir -p /home/vscode/.ssh \
&& chown vscode:vscode /home/vscode/.ssh \
&& chmod 700 /home/vscode/.ssh

# Install Arduino CLI
RUN curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh \
&& arduino-cli config init
# Install arduino-cli
RUN curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh

# Set up arduino-cli config
RUN arduino-cli config init

# Add arduino-cli to PATH
ENV PATH="/usr/local/bin:${PATH}"

# Create workspace directory
WORKDIR /workspace

# Copy Arduino config and update script
# Copy arduino-cli configuration (customise to your actual path)
COPY arduino-cli.yaml /root/.arduino15/arduino-cli.yaml
COPY update-libraries.sh /usr/local/bin/

# Install build essentials
RUN apt-get update && apt-get install -y build-essential && rm -rf /var/lib/apt/lists/*

RUN arduino-cli core update-index --additional-urls https://arduino.esp8266.com/stable/package_esp8266com_index.json,https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

# (Optional) Install Arduino cores for ESP8266 and ESP32 if needed
RUN arduino-cli core install --additional-urls https://arduino.esp8266.com/stable/package_esp8266com_index.json,https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json esp8266:esp8266 esp32:esp32

# Install only required dependencies for DallasTemperature library and others
RUN arduino-cli lib install \
"OneWire" \
"ArduinoUnit" # For testing

# Verify library installation
RUN arduino-cli lib list

# Copy update script
COPY .devcontainer/update-libraries.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/update-libraries.sh

# Install Arduino cores and libraries
RUN arduino-cli core install esp8266:esp8266 esp32:esp32 \
&& arduino-cli lib install "OneWire" "ArduinoUnit" \
&& arduino-cli lib list
# Add aliases for build operations (for Bash)
RUN echo 'alias arduino-build="./build.sh build"' >> /home/vscode/.bashrc && \
echo 'alias arduino-test="./build.sh test"' >> /home/vscode/.bashrc && \
echo 'alias arduino-build-test="./build.sh all"' >> /home/vscode/.bashrc

# Add a welcome message to .bashrc
RUN echo '\n# Welcome to the dev container! Here are some useful aliases:' >> /home/vscode/.bashrc && \
echo 'echo " - arduino-build: Build the project"' >> /home/vscode/.bashrc && \
echo 'echo " - arduino-test: Run tests for the project"' >> /home/vscode/.bashrc && \
echo 'echo " - arduino-build-test: Build and test the project"' >> /home/vscode/.bashrc

# Configure shells
RUN echo 'alias arduino-build="./build.sh build"\nalias arduino-test="./build.sh test"\nalias arduino-build-test="./build.sh all"' >> /home/vscode/.bashrc \
&& echo '\n# Welcome to the dev container! Here are some useful aliases:\necho " - arduino-build: Build the project"\necho " - arduino-test: Run tests for the project"\necho " - arduino-build-test: Build and test the project"' >> /home/vscode/.bashrc \
&& mkdir -p /home/vscode/.config/fish \
&& echo 'set -gx PATH /usr/local/bin $PATH\n# Welcome to the Fish shell inside the dev container!' >> /home/vscode/.config/fish/config.fish
# Fix fish permissions
RUN mkdir -p /home/vscode/.config && \
chown -R vscode:vscode /home/vscode/.config

# Generate SSH keys
# (Optional) Add fish-specific configuration if desired
# For example, you might add an alias file or welcome message for fish:
RUN mkdir -p /home/vscode/.config/fish && \
echo 'set -gx PATH /usr/local/bin $PATH' >> /home/vscode/.config/fish/config.fish && \
echo '# Welcome to the Fish shell inside the dev container!' >> /home/vscode/.config/fish/config.fish

# Generate SSH keys and set proper ownership and permissions
RUN if [ ! -f /home/vscode/.ssh/id_rsa ]; then \
ssh-keygen -t rsa -b 4096 -N "" -C "devcontainer@local" -f /home/vscode/.ssh/id_rsa && \
chmod 600 /home/vscode/.ssh/id_rsa && \
chmod 644 /home/vscode/.ssh/id_rsa.pub && \
chown vscode:vscode /home/vscode/.ssh/id_rsa /home/vscode/.ssh/id_rsa.pub ; \
fi

# Docker-in-Docker setup
# Install Docker
RUN apt-get update && apt-get install -y docker.io && rm -rf /var/lib/apt/lists/*

# Setup Docker permissions
RUN usermod -aG docker vscode

# Create and configure entrypoint script
RUN echo '#!/bin/sh\nchmod 666 /var/run/docker.sock\nexec "$@"' > /usr/local/bin/docker-entrypoint.sh \
&& chmod +x /usr/local/bin/docker-entrypoint.sh

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["sleep", "infinity"]
CMD ["sleep", "infinity"]

0 comments on commit 4447101

Please sign in to comment.