Compare commits

...

79 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
14 changed files with 225 additions and 78 deletions

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,23 +41,21 @@ jobs:
strategy: strategy:
matrix: matrix:
distro: distro:
- rockylinux8 - rockylinux9
- ubuntu2404
- ubuntu2204 - ubuntu2204
- ubuntu2004
- ubuntu1804
- debian12 - debian12
- 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'

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'

119
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,13 +12,15 @@ 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-{{ docker_edition }}" docker_packages:
- "docker-{{ docker_edition }}-cli" - "docker-{{ docker_edition }}"
- "docker-{{ docker_edition }}-rootless-extras" - "docker-{{ docker_edition }}-cli"
docker_packages_state: present - "docker-{{ docker_edition }}-rootless-extras"
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:
@ -27,66 +29,105 @@ Debian/Ubuntu: `docker-{{ docker_edition }}=<VERSION>` (Note: you have to add th
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). 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_add_repo: true ```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. 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.
docker_repo_url: https://download.docker.com/linux ```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_filename: "" 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
- user1 docker_users:
- user2 - user1
- 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:
log-opts: storage-driver: "overlay2"
max-size: "100m" log-opts:
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
@ -21,7 +32,7 @@ docker_compose_package_state: present
# Docker Compose options. # Docker Compose options.
docker_install_compose: false 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
@ -37,10 +48,10 @@ docker_apt_release_channel: stable
# docker_apt_ansible_distribution is a workaround for Ubuntu variants which can't be identified as such by Ansible, # docker_apt_ansible_distribution is a workaround for Ubuntu variants which can't be identified as such by Ansible,
# and is only necessary until Docker officially supports them. # 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_ansible_distribution: "{{ 'ubuntu' if ansible_distribution in ['Pop!_OS', 'Linux Mint'] else ansible_distribution }}"
docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}" 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/trusted.gpg.d/docker.asc] {{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }} {{ ansible_distribution_release }} {{ docker_apt_release_channel }}" 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_gpg_key_checksum: "sha256:1500c1f56fa9e26b9b8f42452a553675796ade0807cdce11975eb98170b3a570"
docker_apt_filename: "docker" docker_apt_filename: "docker"
@ -48,7 +59,7 @@ docker_apt_filename: "docker"
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

@ -22,6 +22,7 @@ galaxy_info:
- 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,11 +2,13 @@
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:rw - /sys/fs/cgroup:/sys/fs/cgroup:rw

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

@ -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.
@ -14,23 +31,17 @@
state: present state: present
when: docker_add_repo | bool 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: false force: false
checksum: "{{ docker_apt_gpg_key_checksum | default(omit) }}" checksum: "{{ docker_apt_gpg_key_checksum | default(omit) }}"
register: add_repository_key register: add_repository_key

View File

@ -1,10 +1,7 @@
--- ---
- 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.
@ -44,6 +41,11 @@
- 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_packages: "docker" docker_packages: "docker"
docker_compose_package: docker-cli-compose

View File

@ -1,2 +1,3 @@
--- ---
docker_packages: "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