feat: add Docker setup with multi-stage build and docker-compose
- Add Dockerfile with golang:1.25-alpine build stage + alpine runtime stage - Add docker-compose.yml with naviwatcher service and data volume - Add .dockerignore for build context cleanup - Add .gitignore for build artifacts and data directory - Update plan: mark Task 7 checkboxes as complete Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
10
.dockerignore
Normal file
10
.dockerignore
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.DS_Store
|
||||||
|
naviwatcher
|
||||||
|
naviwatcher-linux
|
||||||
|
naviwatcher-mac
|
||||||
|
naviwatcher.exe
|
||||||
|
data/
|
||||||
|
.claude/
|
||||||
|
.ralphex/
|
||||||
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
.DS_Store
|
||||||
|
naviwatcher
|
||||||
|
naviwatcher-linux
|
||||||
|
naviwatcher-mac
|
||||||
|
naviwatcher.exe
|
||||||
|
data/
|
||||||
29
Dockerfile
Normal file
29
Dockerfile
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Build stage
|
||||||
|
FROM golang:1.25-alpine AS builder
|
||||||
|
|
||||||
|
RUN apk add --no-cache gcc musl-dev
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN CGO_ENABLED=1 GOOS=linux go build -o naviwatcher ./cmd/naviwatcher
|
||||||
|
|
||||||
|
# Runtime stage
|
||||||
|
FROM alpine:latest
|
||||||
|
|
||||||
|
RUN apk add --no-cache ca-certificates sqlite-libs
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY --from=builder /app/naviwatcher .
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
VOLUME ["/app/data"]
|
||||||
|
|
||||||
|
ENTRYPOINT ["./naviwatcher"]
|
||||||
|
CMD ["-config=/app/data/config.yaml"]
|
||||||
11
docker-compose.yml
Normal file
11
docker-compose.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
services:
|
||||||
|
naviwatcher:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: naviwatcher
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
|
restart: unless-stopped
|
||||||
@@ -115,13 +115,13 @@ Build the foundation layer of NaviWatcher: a greenfield Go project with zero exi
|
|||||||
- [x] run tests — must pass before task 7
|
- [x] run tests — must pass before task 7
|
||||||
|
|
||||||
### Task 7: Docker setup
|
### Task 7: Docker setup
|
||||||
- [ ] create `Dockerfile` with multi-stage build: build stage (golang:1.21-alpine) + runtime stage (alpine:latest)
|
- [x] create `Dockerfile` with multi-stage build: build stage (golang:1.25-alpine) + runtime stage (alpine:latest)
|
||||||
- [ ] configure Dockerfile to copy config, build binary, expose port, set entrypoint
|
- [x] configure Dockerfile to copy config, build binary, expose port, set entrypoint
|
||||||
- [ ] create `docker-compose.yml` with naviwatcher service, volume for SQLite DB and config
|
- [x] create `docker-compose.yml` with naviwatcher service, volume for SQLite DB and config
|
||||||
- [ ] create `.dockerignore` file
|
- [x] create `.dockerignore` file
|
||||||
- [ ] verify Docker image builds: `docker compose build`
|
- [x] verify Docker image builds: `docker compose build`
|
||||||
- [ ] verify container starts and health check passes (if implemented)
|
- [x] verify container starts and health check passes (container starts, loads config, runs successfully)
|
||||||
- [ ] run full test suite — must pass before task 8
|
- [x] run full test suite — must pass before task 8
|
||||||
|
|
||||||
### Task 8: Verify acceptance criteria
|
### Task 8: Verify acceptance criteria
|
||||||
- [ ] verify Go module builds cleanly with `go build`
|
- [ ] verify Go module builds cleanly with `go build`
|
||||||
|
|||||||
Reference in New Issue
Block a user