https://github.com/lfreleng-actions/test-docker-project
Test/sample project to build a Docker container image
https://github.com/lfreleng-actions/test-docker-project
docker docker-image makefile
Last synced: about 2 months ago
JSON representation
Test/sample project to build a Docker container image
- Host: GitHub
- URL: https://github.com/lfreleng-actions/test-docker-project
- Owner: lfreleng-actions
- License: apache-2.0
- Created: 2025-07-15T10:26:47.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2026-04-16T13:10:54.000Z (2 months ago)
- Last Synced: 2026-04-16T15:13:31.031Z (2 months ago)
- Topics: docker, docker-image, makefile
- Language: Shell
- Homepage:
- Size: 265 KB
- Stars: 0
- Watchers: 0
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🐳 Test Docker Project
Sample project that builds a Docker image container.
The container runs NGINX and hosts a web page displaying:
`Hello Linux Foundation!`
## Overview
This project demonstrates a simple Docker container build with GitHub Actions
workflow integration. It includes:
- Docker configuration for an NGINX web server
- GitHub Actions workflow for automated builds
- Makefile for local development
- Pre-commit hooks for code quality
## Usage Example
### Local Development
```bash
# Build the Docker image
make build
# Run the container
make run
# Stop and remove the container
make stop
# Remove the container and image
make clean
```
### GitHub Actions Workflow
```yaml
name: Build Docker Image
uses: lfreleng-actions/test-docker-project/.github/workflows/testing.yaml@main
```
## Implementation Details
The project builds a lightweight NGINX container that serves a static HTML page.
Key features:
- Multi-platform build support via Docker Buildx
- Layer caching for faster builds
- Non-root container user for better security
- Custom Nginx configuration to support running as non-root
- Temporary files stored in non-privileged directories
- Health check endpoint at `/health`
- Automated testing in CI/CD pipeline
## Requirements
- Docker
- Make (for local development)
- Git (for version control)
Run `make install-tools` to automatically install dependencies on supported platforms.
## Testing
### Automated Tests
The project includes automated tests to check the Docker image functionality:
```bash
# Run tests (works from any directory)
./tests/scripts/test_docker.sh
# Run tests with a custom port
TEST_HOST_PORT=9090 ./tests/scripts/test_docker.sh
```
The test script validates:
- Building the Docker image
- Running a container from the image
- Checking the web page shows the expected message
- Verifying the health endpoint is working
- Cleaning up all test resources
The script is path-independent and works on both macOS and Linux platforms.
It automatically detects if the default port (8080) is in use and will try
alternative ports if necessary. You can also specify a custom port by setting
the `TEST_HOST_PORT` environment variable.
### Non-Root Nginx Configuration
The Docker container runs Nginx as a non-root user for improved security.
To achieve this, we use:
- Custom main Nginx configuration file that sets the PID file location to a
non-privileged directory
- Temporary directories created and owned by the non-root user
- Proper file permissions set before switching to the non-root user
- All logging and cache files redirected to writable locations
- Comprehensive process monitoring in the test script to ensure proper startup