Hassle-free docker installations with Ansible on Ubuntu 22.04
Tags: ansible, devops, ubuntu, docker
Published: 2023-11-11 22:41:25

🚀 **Automating Docker CE Installation on Ubuntu with Ansible** 🚀

Greetings DEV community! 👋 I wanted to share a quick guide on automating the installation of **Docker CE** across various Ubuntu Linux machines, regardless of their hosting environment (AWS, Azure, etc.).

The versatility of this automated process not only simplifies the installation but also enhances scalability, making it an invaluable resource for system administrators and developers in diverse cloud environments.

## Why Ansible?

![Ansible logo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nv74ehrt1cfvuorwjfi8.png)

**Ansible** is the secret sauce behind this seamless automation. It's a powerful open-source tool designed to simplify complex IT tasks, configuration management, and application deployment. With its agentless architecture and human-readable scripts (written in YAML) called playbooks, Ansible empowers both developers and system administrators.

By automating routine tasks, Ansible boosts operational efficiency, reduces errors, and ensures consistency across systems. Whether it's configuring servers, deploying applications, or managing network devices, Ansible is a game-changer in modern IT environments.

## Simplify with Ansible

While you could manually follow Docker's documentation [here](https://docs.docker.com/engine/install/ubuntu) for installation, things get tricky when managing multiple installations across various inventories. Here's where Ansible shines, simplifying the process and ensuring a smooth setup.

## Bonus: Ansible Semaphore

For those who appreciate a graphical user interface (GUI) to streamline processes and organize playbooks, consider checking out "Ansible Semaphore" at [ansible-semaphore.com](https://www.ansible-semaphore.com). This tool isn't mandatory, but it significantly improves the overall experience. Watch this [video](https://www.youtube.com/watch?v=NyOSoLn5T5U) for more insights.

## TL;DR

Ansible's yaml approach is so readable that I'm just going to dump everything here without breaking it down, so here's a complete version of the Ansible playbook:

```yaml
- name: Install Docker (including compose)
  hosts: all
  become: true

  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes

    - name: Install dependencies via apt
      apt:
        name:
          - ca-certificates
          - curl
          - gnupg

    - name: Add Docker's official GPG key
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present

    - name: Add Docker's APT repository
      apt_repository:
        repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_lsb.codename }} stable
        state: present
    
    - name: Update apt cache
      apt:
        update_cache: yes

    - name: Install Docker
      apt:
        name: 
          - docker-ce
          - docker-ce-cli
          - containerd.io
          - docker-buildx-plugin
          - docker-compose-plugin
        state: present

    - name: Add user to Docker group
      user:
        name: root # Please use another user, not root :-)
        append: yes
        groups: docker
```

## Conclusion

Thanks for reading! Feel free to reach out to me for any questions or just have a chat. 🚀 #DevOps #Automation #Docker #Ansible