Compare commits

..

39 Commits

Author SHA1 Message Date
Jeff Geerling
b941efcdc4
Merge pull request #511 from sebdanielsson/deb822_repository
Refactor Debian setup to use deb822_repository
2025-08-19 00:44:34 -04:00
Sebastian
6343bc9148
Only one task for deleting the old repo is needed. Remove dependencies that are no longer needed for this role. 2025-08-18 20:56:23 +02:00
Sebastian
894e30654f
Keyring removal is already handled by deb822 module. 2025-08-18 20:45:45 +02:00
Sebastian
8818e2b3e3
Make sure that handlers run before package install 2025-07-21 14:54:41 +02:00
Sebastian
a44d1bee2a
Refactor Debian setup to use deb822_repository
- Replaces deprecated apt_repository and manual GPG key management with ansible.builtin.deb822_repository, introduced in apt 1.1.
- Updates handlers to use FQCNs.
2025-07-21 14:36:38 +02:00
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
10 changed files with 130 additions and 56 deletions

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.
@ -34,11 +34,19 @@ docker_obsolete_packages:
- docker - docker
- docker.io - docker.io
- docker-engine - docker-engine
- docker-doc
- docker-compose
- docker-compose-v2
- podman-docker - podman-docker
- containerd - containerd
- runc - 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. 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 ```yaml
@ -60,7 +68,7 @@ Docker Compose Plugin installation options. These differ from the below in that
```yaml ```yaml
docker_install_compose: false docker_install_compose: false
docker_compose_version: "2.29.2" 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
@ -83,7 +91,7 @@ The main Docker repo URL, common between Debian and RHEL systems.
```yaml ```yaml
docker_apt_release_channel: stable docker_apt_release_channel: stable
docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}" docker_apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}"
docker_apt_repository: "deb [arch={{ docker_apt_arch }}] {{ docker_repo_url }}/{{ 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' if add_repository_key is not failed}}] {{ docker_repo_url }}/{{ 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 }}/{{ ansible_distribution | lower }}/gpg"
docker_apt_filename: "docker" docker_apt_filename: "docker"
@ -98,7 +106,7 @@ Usually in combination with changing `docker_apt_repository` as well. `docker_ap
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"
``` ```
(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`.
@ -116,7 +124,7 @@ A list of system users to be added to the `docker` group (so they can use Docker
```yaml ```yaml
docker_daemon_options: docker_daemon_options:
storage-driver: "devicemapper" storage-driver: "overlay2"
log-opts: log-opts:
max-size: "100m" max-size: "100m"
``` ```

View File

@ -12,6 +12,9 @@ docker_obsolete_packages:
- docker - docker
- docker.io - docker.io
- docker-engine - docker-engine
- docker-doc
- docker-compose
- docker-compose-v2
- podman-docker - podman-docker
- containerd - containerd
- runc - runc
@ -29,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.29.2" 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
@ -56,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

@ -1,7 +1,11 @@
--- ---
- name: restart docker - name: restart docker
service: ansible.builtin.service:
name: docker name: docker
state: "{{ docker_restart_handler_state }}" state: "{{ docker_restart_handler_state }}"
ignore_errors: "{{ ansible_check_mode }}" ignore_errors: "{{ ansible_check_mode }}"
when: docker_service_manage | bool when: docker_service_manage | bool
- name: apt update
ansible.builtin.apt:
update_cache: true

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

@ -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

@ -4,58 +4,40 @@
path: /etc/apt/trusted.gpg.d/docker.asc path: /etc/apt/trusted.gpg.d/docker.asc
state: absent state: absent
- name: Ensure the repo referencing the previous trusted.gpg.d key is not present - name: Ensure old apt source list is not present in /etc/apt/sources.list.d
apt_repository: ansible.builtin.file:
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 }}" path: "/etc/apt/sources.list.d/download_docker_com_linux_{{ docker_apt_ansible_distribution | lower }}.list"
state: absent 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 # See https://docs.docker.com/engine/install/debian/#uninstall-old-versions
name: Ensure old versions of Docker are not installed. - name: Ensure old versions of Docker are not installed.
package: ansible.builtin.package:
name: "{{ docker_obsolete_packages }}" name: "{{ docker_obsolete_packages }}"
state: absent state: absent
- name: Ensure legacy repo file is not present.
ansible.builtin.file:
path: "/etc/apt/sources.list.d/docker.list"
state: absent
- name: Ensure dependencies are installed. - name: Ensure dependencies are installed.
apt: ansible.builtin.apt:
name: name:
- apt-transport-https - apt-transport-https
- ca-certificates - ca-certificates
- python3-debian
state: present state: present
when: docker_add_repo | bool
- name: Ensure directory exists for /etc/apt/keyrings - name: Add or remove Docker repository.
file: ansible.builtin.deb822_repository:
path: /etc/apt/keyrings name: docker
state: directory types: deb
mode: '0755' uris: "{{ docker_repo_url }}/{{ ansible_distribution | lower }}"
suites: "{{ ansible_distribution_release }}"
components: "{{ docker_apt_release_channel }}"
signed_by: "{{ docker_apt_gpg_key }}"
state: "{{ 'present' if docker_add_repo | bool else 'absent' }}"
notify: apt update
- name: Add Docker apt key. - name: Ensure handlers are notified immediately to update the apt cache.
ansible.builtin.get_url: ansible.builtin.meta: flush_handlers
url: "{{ docker_apt_gpg_key }}"
dest: /etc/apt/keyrings/docker.asc
mode: '0644'
force: false
checksum: "{{ docker_apt_gpg_key_checksum | default(omit) }}"
register: add_repository_key
ignore_errors: "{{ docker_apt_ignore_key_error }}"
when: docker_add_repo | bool
- name: Ensure curl is present (on older systems without SNI).
package: name=curl state=present
when: add_repository_key is failed and docker_add_repo | bool
- name: Add Docker apt key (alternative for older systems without SNI).
shell: >
curl -sSL {{ docker_apt_gpg_key }} | apt-key add -
when: add_repository_key is failed and docker_add_repo | bool
- name: Add Docker repository.
apt_repository:
repo: "{{ docker_apt_repository }}"
state: present
filename: "{{ docker_apt_filename }}"
update_cache: true
when: docker_add_repo | bool

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.

View File

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