📦 Ready-to-use Docker container image with cloud tools (AWS CLI, Google Cloud CLI, Hetzner Cloud CLI, Terraform, Packer, Ansible)
Cloud Tools Container
Ready-to-use Docker container image for AWS CodeBuild/CodePipeline, Bitbucket Pipelines, CircleCI, GitHub Actions, GitLab runner jobs and Google Cloud Build.
Image:
cyclenerd/cloud-tools-container:latest
Multiarch support: * amd64 : Intel or AMD 64-Bit CPU (x86-64) * arm64 : Arm-based 64-Bit CPU (i.e. Apple silicon, AWS Graviton, Ampere Altra)
[!NOTE]
This project leverages GitHub Actions (https://github.com/Cyclenerd/cloud-tools-container/actions) for streamlined automated builds and deployments.
The Container image is rebuilt on a weekly basis, every Monday.
Software
This Docker container image is based on the Ubuntu 24.04 release (ubuntu:noble).
The following software is included and tested:
- Ansible infrastructure as configuration (IaC) software tool (
ansibleandansible-playbook)
ansible-lint)
- AWS command line interface (CLI) tools (
aws) - fuego command line firestore client (
fuego) - Hetzner Cloud CLI (
hcloud) - Google Cloud command line interface (CLI) tools (
gcloud,gsutilandbq) - Open Policy Agent general-purpose policy engine, context-aware policy enforcement (
opa) - Packer (
packer) - ShellCheck analysis and linting tool for Shell/Bash scripts (
shellcheck) - skopeo command line utility that performs various operations on container images and repositories (
skopeo) - Terraform infrastructure as configuration (IaC) software tool (
terraform)
terraform-docs)
* Terragrunt thin wrapper that provides extra tools (terragrunt)
* tflint linting tool for Terraform code (tflint)
* tfsec analysis security scanner for Terraform code (tfsec)
- Kubernetes
helm)
* Kubernetes cluster manager command line tool for communicating with a Kubernetes cluster (kubectl)
- Vault password manager and authentication tool (
vault) - yq command-line YAML, JSON and XML processor (
yq) - Base packages
bash)
* apt-utils
* Advanced Packaging Tool package manager (apt, apt-get)
* build-essential
* GNU C compiler gcc
* make utility for directing compilation (make)
* Common CA certificates
* curl tool for transferring data with URL syntax (curl)
* DiG) DNS lookup utility (dig)
* FIGlet prints its input using large characters (figlet)
* git distributed revision control system (git)
* jq JSON processor (jq)
* Mutt command line email client (mutt)
* Node.js JavaScript runtime environment (node)
* npm package manager for the JavaScript (npm)
* OpenSSL cryptography toolkit (openssl)
* OpenSSH remote login client (ssh)
* Perl 5 programming language (perl)
* cpanm modules installer for Perl (cpanm)
* Python 3 programming language (python3)
* pip package installer for Python (pip3)
* flake8 code checker using pycodestyle and pyflakes (flake8)
* Go programming language (go)
* Golangci-lint fast linter for Go (golangci-lint)
* GNU tar archiving utility (tar)
* De-archiver for .zip files (unzip)
* Archiver for .zip files (zip)
Run
Runs a command in the container, pulling the image if needed and starting the container.
Docker 🐳
Docker run command:
docker run cyclenerd/cloud-tools-container:latest aws --version
Podman 🦭
Podman run command:
podman run docker.io/cyclenerd/cloud-tools-container:latest aws --version
Examples
Example configurations for various CI/CD tools.
AWS CodeBuild
AWS CodeBuild configuration:
{
"environment": {
"type": "LINUX_CONTAINER",
"image": "cyclenerd/cloud-tools-container:latest",
"computeType": "BUILDGENERAL1SMALL"
},
}
Google Cloud Build
Google Cloud Build (cloudbuild.yaml) configuration file:
steps:
- name: 'cyclenerd/cloud-tools-container:latest'
entrypoint: 'gcloud'
args: ['--version']
GitLab CI/CD
Google Cloud Service Account Key
GitLab CI/CD (.gitlab-ci.yml) configuration with Google Cloud Service Account Key:
variables:
GOOGLEAPPLICATIONCREDENTIALS: "/tmp/serviceaccountkey.json"
default: image: cyclenerd/cloud-tools-container:latest before_script: # Login - echo "$YOURGOOGLECLOUDSERVICEACCOUNTKEY" > "$GOOGLEAPPLICATION_CREDENTIALS" - gcloud auth activate-service-account --key-file="$GOOGLEAPPLICATIONCREDENTIALS"
stages: - auth
gcloud-auth-list: stage: auth script: - gcloud auth list
Google Cloud Workload Identity Federation
GitLab CI/CD (.gitlab-ci.yml) configuration with Google Cloud Workload Identity Federation login:
variables:
WIF_PROVIDER: projects/1057256049272/locations/global/workloadIdentityPools/gitlab-com/providers/gitlab-com-oidc
SERVICE_ACCOUNT: gitlab-ci@nkn-it-wif-demo.iam.gserviceaccount.com
GOOGLECREDENTIALS: gcptemp_cred.json
default: image: cyclenerd/cloud-tools-container:latest before_script: # Login - echo "${CIJOBJWTV2}" > gitlabjwt_token.txt - gcloud iam workload-identity-pools create-cred-config "${WIF_PROVIDER}" --service-account="${SERVICE_ACCOUNT}" --output-file=${GOOGLE_CREDENTIALS} --credential-source-file=gitlabjwttoken.txt - gcloud config set auth/credentialfileoverride "${GOOGLE_CREDENTIALS}" stages: - auth
gcloud-auth-list: stage: auth script: - gcloud auth list
Bitbucket Pipelines
Google Cloud Workload Identity Federation
Bitbucket pipeline configuration (bitbucket-pipelines.yml) with Google Cloud Workload Identity Federation login:
image: cyclenerd/cloud-tools-container:latest
pipelines: default: - step: name: "Workload Identity Federation" # Enable OIDC oidc: true max-time: 5 script: # Set variables - export WIF_PROVIDER='projects/753695557698/locations/global/workloadIdentityPools/bitbucket-org/providers/bitbucket-org-oidc' - export SERVICE_ACCOUNT='bitbucket-pipeline@nkn-it-wif-demo-0.iam.gserviceaccount.com' - export GOOGLECREDENTIALS='gcptemp_cred.json' # Configure Workload Identity Federation via a credentials file. - echo ${BITBUCKETSTEPOIDCTOKEN} > .cijobjwtfile - gcloud iam workload-identity-pools create-cred-config "${WIF_PROVIDER}" --service-account="${SERVICE_ACCOUNT}" --output-file="${GOOGLE_CREDENTIALS}" --credential-source-file=.cijobjwt_file - gcloud config set auth/credentialfileoverride "${GOOGLE_CREDENTIALS}" # Now you can run gcloud commands authenticated as the impersonated service account.
GitHub Actions
GitHub Actions configuration:
jobs:
cloud-tools-container:
runs-on: 'ubuntu-latest'
# Use container to run the steps in a job
container:
image: 'docker://cyclenerd/cloud-tools-container:latest'
steps:
- name: "Terraform"
run: terraform --version
CircleCI
CircleCI configuration:
jobs:
cloud-tools-container:
docker:
- image: cyclenerd/cloud-tools-container:latest
steps:
- run:
name: Google Cloud CLI
command: gcloud --version
Build
Multi-Platform Image (AMD64 and ARM64)
To build a container image that can run on both AMD64 and ARM64 architectures, use the following command:
podman manifest create "cloud-tools-container"
podman build . \
--manifest "cloud-tools-container" \
--platform "linux/amd64,linux/arm64" \
--tag "cloud-tools-container:multi"
Platform-Specific Images
Create a container image only for Intel or AMD 64-Bit CPU (x86-64):
podman build . \
--platform "linux/amd64" \
--tag "cloud-tools-container:amd64"
Create a container image only for Arm-based 64-Bit CPU:
podman build . \
--platform "linux/arm64" \
--tag "cloud-tools-container:arm64"
(Alternative) Combining Images into a Multi-Platform Image
To combine platform-specific images into one multi-platform image:
podman manifest create "cloud-tools-container:multi" \
--amend "cloud-tools-container:amd64" \
--amend "cloud-tools-container:arm64"
podman manifest inspect "cloud-tools-container:multi" | jq
Contributing
Have a patch that will benefit this project? Awesome! Follow these steps to have it accepted.
- Please read how to contribute.
- Fork this Git repository and make your changes.
- Create a Pull Request.
- Incorporate review feedback to your changes.
- Accepted!
License
All files in this repository are under the Apache License, Version 2.0 unless noted otherwise.