Ansible Core Docker with Vault support & 10+ collections for automation
2.1K
A production-ready Docker image for Ansible Core with HashiCorp Vault support and 10+ pre-installed collections for simple automation, management configuration, and more.
hvac library for seamless secrets management| Image Tag | Python Version | Ansible Core |
|---|---|---|
latest, 2, 2.19, 2.19.4 | 3.12 | 2.19.4 |
2.18, 2.18.11 | 3.11 | 2.18.11 |
Run an Ansible ad-hoc command:
docker run --rm optimode/ansible-core:latest ansible --version
Run a playbook from your local directory:
docker run --rm \
-v $(pwd):/workspace \
optimode/ansible-core:latest \
ansible-playbook playbook.yml
Start an interactive session:
docker run --rm -it \
-v $(pwd):/workspace \
optimode/ansible-core:latest
This image comes with 15+ Ansible collections covering a wide range of platforms and technologies:
community.dockercontainers.podmancommunity.mysqlcommunity.postgresqlcommunity.mongodbcommunity.hashi_vaultcommunity.cryptocommunity.proxmoxansible.netcommon, ansible.posix, ansible.utils, community.crypto,
community.dns,community.docker, community.general, community.hashi_vault,
community.mongodb, community.mysql,community.postgresql, community.proxmox,
community.proxysql,community.routeros, containers.podman,
Use the provided build framework: (optibuild)[https://github.com/optimode/optibuild] Install optibuild, create or modify build.conf file.
Only build:
/path/to/optibuild --verbose -c /path/to/ansible-core/build.conf build
Build a specific version, modify build.conf or create an additional build-specific-version.conf file.
/path/to/optibuild --verbose -c /path/to/ansible-core/build-specific-version.conf build
| Argument | Description | Required | Default |
|---|---|---|---|
PYTHON_VERSION | Python base image version | No | 3.11 |
ANSIBLE_VERSION | Ansible Core version to install | Yes | - |
URL | Project URL (OCI label) | No | - |
SOURCE | Source repository (OCI label) | No | - |
BUILD_DATE | Build timestamp (OCI label) | No | - |
AUTHORS | Image authors (OCI label) | No | - |
VENDOR | Vendor name (OCI label) | No | - |
REVISION | Git commit hash (OCI label) | No | - |
Mount your SSH keys for remote host access:
docker run --rm \
-v $(pwd):/workspace \
-v ~/.ssh:/home/ansible/.ssh:ro \
optimode/ansible-core:latest \
ansible-playbook -i inventory.ini playbook.yml
Pass vault password via file:
docker run --rm \
-v $(pwd):/workspace \
-v $(pwd)/.vault-pass:/home/ansible/.vault-pass:ro \
optimode/ansible-core:latest \
ansible-playbook --vault-password-file=/home/ansible/.vault-pass playbook.yml
Or via environment variable:
docker run --rm \
-v $(pwd):/workspace \
-e ANSIBLE_VAULT_PASSWORD=mysecret \
optimode/ansible-core:latest \
ansible-playbook playbook.yml
The image includes hvac library for Vault integration. Configure via environment:
docker run --rm \
-v $(pwd):/workspace \
-e VAULT_ADDR=https://vault.example.com:8200 \
-e VAULT_TOKEN=s.xxxxxxxxxxxxxx \
optimode/ansible-core:latest \
ansible-playbook playbook.yml
Use dynamic inventory or custom inventory files:
docker run --rm \
-v $(pwd):/workspace \
optimode/ansible-core:latest \
ansible-playbook -i inventory/production.yml deploy.yml
Install collections at runtime:
docker run --rm \
-v $(pwd):/workspace \
optimode/ansible-core:latest \
bash -c "ansible-galaxy collection install my.collection && ansible-playbook playbook.yml"
Or build a custom image:
FROM optimode/ansible-core:latest
COPY my-collections.yml /tmp/
RUN ansible-galaxy collection install -r /tmp/my-collections.yml
docker run --rm \
--user $(id -u):$(id -g) \
-v $(pwd):/workspace \
optimode/ansible-core:latest \
ansible-playbook playbook.yml
name: Deploy with Ansible
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Ansible Playbook
run: |
docker run --rm \
-v ${{ github.workspace }}:/workspace \
-e ANSIBLE_VAULT_PASSWORD=${{ secrets.VAULT_PASSWORD }} \
optimode/ansible-core:latest \
ansible-playbook -i inventory/production.yml deploy.yml
deploy:
image: optimode/ansible-core:latest
script:
- ansible-playbook -i inventory/production.yml deploy.yml
only:
- main
Common Ansible environment variables you can use:
| Variable | Description | Example |
|---|---|---|
ANSIBLE_CONFIG | Path to ansible.cfg | /workspace/ansible.cfg |
ANSIBLE_INVENTORY | Default inventory path | /workspace/inventory |
ANSIBLE_VAULT_PASSWORD | Vault password | mysecretpass |
ANSIBLE_HOST_KEY_CHECKING | SSH host key checking | False |
ANSIBLE_STDOUT_CALLBACK | Output format | yaml |
ANSIBLE_FORCE_COLOR | Force colored output | true |
VAULT_ADDR | HashiCorp Vault address | https://vault:8200 |
VAULT_TOKEN | Vault authentication token | s.xxxxx |
# Create a simple playbook
cat > playbook.yml <<EOF
---
- hosts: localhost
tasks:
- name: Print Ansible version
debug:
msg: "Running Ansible {{ ansible_version.full }}"
EOF
# Run it
docker run --rm -v $(pwd):/workspace optimode/ansible-core:latest \
ansible-playbook playbook.yml
ansible - Full Ansible package with coreansible-lint - Best practices checker for Ansiblehvac - HashiCorp Vault client libraryjmespath - JSON query language for data parsingnetaddr - Network address manipulationdocker - Docker SDK for Pythongit - Version control systemopenssh-client - SSH client for remote connectionssshpass - Non-interactive SSH password authenticationrsync - Fast file synchronization toolIf you encounter permission errors with mounted volumes:
# Run as your current user
docker run --rm --user $(id -u):$(id -g) -v $(pwd):/workspace optimode/ansible-core:latest ansible-playbook playbook.yml
Enable SSH debugging:
docker run --rm -v $(pwd):/workspace optimode/ansible-core:latest \
ansible-playbook -vvv playbook.yml
Verify installed collections:
docker run --rm optimode/ansible-core:latest ansible-galaxy collection list
Install missing collection:
docker run --rm optimode/ansible-core:latest \
ansible-galaxy collection install namespace.collection
Contributions are welcome! Please feel free to submit a Pull Request.
To add collections to the base image, update requirements-collections.yml.
This project is licensed under the MIT License - see the LICENSE file for details.
Optimode (Laszlo Malina) GitHub: @optimode
If you encounter issues or have questions:
Built with ❤️ by Optimode
Content type
Image
Digest
sha256:42044e20c…
Size
114.7 MB
Last updated
11 months ago
docker pull optimode/ansible-core