Compare commits

...

113 Commits

Author SHA1 Message Date
Jeff Geerling
94b787389d
Merge pull request #504 from geerlingguy/revert-498-patch-1
Revert "Ensure the Docker daemon options file (`/etc/docker/daemon.json`) is deleted when no longer needed"
2025-04-05 07:42:05 -07:00
Jeff Geerling
24dee13f70
Revert "Ensure the Docker daemon options file (/etc/docker/daemon.json) is deleted when no longer needed" 2025-04-05 07:41:55 -07:00
Jeff Geerling
c8df987a56
Merge pull request #498 from spantaleev/patch-1
Ensure the Docker daemon options file (`/etc/docker/daemon.json`) is deleted when no longer needed
2025-04-05 07:41:35 -07:00
Jeff Geerling
d95b3fdc47
Merge pull request #497 from AliMehraji/master
update: docker_yum_gpg_key variable to get the distro gpg key
2025-04-05 07:40:36 -07:00
Ali Mehraji
1000ee6000
Merge branch 'geerlingguy:master' into master 2025-03-24 15:14:54 +03:30
Jeff Geerling
9115e969c1
Merge pull request #501 from adamus1red/adamus1red/alpine-compose
add compose package to Alpine specific variables
2025-03-23 19:00:51 -05:00
adamus1red
0f44fe621a
add compose package to Alpine specific variables 2025-03-23 19:26:14 +00:00
Jeff Geerling
cd0b1fb604
Merge pull request #500 from boite/master
fix: lowercase distro name when removing apt source
2025-03-18 21:48:14 -05:00
boite
047f7a163c fix: lowercase distro name when removing apt source
This makes removal succeed when docker_apt_ansible_distribution is
"Ubuntu".
2025-03-18 23:57:55 +00:00
Slavi Pantaleev
5a2fd928ad
Ensure the Docker daemon options file (/etc/docker/daemon.json) is deleted when no longer needed
If people set options in `docker_daemon_options` (e.g. `{'ipv6': false}`), the role will create the `/etc/docker/daemon.json` file and populate it with the options.

Later on, if people stop setting *all of these* options, the file used to remain in place (containing the old options) and cause trouble. This is unexpected.

If the Docker installation is managed by this role and the `/etc/docker/daemon.json` file is managed by it, it should also take care to:

- either delete the file when it's no longer necessary
- or populate it with empty options if that is what `docker_daemon_options` contains

Deleting the file instead of putting `{}` in it seems like the cleaner approach.

There's a chance that people would like to manage options in `/etc/docker/daemon.json` by themselves (without Ansible) and this new behavior when `docker_daemon_options` is empty, but this runs against having a managed Docker installation via Ansible.

This patch only deletes the `/etc/docker/daemon.json` file.

We could possibly delete the `/etc/docker` directory too, but it's more tricky to delete it only when it's empty. In some cases, the directory may contain other files and invoking the `file` module with `state: absent` will delete everything recursively, which is undesirable.
2025-03-09 16:20:51 +02:00
Ali Mehraji
6f0503c0fb update: docker_yum_gpg_key variable to get the distro specific yum gpg key 2025-02-19 12:54:53 +03:30
Jeff Geerling
acade8d01f
Merge pull request #496 from AliMehraji/master
Separate docker_obsolete_packages for Debian and RedHat OS-Family
2025-02-16 21:27:31 -06:00
Ali Mehraji
ea27ff2acb update: missing document start --- into vars/Debian.yml,RedHat.yml 2025-02-17 02:01:42 +03:30
Ali Mehraji
04981f6af5 Add: empty line at the EOF for the vars/Debian.yml,RedHat.yml 2025-02-17 01:24:35 +03:30
Ali Mehraji
78dec194bd update: docker_obsolete_packages separated for Debian and RedHat OS-Family 2025-02-17 01:21:15 +03:30
Jeff Geerling
a16b26b8e2
Merge pull request #493 from dbrennand/patch-1-470
fix: issue with #470 fix
2025-02-06 15:43:43 -06:00
dbrennand
d490bcea4c
fix: issue with #470 fix
This patch ensures that the correct filename is specified based on the distribution. Observed this behaviour on a Debian system, the old file was not removed due to it being hardcoded to ubuntu instead.
2025-02-06 21:09:29 +00:00
Jeff Geerling
1800d2e793
Merge pull request #491 from dadimah/feature/add_molecule-verify
feat: Add molecule verify playbook
2025-01-28 22:13:13 -06:00
Dadi, Mahesh
6b6ea60025 Add verification playbook for Docker and comment out become directive in converge.yml 2025-01-29 00:45:08 +08:00
Jeff Geerling
ffc1374a22
Merge pull request #487 from AliMehraji/master
Add requirements.txt and update docker-compose version
2025-01-08 21:27:36 -06:00
Ali Mehraji
0e347d18ff revert: .github/workflows/ci.yml and remove the requirements.txt 2025-01-08 20:44:42 +03:30
Ali Mehraji
3f66f26c24 Add: requirements.txt, update docker compose version to 2.32.1 2025-01-08 16:34:03 +03:30
Ali Mehraji
5944efdc95 Add: requirements.txt, update docker compose version to 2.32.1 2025-01-08 16:33:44 +03:30
Jeff Geerling
a9bd86ebad
Merge pull request #484 from shenxianpeng/patch-1
Fix README.md to restore green badge status
2024-12-17 11:40:31 -06:00
shenxianpeng
68b9fa94dd
Fix README.md to restore green badge status 2024-12-17 10:51:17 +02:00
Jeff Geerling
2050a073e5
Merge pull request #481 from FMotalleb/patch-1
docs(apt-sign-key): addressing a fix for #480
2024-12-03 09:04:05 -06:00
Motalleb Fallahnezhad
6d23496a16
docs(apt-sign-key): addressing a fix for #480 2024-12-03 14:32:57 +03:30
Jeff Geerling
a60f86efb1
Merge pull request #477 from dbrennand/fix/#470
Fix Issue #470
2024-11-23 11:32:59 -06:00
dbrennand
110cb89663
fix: https://github.com/geerlingguy/ansible-role-docker/issues/470 2024-11-23 17:13:20 +00:00
Jeff Geerling
38911fcd34
Merge pull request #475 from hobgoblina/update-obsolete-packages
Add `docker-doc` to default obsolete packages list
2024-11-19 09:36:36 -06:00
Lina²
11c3cd44d9
Update README.md 2024-11-18 22:45:26 -05:00
Lina²
d570925854
add docker-doc to docker_obsolete_packages 2024-11-18 22:34:00 -05:00
Jeff Geerling
bb8a21ad55
Merge pull request #469 from lanedif/patch-1
Update README.md
2024-09-21 23:49:23 -05:00
christophertoney3@gmail.com
acdf6da58f
Update README.md
Saw some errors in my install that devicemapper was deprecated and that overlay2 is the recommended default:
https://docs.docker.com/engine/storage/drivers/select-storage-driver/
2024-09-22 00:28:04 -04:00
Jeff Geerling
92e41f60f8
Merge pull request #467 from strgalt-t/master
Bump docker_compose_version to v2.29.2
2024-08-31 12:27:06 -05:00
Jan Langrehr
78790de1d7 Align docker_compose_version in README.md 2024-08-31 18:43:01 +02:00
Jan Langrehr
6e27357ded Bump docker_compose_version to v2.29.2 2024-08-28 17:03:09 +02:00
Jeff Geerling
ae17f0641b
Merge pull request #461 from gluckgames/fix/apt-key-duplication
Remove trusted.gpg.d artifacts.
2024-08-27 15:45:06 -05:00
Jeff Geerling
bccb2d9fda
Merge pull request #466 from Yemtex/patch-1
README: Updated docker compose and docker compose plugin default values
2024-08-26 18:58:50 -05:00
Yemtex
d3cbb31f8d
Updated docker compose and docker compose plugin default values
README now shows, that this role is using the recommended docker compose plugin
2024-08-26 00:09:55 +02:00
Dan Rough
f666736e79 Remove trusted.gpg.d artifacts. Fixes geerlingguy/ansible-role-docker#460 2024-07-24 11:03:00 +01:00
Jeff Geerling
e7ee1a8d1e Fixup CI versions. Drop all older RHEL releases which are broken. 2024-07-16 14:21:20 -05:00
Jeff Geerling
f18394c555 CI Updates. 2024-07-16 13:40:47 -05:00
Jeff Geerling
ee3bb23578 Add docker_obsolete_packages to README. 2024-06-27 08:39:51 -05:00
Jeff Geerling
f35dba88d0
Merge pull request #463 from elsoa-invitech/change-obsolete-packages
Allow change obsolete packages
2024-06-27 08:32:13 -05:00
Első András
5b3eea8f97 Allow change obsolete packages 2024-06-27 15:18:55 +02:00
Jeff Geerling
c0ce31085c
Merge pull request #456 from jamesmyatt/no-gnupg-required
gnupg no longer prerequisite
2024-06-09 21:29:02 -05:00
James Myatt
9c4e21caec gnupg no longer prerequisite
See 811f32afe5
2024-06-09 23:15:02 +01:00
Jeff Geerling
64b17dc423
Merge pull request #439 from cschindlbeck/add-docker-compose-package-name-default-for-archlinux
Fix docker compose plugin on archlinux (Closes #427)
2024-05-27 13:04:01 -05:00
Jeff Geerling
13dfcf7d17
Merge pull request #436 from kawadeomkar/kawade/fix-434
Add GPG keys to `/apt/keyrings` instead of `/apt/trusted.gpg.d`, Update task `Add Docker apt key`
2024-05-27 13:02:34 -05:00
Jeff Geerling
1f1f5cd69c
Merge branch 'master' into kawade/fix-434 2024-05-27 13:02:27 -05:00
Jeff Geerling
a51b9db984
Merge pull request #457 from cschindlbeck/patch-1
Add Ubuntu 24.04 to CI
2024-05-27 13:00:25 -05:00
Jeff Geerling
af2293f47c
Merge pull request #458 from jamesmyatt/enable-armhf
Enable armhf build for old raspberry pis
2024-05-27 13:00:09 -05:00
Jeff Geerling
db5503f430
Merge pull request #459 from jamesmyatt/update-obsolete-pkgs
Update list of obsolete pkgs
2024-05-27 12:57:43 -05:00
James Myatt
fe69df76fa Update list of obsolete packages 2024-05-27 11:17:28 +01:00
James Myatt
820f7426fb Enable armhf build for old raspberry pis 2024-05-27 11:09:35 +01:00
Chris Schindlbeck
5b96593d5c
Add Ubuntu 24.04 to CI 2024-05-27 09:26:04 +02:00
Jeff Geerling
dc1c9a1606
Merge pull request #447 from lucagardi/patch-1
Fix a README typo in Yum variables
2024-02-26 14:02:43 -06:00
Luca Gardi
cff72d0807
Update README.md
Fix typo in Yum repos definition
2024-02-26 13:59:44 +01:00
Jeff Geerling
f845f0986d
Merge pull request #444 from mrodus/docker-buildx-plugin
Add docker-buildx-plugin to docker_packages
2024-02-01 08:02:11 -06:00
mrodus
0a410c1031
Add docker-buildx-plugin to docker_packages 2024-02-01 16:33:29 +05:30
Jeff Geerling
be3b7c289c A wee bit of modernization. 2024-01-24 22:01:14 -06:00
Jeff Geerling
1175acc9f5 Make local dev with molecule a little easier. 2024-01-24 21:49:33 -06:00
Chris Schindlbeck
f741ddba10 Fix docker compose plugin on archlinux 2023-12-28 20:08:47 +01:00
Omkar Kawade
d8f92e1874 434 remove permissions update, add reverse compatibility 2023-12-18 12:56:14 -08:00
Omkar Kawade
08ae86e0b5 434 update apt key destination 2023-12-18 11:06:21 -08:00
Omkar Kawade
6cb849c416 435 ansible-lint 2023-11-16 21:20:56 -08:00
Omkar Kawade
ae29f9f9c0 434 changed_when false for adding docker apt key shell cmd 2023-11-16 21:14:58 -08:00
Omkar Kawade
12ad263ef6 435 Update apt key ansible task 2023-11-16 20:23:52 -08:00
Omkar Kawade
1dca07177f 434 Add GPG keys to keyrings instead of trusted.gpg.d 2023-11-16 18:59:51 -08:00
Jeff Geerling
8ff4a24147
Merge pull request #433 from Yethal/patch-1
Uninstall docker.io on apt distros
2023-11-10 12:37:11 -06:00
Yethal
a76a05024a
Uninstall docker.io on apt distros 2023-11-10 16:20:54 +01:00
Jeff Geerling
0fa54d7c59
Merge pull request #426 from kaysond/patch-1
Update documentation on docker_apt_filename
2023-10-05 19:06:11 +00:00
Jeff Geerling
15815e53e6
Merge pull request #428 from shuuji3/fix/gpg-key-error-on-popos
fix: fix failure for the initial gpg key load on Pop!_OS
2023-10-05 19:05:40 +00:00
TAKAHASHI Shuuji
cd9bf6fdf8 fix: fix failure for the initial gpg key load on Pop!_OS 2023-10-02 23:21:41 +09:00
Aram Akhavan
2b2f6e2100
Update README.md 2023-09-29 11:35:36 -07:00
Aram Akhavan
024cec5659
Update documentation about docker_apt_filename 2023-09-29 11:33:11 -07:00
Jeff Geerling
9d51ec8802
Merge pull request #424 from rpetti/fix-runc-conflict-on-rhel
remove runc, as it conflicts with containerd
2023-09-28 16:53:38 +00:00
Rob Petti
95d13bf2b8 remove runc, as it conflicts with containerd 2023-09-27 23:16:32 -06:00
Jeff Geerling
914ca965e0
Merge pull request #396 from dale-c-anderson/382-fix-apt-errors-on-pop-os
Fix apt errors on Pop!_OS
2023-09-28 02:12:12 +00:00
Jeff Geerling
3ceffb4cee
Merge pull request #420 from eropple/eropple-patch-1
Fix a typo in README.md
2023-09-28 02:11:17 +00:00
Jeff Geerling
1fad07589a
Merge pull request #369 from kaysond/new_defaults
Change defaults in the next major release
2023-09-28 02:09:48 +00:00
Aram Akhavan
fcbd3d7098
Merge branch 'master' into new_defaults 2023-09-27 14:41:20 -07:00
Ed Ropple
b41084ad3f
Fix a typo in README.md 2023-08-12 14:47:52 -04:00
Dale Anderson
a23731506b
Restore snippet lost in previous conflict 2023-08-10 09:12:33 -07:00
Dale Anderson
0b419a0a12
Merge branch 'master' into 382-fix-apt-errors-on-pop-os 2023-08-10 09:10:36 -07:00
Jeff Geerling
8bb277bd7f
Merge pull request #418 from nevart/apt-key-fix-check-mode
APT key: don't force and provide checksum, to fix check mode
2023-08-10 00:18:41 -05:00
Jeff Geerling
7fa232d1c1
Merge pull request #419 from nevart/debian-bookworm
Add Debian 12 bookworm support
2023-08-10 00:17:22 -05:00
Jeff Geerling
e6996ccca8
Merge pull request #410 from etkecc/debian-signed-by
debian: add signed-by param to the apt source list
2023-08-10 00:16:13 -05:00
nevart
81f23a11dc Add Debian 12 bookworm support 2023-08-06 13:01:27 +00:00
Jeff Geerling
78e50d46e2 Stale bot is now Stale GitHub Action. 2023-07-10 17:47:39 -05:00
nevart
7c86fe1739 APT key: don't force and provide checksum, to fix check mode
As described in https://github.com/ansible/ansible/issues/65687, get_url
only partially supports check_mode: "the changed status will reflect
comparison to an empty source file".

Before this change, executing this code, with the key already being in
place on the target system, would report "OK", while check_mode would
report "changed".

Due to this change, both now either report "OK" or "changed", depending
on the state of the target system.
2023-06-26 07:34:10 +00:00
Jeff Geerling
635061e0a4 Remove official support for RHEL. Rocky/Alma/Stream support is best-effort. 2023-06-23 10:56:08 -05:00
Jeff Geerling
a29e9d51e9 Fix Molecule CI workflow since docker plugin has moved. 2023-04-20 17:27:13 -05:00
Aine
32307386d4
debian: add signed-by param to the apt source list, fixes #409 2023-04-02 14:33:48 +03:00
Aram Akhavan
c3a127134d change default compose install to plugin, apt repository filename to docker.list 2023-02-21 22:43:08 -08:00
Aram Akhavan
d64f9afe19 add filename option to apt repository add 2023-02-21 22:35:04 -08:00
Jeff Geerling
67e50e9af0
Merge pull request #394 from aurelien-bareille/master
Add flag to deactivate repository configuration
2023-02-02 21:28:43 -06:00
Dale Anderson
2638529927
Fix linter warning 2023-01-23 17:50:49 -08:00
Dale Anderson
75b8acc626
Linux Mint is also Ubuntu under the hood
Closes #334
2023-01-23 17:41:27 -08:00
Dale Anderson
a6bab2c9be
Make naming more consistent 2022-12-30 15:46:38 -08:00
Dale Anderson
48688d0faf
Handle the exception more cleanly 2022-12-30 15:17:35 -08:00
Dale Anderson
43b5ad4fef
Override defaults for Pop!_OS 2022-12-30 14:56:00 -08:00
aurelien-bareille
61d571a941 Add documentation 2022-12-26 16:53:42 +01:00
aurelien-bareille
0ad2ddd2c6 Include repository setup dependancies in flag scope 2022-12-14 18:25:29 +01:00
aurelien-bareille
8b623b2266 Add flag to deactivate repository configuration 2022-12-14 16:31:46 +01:00
Jeff Geerling
b4a2ff5ee7 Remove CentOS 7 from tests. 2022-12-06 19:24:50 -06:00
Jeff Geerling
32dfe4c00e Fix Molecule CI workflow for Ubuntu 22.04 GitHub Actions. 2022-12-06 18:23:40 -06:00
Jeff Geerling
03d5bd6d06 Remove deprecated warn arg from command and shell module invocations. 2022-11-26 22:51:49 -06:00
Jeff Geerling
9685a2a30d
Merge pull request #389 from abalage/bugfix/fix-overriding-os-variables
Make override work by adjusting variable name to match defaults/main.yml
2022-11-10 16:01:59 -06:00
Balázs Németh
17ddd4ef2e Make override work by adjusting variable to match defaults/main.yml 2022-11-10 22:11:22 +01:00
Jeff Geerling
9154e3bf75
Merge pull request #384 from berthin/master
Fix condition for empty docker compose svn
2022-11-05 14:21:48 -05:00
berthin
3800fd2d42
Fix condition for empty docker compose svn 2022-11-05 11:20:04 +01:00
18 changed files with 299 additions and 156 deletions

57
.github/stale.yml vendored
View File

@ -1,57 +0,0 @@
# Configuration for probot-stale - https://github.com/probot/stale
---
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 90
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 30
# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
onlyLabels: []
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:
- bug
- pinned
- security
- planned
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: false
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: false
# Set to true to ignore issues with an assignee (defaults to false)
exemptAssignees: false
# Label to use when marking as stale
staleLabel: stale
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
pulls:
markComment: |-
This pull request has been marked 'stale' due to lack of recent activity. If there is no further activity, the PR will be closed in another 30 days. Thank you for your contribution!
Please read [this blog post](https://www.jeffgeerling.com/blog/2020/enabling-stale-issue-bot-on-my-github-repositories) to see the reasons why I mark pull requests as stale.
unmarkComment: >-
This pull request is no longer marked for closure.
closeComment: >-
This pull request has been closed due to inactivity. If you feel this is in error, please reopen the pull request or file a new PR with the relevant details.
issues:
markComment: |-
This issue has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 30 days. Thank you for your contribution!
Please read [this blog post](https://www.jeffgeerling.com/blog/2020/enabling-stale-issue-bot-on-my-github-repositories) to see the reasons why I mark issues as stale.
unmarkComment: >-
This issue is no longer marked for closure.
closeComment: >-
This issue has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.

View File

@ -19,12 +19,12 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out the codebase. - name: Check out the codebase.
uses: actions/checkout@v2 uses: actions/checkout@v4
with: with:
path: 'geerlingguy.docker' path: 'geerlingguy.docker'
- name: Set up Python 3. - name: Set up Python 3.
uses: actions/setup-python@v2 uses: actions/setup-python@v5
with: with:
python-version: '3.x' python-version: '3.x'
@ -41,28 +41,26 @@ jobs:
strategy: strategy:
matrix: matrix:
distro: distro:
- rockylinux8 - rockylinux9
- centos7 - ubuntu2404
- ubuntu2204 - ubuntu2204
- ubuntu2004 - debian12
- ubuntu1804
- debian11 - debian11
- debian10 - fedora40
- fedora34
steps: steps:
- name: Check out the codebase. - name: Check out the codebase.
uses: actions/checkout@v2 uses: actions/checkout@v4
with: with:
path: 'geerlingguy.docker' path: 'geerlingguy.docker'
- name: Set up Python 3. - name: Set up Python 3.
uses: actions/setup-python@v2 uses: actions/setup-python@v5
with: with:
python-version: '3.x' python-version: '3.x'
- name: Install test dependencies. - name: Install test dependencies.
run: pip3 install ansible molecule[docker] docker run: pip3 install ansible molecule molecule-plugins[docker] docker
- name: Run Molecule tests. - name: Run Molecule tests.
run: molecule test run: molecule test

View File

@ -22,12 +22,12 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out the codebase. - name: Check out the codebase.
uses: actions/checkout@v2 uses: actions/checkout@v4
with: with:
path: 'geerlingguy.docker' path: 'geerlingguy.docker'
- name: Set up Python 3. - name: Set up Python 3.
uses: actions/setup-python@v2 uses: actions/setup-python@v5
with: with:
python-version: '3.x' python-version: '3.x'

34
.github/workflows/stale.yml vendored Normal file
View File

@ -0,0 +1,34 @@
---
name: Close inactive issues
'on':
schedule:
- cron: "55 6 * * 1" # semi-random time
jobs:
close-issues:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v8
with:
days-before-stale: 120
days-before-close: 60
exempt-issue-labels: bug,pinned,security,planned
exempt-pr-labels: bug,pinned,security,planned
stale-issue-label: "stale"
stale-pr-label: "stale"
stale-issue-message: |
This issue has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 30 days. Thank you for your contribution!
Please read [this blog post](https://www.jeffgeerling.com/blog/2020/enabling-stale-issue-bot-on-my-github-repositories) to see the reasons why I mark issues as stale.
close-issue-message: |
This issue has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.
stale-pr-message: |
This pr has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 30 days. Thank you for your contribution!
Please read [this blog post](https://www.jeffgeerling.com/blog/2020/enabling-stale-issue-bot-on-my-github-repositories) to see the reasons why I mark issues as stale.
close-pr-message: |
This pr has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details.
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -7,5 +7,4 @@ rules:
level: warning level: warning
ignore: | ignore: |
.github/stale.yml .github/workflows/stale.yml
.travis.yml

108
README.md
View File

@ -1,6 +1,6 @@
# Ansible Role: Docker # Ansible Role: Docker
[![CI](https://github.com/geerlingguy/ansible-role-docker/workflows/CI/badge.svg?event=push)](https://github.com/geerlingguy/ansible-role-docker/actions?query=workflow%3ACI) [![CI](https://github.com/geerlingguy/ansible-role-docker/actions/workflows/ci.yml/badge.svg)](https://github.com/geerlingguy/ansible-role-docker/actions/workflows/ci.yml)
An Ansible Role that installs [Docker](https://www.docker.com) on Linux. An Ansible Role that installs [Docker](https://www.docker.com) on Linux.
@ -12,76 +12,122 @@ None.
Available variables are listed below, along with default values (see `defaults/main.yml`): Available variables are listed below, along with default values (see `defaults/main.yml`):
# Edition can be one of: 'ce' (Community Edition) or 'ee' (Enterprise Edition). ```yaml
docker_edition: 'ce' # Edition can be one of: 'ce' (Community Edition) or 'ee' (Enterprise Edition).
docker_packages: docker_edition: 'ce'
docker_packages:
- "docker-{{ docker_edition }}" - "docker-{{ docker_edition }}"
- "docker-{{ docker_edition }}-cli" - "docker-{{ docker_edition }}-cli"
- "docker-{{ docker_edition }}-rootless-extras" - "docker-{{ docker_edition }}-rootless-extras"
docker_packages_state: present docker_packages_state: present
```
The `docker_edition` should be either `ce` (Community Edition) or `ee` (Enterprise Edition). The `docker_edition` should be either `ce` (Community Edition) or `ee` (Enterprise Edition).
You can also specify a specific version of Docker to install using the distribution-specific format: You can also specify a specific version of Docker to install using the distribution-specific format:
Red Hat/CentOS: `docker-{{ docker_edition }}-<VERSION>` (Note: you have to add this to all packages); Red Hat/CentOS: `docker-{{ docker_edition }}-<VERSION>` (Note: you have to add this to all packages);
Debian/Ubuntu: `docker-{{ docker_edition }}=<VERSION>` (Note: you have to add this to all packages). Debian/Ubuntu: `docker-{{ docker_edition }}=<VERSION>` (Note: you have to add this to all packages).
You can control whether the package is installed, uninstalled, or at the latest version by setting `docker_package_state` to `present`, `absent`, or `latest`, respectively. Note that the Docker daemon will be automatically restarted if the Docker package is updated. This is a side effect of flushing all handlers (running any of the handlers that have been notified by this and any other role up to this point in the play). You can control whether the package is installed, uninstalled, or at the latest version by setting `docker_packages_state` to `present`, `absent`, or `latest`, respectively. Note that the Docker daemon will be automatically restarted if the Docker package is updated. This is a side effect of flushing all handlers (running any of the handlers that have been notified by this and any other role up to this point in the play).
docker_service_manage: true ```yaml
docker_service_state: started docker_obsolete_packages:
docker_service_enabled: true - docker
docker_restart_handler_state: restarted - docker.io
- docker-engine
- docker-doc
- docker-compose
- docker-compose-v2
- podman-docker
- containerd
- runc
```
`docker_obsolete_packages` for different os-family:
- [`RedHat.yaml`](./vars/RedHat.yml)
- [`Debian.yaml`](./vars/Debian.yml)
A list of packages to be uninstalled prior to running this role. See [Docker's installation instructions](https://docs.docker.com/engine/install/debian/#uninstall-old-versions) for an up-to-date list of old packages that should be removed.
```yaml
docker_service_manage: true
docker_service_state: started
docker_service_enabled: true
docker_restart_handler_state: restarted
```
Variables to control the state of the `docker` service, and whether it should start on boot. If you're installing Docker inside a Docker container without systemd or sysvinit, you should set `docker_service_manage` to `false`. Variables to control the state of the `docker` service, and whether it should start on boot. If you're installing Docker inside a Docker container without systemd or sysvinit, you should set `docker_service_manage` to `false`.
docker_install_compose_plugin: false ```yaml
docker_compose_package: docker-compose-plugin docker_install_compose_plugin: true
docker_compose_package_state: present docker_compose_package: docker-compose-plugin
docker_compose_package_state: present
```
Docker Compose Plugin installation options. These differ from the below in that docker-compose is installed as a docker plugin (and used with `docker compose`) instead of a standalone binary. Docker Compose Plugin installation options. These differ from the below in that docker-compose is installed as a docker plugin (and used with `docker compose`) instead of a standalone binary.
docker_install_compose: true ```yaml
docker_compose_version: "1.26.0" docker_install_compose: false
docker_compose_arch: "{{ ansible_architecture }}" docker_compose_version: "v2.32.1"
docker_compose_path: /usr/local/bin/docker-compose docker_compose_arch: "{{ ansible_architecture }}"
docker_compose_url: "https://github.com/docker/compose/releases/download/{{ docker_compose_version }}/docker-compose-linux-{{ docker_compose_arch }}"
docker_compose_path: /usr/local/bin/docker-compose
```
Docker Compose installation options. Docker Compose installation options.
docker_repo_url: https://download.docker.com/linux ```yaml
docker_add_repo: true
```
Controls whether this role will add the official Docker repository. Set to `false` if you want to use the default docker packages for your system or manage the package repository on your own.
```yaml
docker_repo_url: https://download.docker.com/linux
```
The main Docker repo URL, common between Debian and RHEL systems. The main Docker repo URL, common between Debian and RHEL systems.
docker_apt_release_channel: stable ```yaml
docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}" docker_apt_release_channel: stable
docker_apt_repository: "deb [arch={{ docker_apt_arch }}] {{ docker_repo_url }}/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}" docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}"
docker_apt_ignore_key_error: True docker_apt_repository: "deb [arch={{ docker_apt_arch }}{{' signed-by=/etc/apt/keyrings/docker.asc' if add_repository_key is not failed}}] {{ docker_repo_url }}/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}"
docker_apt_gpg_key: "{{ docker_repo_url }}/{{ ansible_distribution | lower }}/gpg" docker_apt_ignore_key_error: True
docker_apt_gpg_key: "{{ docker_repo_url }}/{{ ansible_distribution | lower }}/gpg"
docker_apt_filename: "docker"
```
(Used only for Debian/Ubuntu.) You can switch the channel to `nightly` if you want to use the Nightly release. (Used only for Debian/Ubuntu.) You can switch the channel to `nightly` if you want to use the Nightly release.
You can change `docker_apt_gpg_key` to a different url if you are behind a firewall or provide a trustworthy mirror. You can change `docker_apt_gpg_key` to a different url if you are behind a firewall or provide a trustworthy mirror.
Usually in combination with changing `docker_apt_repository` as well. Usually in combination with changing `docker_apt_repository` as well. `docker_apt_filename` controls the name of the source list file created in `sources.list.d`. If you are upgrading from an older (<7.0.0) version of this role, you should change this to the name of the existing file (e.g. `download_docker_com_linux_debian` on Debian) to avoid conflicting lists.
docker_yum_repo_url: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora','centos') }}/docker-{{ docker_edition }}.repo"docker_edition }}.repo ```yaml
docker_yum_repo_enable_nightly: '0' docker_yum_repo_url: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora','centos') }}/docker-{{ docker_edition }}.repo"
docker_yum_repo_enable_test: '0' docker_yum_repo_enable_nightly: '0'
docker_yum_gpg_key: "{{ docker_repo_url }}/centos/gpg" docker_yum_repo_enable_test: '0'
docker_yum_gpg_key: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora', 'centos') }}/gpg"
```
(Used only for RedHat/CentOS.) You can enable the Nightly or Test repo by setting the respective vars to `1`. (Used only for RedHat/CentOS.) You can enable the Nightly or Test repo by setting the respective vars to `1`.
You can change `docker_yum_gpg_key` to a different url if you are behind a firewall or provide a trustworthy mirror. You can change `docker_yum_gpg_key` to a different url if you are behind a firewall or provide a trustworthy mirror.
Usually in combination with changing `docker_yum_repository` as well. Usually in combination with changing `docker_yum_repository` as well.
docker_users: ```yaml
docker_users:
- user1 - user1
- user2 - user2
```
A list of system users to be added to the `docker` group (so they can use Docker on the server). A list of system users to be added to the `docker` group (so they can use Docker on the server).
docker_daemon_options: ```yaml
storage-driver: "devicemapper" docker_daemon_options:
storage-driver: "overlay2"
log-opts: log-opts:
max-size: "100m" max-size: "100m"
```
Custom `dockerd` options can be configured through this dictionary representing the json file `/etc/docker/daemon.json`. Custom `dockerd` options can be configured through this dictionary representing the json file `/etc/docker/daemon.json`.

View File

@ -6,7 +6,18 @@ docker_packages:
- "docker-{{ docker_edition }}-cli" - "docker-{{ docker_edition }}-cli"
- "docker-{{ docker_edition }}-rootless-extras" - "docker-{{ docker_edition }}-rootless-extras"
- "containerd.io" - "containerd.io"
- docker-buildx-plugin
docker_packages_state: present docker_packages_state: present
docker_obsolete_packages:
- docker
- docker.io
- docker-engine
- docker-doc
- docker-compose
- docker-compose-v2
- podman-docker
- containerd
- runc
# Service options. # Service options.
docker_service_manage: true docker_service_manage: true
@ -15,32 +26,40 @@ docker_service_enabled: true
docker_restart_handler_state: restarted docker_restart_handler_state: restarted
# Docker Compose Plugin options. # Docker Compose Plugin options.
docker_install_compose_plugin: false docker_install_compose_plugin: true
docker_compose_package: docker-compose-plugin docker_compose_package: docker-compose-plugin
docker_compose_package_state: present docker_compose_package_state: present
# Docker Compose options. # Docker Compose options.
docker_install_compose: true docker_install_compose: false
docker_compose_version: "v2.11.1" docker_compose_version: "v2.32.1"
docker_compose_arch: "{{ ansible_architecture }}" docker_compose_arch: "{{ ansible_architecture }}"
docker_compose_url: "https://github.com/docker/compose/releases/download/{{ docker_compose_version }}/docker-compose-linux-{{ docker_compose_arch }}" docker_compose_url: "https://github.com/docker/compose/releases/download/{{ docker_compose_version }}/docker-compose-linux-{{ docker_compose_arch }}"
docker_compose_path: /usr/local/bin/docker-compose docker_compose_path: /usr/local/bin/docker-compose
# Enable repo setup
docker_add_repo: true
# Docker repo URL. # Docker repo URL.
docker_repo_url: https://download.docker.com/linux docker_repo_url: https://download.docker.com/linux
# Used only for Debian/Ubuntu. Switch 'stable' to 'nightly' if needed. # Used only for Debian/Ubuntu/Pop!_OS/Linux Mint. Switch 'stable' to 'nightly' if needed.
docker_apt_release_channel: stable docker_apt_release_channel: stable
docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}" # docker_apt_ansible_distribution is a workaround for Ubuntu variants which can't be identified as such by Ansible,
docker_apt_repository: "deb [arch={{ docker_apt_arch }}] {{ docker_repo_url }}/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}" # and is only necessary until Docker officially supports them.
docker_apt_ansible_distribution: "{{ 'ubuntu' if ansible_distribution in ['Pop!_OS', 'Linux Mint'] else ansible_distribution }}"
docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'armhf' if ansible_architecture == 'armv7l' else 'amd64' }}"
docker_apt_repository: "deb [arch={{ docker_apt_arch }} signed-by=/etc/apt/keyrings/docker.asc] {{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}"
docker_apt_ignore_key_error: true docker_apt_ignore_key_error: true
docker_apt_gpg_key: "{{ docker_repo_url }}/{{ ansible_distribution | lower }}/gpg" docker_apt_gpg_key: "{{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }}/gpg"
docker_apt_gpg_key_checksum: "sha256:1500c1f56fa9e26b9b8f42452a553675796ade0807cdce11975eb98170b3a570"
docker_apt_filename: "docker"
# Used only for RedHat/CentOS/Fedora. # Used only for RedHat/CentOS/Fedora.
docker_yum_repo_url: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora','centos') }}/docker-{{ docker_edition }}.repo" docker_yum_repo_url: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora','centos') }}/docker-{{ docker_edition }}.repo"
docker_yum_repo_enable_nightly: '0' docker_yum_repo_enable_nightly: '0'
docker_yum_repo_enable_test: '0' docker_yum_repo_enable_test: '0'
docker_yum_gpg_key: "{{ docker_repo_url }}/centos/gpg" docker_yum_gpg_key: "{{ docker_repo_url }}/{{ (ansible_distribution == 'Fedora') | ternary('fedora', 'centos') }}/gpg"
# A list of users who will be added to the docker group. # A list of users who will be added to the docker group.
docker_users: [] docker_users: []

View File

@ -7,12 +7,8 @@ galaxy_info:
description: Docker for Linux. description: Docker for Linux.
company: "Midwestern Mac, LLC" company: "Midwestern Mac, LLC"
license: "license (BSD, MIT)" license: "license (BSD, MIT)"
min_ansible_version: 2.4 min_ansible_version: 2.10
platforms: platforms:
- name: EL
versions:
- 7
- 8
- name: Fedora - name: Fedora
versions: versions:
- all - all
@ -20,11 +16,13 @@ galaxy_info:
versions: versions:
- buster - buster
- bullseye - bullseye
- bookworm
- name: Ubuntu - name: Ubuntu
versions: versions:
- bionic - bionic
- focal - focal
- jammy - jammy
- noble
- name: Alpine - name: Alpine
version: version:
- all - all

View File

@ -1,7 +1,7 @@
--- ---
- name: Converge - name: Converge
hosts: all hosts: all
become: true # become: true
pre_tasks: pre_tasks:
- name: Update apt cache. - name: Update apt cache.

View File

@ -2,14 +2,17 @@
role_name_check: 1 role_name_check: 1
dependency: dependency:
name: galaxy name: galaxy
options:
ignore-errors: true
driver: driver:
name: docker name: docker
platforms: platforms:
- name: instance - name: instance
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest" image: "geerlingguy/docker-${MOLECULE_DISTRO:-rockylinux9}-ansible:latest"
command: ${MOLECULE_DOCKER_COMMAND:-""} command: ${MOLECULE_DOCKER_COMMAND:-""}
volumes: volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro - /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
privileged: true privileged: true
pre_build_image: true pre_build_image: true
provisioner: provisioner:

View File

@ -0,0 +1,51 @@
---
- name: Verify Docker Role
hosts: all
tasks:
- name: Verify Docker binary is available
command: docker version
register: docker_version_result
changed_when: false
failed_when: docker_version_result.rc != 0
- name: Show Docker version details
debug:
msg: >
Docker Version Output:
{{ docker_version_result.stdout_lines | join('\n') }}
- name: Verify Docker service is running
command: systemctl is-active docker
register: docker_service_status
when: ansible_service_mgr == 'systemd'
changed_when: false
failed_when: docker_service_status.stdout.strip() != "active"
- name: Display Docker service status
debug:
msg: "Docker service is {{ docker_service_status.stdout.strip() }}"
when: ansible_service_mgr == 'systemd'
- name: Pull the 'hello-world' image
command: docker pull hello-world
register: docker_pull_result
changed_when: true
failed_when: docker_pull_result.rc != 0
- name: Show result of pulling the 'hello-world' image
debug:
msg: >
Pulling 'hello-world' completed with output:
{{ docker_pull_result.stdout_lines | join('\n') }}
- name: Run a test container (hello-world)
command: docker run --rm hello-world
register: docker_run_result
changed_when: true
failed_when: docker_run_result.rc != 0
- name: Display test container output
debug:
msg: >
Running 'hello-world' container completed with output:
{{ docker_run_result.stdout_lines | join('\n') }}

View File

@ -8,7 +8,9 @@
- set_fact: - set_fact:
docker_compose_current_version: "{{ docker_compose_vsn.stdout | regex_search('(\\d+(\\.\\d+)+)') }}" docker_compose_current_version: "{{ docker_compose_vsn.stdout | regex_search('(\\d+(\\.\\d+)+)') }}"
when: docker_compose_vsn.stdout is defined when: >
docker_compose_vsn.stdout is defined
and (docker_compose_vsn.stdout | length > 0)
- name: Delete existing docker-compose version if it's different. - name: Delete existing docker-compose version if it's different.
file: file:
@ -25,5 +27,5 @@
mode: 0755 mode: 0755
when: > when: >
(docker_compose_current_version is not defined) (docker_compose_current_version is not defined)
or (docker_compose_current_version|length == 0) or (docker_compose_current_version | length == 0)
or (docker_compose_current_version is version((docker_compose_version | regex_replace('v', '')), '<')) or (docker_compose_current_version is version((docker_compose_version | regex_replace('v', '')), '<'))

View File

@ -1,9 +1,26 @@
--- ---
- name: Ensure old versions of Docker are not installed. - name: Ensure apt key is not present in trusted.gpg.d
ansible.builtin.file:
path: /etc/apt/trusted.gpg.d/docker.asc
state: absent
- name: Ensure old apt source list is not present in /etc/apt/sources.list.d
ansible.builtin.file:
path: "/etc/apt/sources.list.d/download_docker_com_linux_{{ docker_apt_ansible_distribution | lower }}.list"
state: absent
- name: Ensure the repo referencing the previous trusted.gpg.d key is not present
apt_repository:
repo: "deb [arch={{ docker_apt_arch }} signed-by=/etc/apt/trusted.gpg.d/docker.asc] {{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}"
state: absent
filename: "{{ docker_apt_filename }}"
update_cache: true
when: docker_add_repo | bool
- # See https://docs.docker.com/engine/install/debian/#uninstall-old-versions
name: Ensure old versions of Docker are not installed.
package: package:
name: name: "{{ docker_obsolete_packages }}"
- docker
- docker-engine
state: absent state: absent
- name: Ensure dependencies are installed. - name: Ensure dependencies are installed.
@ -12,41 +29,38 @@
- apt-transport-https - apt-transport-https
- ca-certificates - ca-certificates
state: present state: present
when: docker_add_repo | bool
- name: Ensure additional dependencies are installed (on Ubuntu < 20.04 and any other systems). - name: Ensure directory exists for /etc/apt/keyrings
apt: file:
name: gnupg2 path: /etc/apt/keyrings
state: present state: directory
when: ansible_distribution != 'Ubuntu' or ansible_distribution_version is version('20.04', '<') mode: "0755"
- name: Ensure additional dependencies are installed (on Ubuntu >= 20.04).
apt:
name: gnupg
state: present
when: ansible_distribution == 'Ubuntu' and ansible_distribution_version is version('20.04', '>=')
- name: Add Docker apt key. - name: Add Docker apt key.
ansible.builtin.get_url: ansible.builtin.get_url:
url: "{{ docker_apt_gpg_key }}" url: "{{ docker_apt_gpg_key }}"
dest: /etc/apt/trusted.gpg.d/docker.asc dest: /etc/apt/keyrings/docker.asc
mode: '0644' mode: "0644"
force: true force: false
checksum: "{{ docker_apt_gpg_key_checksum | default(omit) }}"
register: add_repository_key register: add_repository_key
ignore_errors: "{{ docker_apt_ignore_key_error }}" ignore_errors: "{{ docker_apt_ignore_key_error }}"
when: docker_add_repo | bool
- name: Ensure curl is present (on older systems without SNI). - name: Ensure curl is present (on older systems without SNI).
package: name=curl state=present package: name=curl state=present
when: add_repository_key is failed when: add_repository_key is failed and docker_add_repo | bool
- name: Add Docker apt key (alternative for older systems without SNI). - name: Add Docker apt key (alternative for older systems without SNI).
shell: > shell: >
curl -sSL {{ docker_apt_gpg_key }} | apt-key add - curl -sSL {{ docker_apt_gpg_key }} | apt-key add -
args: when: add_repository_key is failed and docker_add_repo | bool
warn: false
when: add_repository_key is failed
- name: Add Docker repository. - name: Add Docker repository.
apt_repository: apt_repository:
repo: "{{ docker_apt_repository }}" repo: "{{ docker_apt_repository }}"
state: present state: present
filename: "{{ docker_apt_filename }}"
update_cache: true update_cache: true
when: docker_add_repo | bool

View File

@ -1,16 +1,14 @@
--- ---
- name: Ensure old versions of Docker are not installed. - name: Ensure old versions of Docker are not installed.
package: package:
name: name: "{{ docker_obsolete_packages }}"
- docker
- docker-common
- docker-engine
state: absent state: absent
- name: Add Docker GPG key. - name: Add Docker GPG key.
rpm_key: rpm_key:
key: "{{ docker_yum_gpg_key }}" key: "{{ docker_yum_gpg_key }}"
state: present state: present
when: docker_add_repo | bool
- name: Add Docker repository. - name: Add Docker repository.
get_url: get_url:
@ -19,6 +17,7 @@
owner: root owner: root
group: root group: root
mode: 0644 mode: 0644
when: docker_add_repo | bool
- name: Configure Docker Nightly repo. - name: Configure Docker Nightly repo.
ini_file: ini_file:
@ -28,6 +27,7 @@
value: '{{ docker_yum_repo_enable_nightly }}' value: '{{ docker_yum_repo_enable_nightly }}'
mode: 0644 mode: 0644
no_extra_spaces: true no_extra_spaces: true
when: docker_add_repo | bool
- name: Configure Docker Test repo. - name: Configure Docker Test repo.
ini_file: ini_file:
@ -37,9 +37,15 @@
value: '{{ docker_yum_repo_enable_test }}' value: '{{ docker_yum_repo_enable_test }}'
mode: 0644 mode: 0644
no_extra_spaces: true no_extra_spaces: true
when: docker_add_repo | bool
- name: Configure containerd on RHEL 8. - name: Configure containerd on RHEL 8.
block: block:
- name: Ensure runc is not installed.
package:
name: runc
state: absent
- name: Ensure container-selinux is installed. - name: Ensure container-selinux is installed.
package: package:
name: container-selinux name: container-selinux

View File

@ -1,2 +1,3 @@
--- ---
docker_package: "docker" docker_packages: "docker"
docker_compose_package: docker-cli-compose

View File

@ -1,2 +1,3 @@
--- ---
docker_package: "docker" docker_packages: "docker"
docker_compose_package: docker-compose

14
vars/Debian.yml Normal file
View File

@ -0,0 +1,14 @@
---
# Used only for Debian/Ubuntu (Debian OS-Family)
# https://docs.docker.com/engine/install/debian/#uninstall-old-versions
docker_obsolete_packages:
- docker
- docker.io
- docker-engine
- docker-doc
- docker-compose
- docker-compose-v2
- podman-docker
- containerd
- runc

14
vars/RedHat.yml Normal file
View File

@ -0,0 +1,14 @@
---
# Used only for Fedora/Rocky (RedHat OS-Family)
# https://docs.docker.com/engine/install/fedora/#uninstall-old-versions
# https://docs.docker.com/engine/install/centos/#uninstall-old-versions
docker_obsolete_packages:
- docker
- docker-client
- docker-client-latest
- docker-common
- docker-latest
- docker-latest-logrotate
- docker-logrotate
- docker-engine