From 887f02fc5d2749a397aa2e6a38ffebd024925651 Mon Sep 17 00:00:00 2001 From: Rui Hu Date: Thu, 14 Aug 2025 20:56:47 +0800 Subject: [PATCH] feat: Add dev container ISSUE CLOSED: clevermicro/amq-adapter-python#69 --- .devcontainer/Dockerfile | 7 +++++ .devcontainer/devcontainer.json | 33 ++++++++++++++++++++ .devcontainer/docker-compose.yml | 53 ++++++++++++++++++++++++++++++++ .devcontainer/setup.sh | 4 +++ 4 files changed, 97 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.yml create mode 100644 .devcontainer/setup.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..b6aeb3f --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,7 @@ +# Note: You can use any Debian/Ubuntu based image you want. +FROM mcr.microsoft.com/devcontainers/base:bullseye + +# [Optional] Uncomment this section to install additional OS packages. +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends \ + bash curl jq diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..cc40b10 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/docker-outside-of-docker-compose +{ + "name": "Docker from Docker Compose", + "dockerComposeFile": "docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + // Use this environment variable if you need to bind mount your local source code into a new container. + "remoteEnv": { + "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}", + "WORKSPACE_FOLDER": "/workspaces/${localWorkspaceFolderBasename}" + }, + "features": { + "ghcr.io/devcontainers/features/docker-outside-of-docker:1": { + "version": "latest", + "enableNonRootDocker": "true", + "moby": "false" + }, + "ghcr.io/devcontainers/features/python:1": { + "version": "3.11" + } + }, + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [ + "rabbitmq:15672", + "jaeger:4317", + "jaeger:4318", + "jaeger:16686", + ], + "postCreateCommand": "/bin/bash /workspaces/${localWorkspaceFolderBasename}/.devcontainer/setup.sh", + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..4b7b0e1 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,53 @@ +version: '3' + +services: + app: + build: + context: . + dockerfile: Dockerfile + + volumes: + # Forwards the local Docker socket to the container. + - /var/run/docker.sock:/var/run/docker-host.sock + # Update this to wherever you want VS Code to mount the folder of your project + - ../..:/workspaces:cached + + # Overrides default command so things don't shut down after the process ends. + entrypoint: /usr/local/share/docker-init.sh + command: sleep infinity + + # Uncomment the next four lines if you will use a ptrace-based debuggers like C++, Go, and Rust. + # cap_add: + # - SYS_PTRACE + # security_opt: + # - seccomp:unconfined + + # Use "forwardPorts" in **devcontainer.json** to forward an app port locally. + # (Adding the "ports" property to this file will not forward from a Codespace.) + depends_on: + - rabbitmq + - jaeger + + rabbitmq: + image: rabbitmq:4-management + hostname: "my-rabbit" + environment: + RABBITMQ_DEFAULT_USER: springuser + RABBITMQ_DEFAULT_PASS: TheCleverWho + volumes: + - "rabbitmq-data:/var/lib/rabbitmq" + + jaeger: + image: "jaegertracing/jaeger:2.2.0" + command: + - "--config=file:/config/jaeger.yml" + volumes: + - "jaeger-data:/tmp" # This is the only folder can be used without permission issue + - "./jaeger-config.yaml:/config/jaeger.yml" + - "./jaeger-config-ui.json:/config/jaeger-config-ui.json" + environment: + - COLLECTOR_OTLP_ENABLED=true + +volumes: + rabbitmq-data: + jaeger-data: diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100644 index 0000000..9f7f403 --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +python3 -m pip install --upgrade pip +pip install -e .[dev] -- 2.52.0