#- name: Check if docker is already installed # stat: # path: /usr/bin/docker # register: docker_file - name: Install Packages # when: docker_file.stat.exists == False package: name: - gpg - gpg-agent - python3-debian tags: docker_repo - name: Create apt keyrings directory file: path: /etc/apt/keyrings state: directory mode: "0755" tags: docker_repo - name: Add docker-key get_url: url: "https://download.docker.com/linux/{{ ansible_facts.distribution | lower }}/gpg" dest: /etc/apt/keyrings/docker.asc mode: "0644" tags: docker_repo - name: Remove one-line docker-repository file: path: /etc/apt/sources.list.d/docker.list state: absent tags: docker_repo - name: Add docker-repository deb822_repository: name: docker types: deb uris: "https://download.docker.com/linux/{{ ansible_facts.distribution | lower }}" suites: "{{ ansible_facts.distribution_release }}" components: stable signed_by: /etc/apt/keyrings/docker.asc register: docker_repo tags: docker_repo - name: Update apt cache after docker-repository change apt: update_cache: yes when: docker_repo.changed tags: docker_repo - name: Install docker package: name: - docker-ce - docker-ce-cli - containerd.io - docker-compose-plugin - pass state: latest - name: Read daemon.json ansible.builtin.slurp: path: /etc/docker/daemon.json register: docker_daemon_json failed_when: false tags: docker_daemon - name: Merge daemon options into daemon.json vars: docker_daemon_current: "{{ (docker_daemon_json.content | b64decode | from_json) if docker_daemon_json.content is defined else {} }}" docker_daemon_merged: "{{ docker_daemon_current | combine(docker.daemon) }}" ansible.builtin.copy: content: "{{ docker_daemon_merged | to_nice_json(indent=4, sort_keys=False) }}\n" dest: /etc/docker/daemon.json owner: root group: root mode: "0644" validate: dockerd --validate --config-file=%s # Rewritten only on a value change, so hand-written formatting survives otherwise. when: docker_daemon_merged != docker_daemon_current notify: reload_docker tags: docker_daemon - name: Deploy docker-compose command to new docker compose plugin ansible.builtin.copy: src: docker-compose dest: "/usr/local/bin/docker-compose" mode: "0755" - name: Check for docker binary ansible.builtin.stat: path: /usr/bin/docker register: docker_binary tags: docker_prune - name: Deploy docker-prune script ansible.builtin.copy: src: docker-prune dest: /usr/local/sbin/docker-prune owner: root group: root mode: "0755" when: docker_binary.stat.exists tags: docker_prune - name: Schedule hourly docker-prune ansible.builtin.cron: name: docker prune cron_file: docker-prune user: root minute: "0" job: /usr/local/sbin/docker-prune when: docker_binary.stat.exists tags: docker_prune