D2.1 Docker Installation Deep Dive 🔧
Γιατί Official Method;
┌─────────────────────────────────────────────────────────┐
│ apt install docker.io ← OS packages │
│ ❌ Παλιά έκδοση │
│ ❌ Δεν έχει docker compose plugin │
│ ❌ Δεν έχει buildx │
├─────────────────────────────────────────────────────────┤
│ Official Docker Repository ← Συνιστάται ✅ │
│ ✅ Πάντα τελευταία έκδοση │
│ ✅ docker compose plugin included │
│ ✅ docker buildx included │
│ ✅ Επίσημη υποστήριξη │
└─────────────────────────────────────────────────────────┘
🔴 Debian/Ubuntu — Official Method
Χειροκίνητα (για κατανόηση):
# Βήμα 1: Prerequisites
sudo apt install -y ca-certificates curl gnupg lsb-release
# Βήμα 2: GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Βήμα 3: Repository
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
# Βήμα 4: Install
sudo apt update
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
Με Ansible (αυτοματοποιημένο):
# roles/docker/tasks/install_debian.yml
---
# ============================================================
# Docker Installation — Debian/Ubuntu
# Official repository method
# ============================================================
# ── Βήμα 1: Prerequisites ─────────────────────
- name: Install prerequisites (Debian)
ansible.builtin.apt:
name:
- ca-certificates
- curl
- gnupg
- lsb-release
- apt-transport-https
state: present
update_cache: true
# ── Βήμα 2: GPG Key ───────────────────────────
- name: Create keyrings directory
ansible.builtin.file:
path: /etc/apt/keyrings
state: directory
mode: '0755'
- name: Add Docker GPG key (Debian)
ansible.builtin.apt_key:
url: >-
https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg
keyring: /etc/apt/keyrings/docker.gpg
state: present
when: ansible_facts['distribution'] in ['Debian', 'Ubuntu']
# ── Βήμα 3: Repository ────────────────────────
- name: Add Docker repository (Debian)
ansible.builtin.apt_repository:
repo: >-
deb [arch={{ _docker_arch }}
signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}
{{ ansible_facts['distribution_release'] }}
stable
state: present
filename: docker
vars:
_docker_arch: >-
{{ 'amd64' if ansible_facts['architecture'] == 'x86_64'
else 'arm64' if ansible_facts['architecture'] == 'aarch64'
else 'armhf' }}
when: ansible_facts['distribution'] in ['Debian', 'Ubuntu']
# ── Βήμα 4: Remove old versions ───────────────
- name: Remove old Docker versions (Debian)
ansible.builtin.apt:
name:
- docker
- docker-engine
- docker.io
- containerd
- runc
state: absent
ignore_errors: true
# ── Βήμα 5: Install Docker ────────────────────
- name: Install Docker CE (Debian)
ansible.builtin.apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: present
update_cache: true
notify: Restart Docker
🟠 RedHat/Fedora — Official Method
Χειροκίνητα (για κατανόηση):
# Βήμα 1: Remove old versions
sudo dnf remove docker docker-client docker-client-latest \
docker-common docker-latest docker-latest-logrotate \
docker-logrotate docker-engine
# Βήμα 2: Add repository
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# Βήμα 3: Install
sudo dnf install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
# Βήμα 4: Start
sudo systemctl enable --now docker
Με Ansible:
# roles/docker/tasks/install_redhat.yml
---
# ============================================================
# Docker Installation — RedHat/Fedora/Rocky/AlmaLinux
# ============================================================
# ── Remove old versions ───────────────────────
- name: Remove old Docker versions (RedHat)
ansible.builtin.dnf:
name:
- docker
- docker-client
- docker-client-latest
- docker-common
- docker-latest
- docker-engine
- podman
- buildah
state: absent
autoremove: true
ignore_errors: true
# ── Add repository ────────────────────────────
- name: Install dnf plugins (RedHat)
ansible.builtin.dnf:
name: dnf-plugins-core
state: present
- name: Add Docker repository (RedHat)
ansible.builtin.yum_repository:
name: docker-ce-stable
description: Docker CE Stable
baseurl: >-
https://download.docker.com/linux/{{
'fedora' if ansible_facts['distribution'] == 'Fedora'
else 'centos' }}/{{ ansible_facts['distribution_major_version'] }}/$basearch/stable
gpgcheck: true
gpgkey: >-
https://download.docker.com/linux/{{
'fedora' if ansible_facts['distribution'] == 'Fedora'
else 'centos' }}/gpg
enabled: true
# ── Install Docker ────────────────────────────
- name: Install Docker CE (RedHat)
ansible.builtin.dnf:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: present
notify: Restart Docker
# ── SELinux configuration ─────────────────────
- name: Configure SELinux for Docker
ansible.builtin.seboolean:
name: container_manage_cgroup
state: true
persistent: true
when:
- ansible_facts['selinux']['status'] == 'enabled'
- ansible_facts['selinux']['mode'] == 'enforcing'
ignore_errors: true
🟢 openSUSE — Official Method
Χειροκίνητα (για κατανόηση):
# Βήμα 1: Add repository
sudo zypper addrepo \
https://download.docker.com/linux/sles/docker-ce.repo
# Βήμα 2: Install
sudo zypper install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin
# Βήμα 3: Start
sudo systemctl enable --now docker
Με Ansible:
# roles/docker/tasks/install_suse.yml
---
# ============================================================
# Docker Installation — openSUSE Leap/Tumbleweed
# ============================================================
# ── Add Docker repository ─────────────────────
- name: Add Docker repository (openSUSE)
community.general.zypper_repository:
name: docker-ce-stable
description: Docker CE Stable
repo: >-
https://download.docker.com/linux/sles/{{ ansible_facts['distribution_major_version'] }}/x86_64/stable
state: present
auto_import_keys: true
when: ansible_facts['architecture'] == 'x86_64'
# ── Εναλλακτικά: openSUSE official packages ───
- name: Install Docker (openSUSE official)
community.general.zypper:
name:
- docker
- docker-compose
- python3-docker
state: present
when: ansible_facts['architecture'] != 'x86_64'
notify: Restart Docker
# ── CE packages αν x86_64 ─────────────────────
- name: Install Docker CE (openSUSE x86_64)
community.general.zypper:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-compose-plugin
state: present
when: ansible_facts['architecture'] == 'x86_64'
notify: Restart Docker
# ── AppArmor profile ──────────────────────────
- name: Enable AppArmor for Docker (openSUSE)
ansible.builtin.service:
name: apparmor
state: started
enabled: true
ignore_errors: true
Ενοποιημένο tasks/install.yml
cat > ~/ansible/roles/docker/tasks/install.yml << 'EOF'
---
# ============================================================
# Docker Installation — Universal Entry Point
# ============================================================
# ── Έλεγχος αν ήδη εγκατεστημένο ─────────────
- name: Check if Docker is already installed
ansible.builtin.command:
cmd: docker --version
register: docker_check
changed_when: false
ignore_errors: true
- name: Show current Docker version
ansible.builtin.debug:
msg: "Docker already installed: {{ docker_check.stdout }}"
when: docker_check.rc == 0
# ── Εγκατάσταση ανά distro ────────────────────
- name: Install Docker on Debian/Ubuntu
ansible.builtin.include_tasks:
file: install_debian.yml
when:
- ansible_facts['os_family'] == "Debian"
- docker_check.rc != 0 or docker_force_install | default(false)
- name: Install Docker on RedHat/Fedora
ansible.builtin.include_tasks:
file: install_redhat.yml
when:
- ansible_facts['os_family'] == "RedHat"
- docker_check.rc != 0 or docker_force_install | default(false)
- name: Install Docker on openSUSE
ansible.builtin.include_tasks:
file: install_suse.yml
when:
- ansible_facts['os_family'] == "Suse"
- docker_check.rc != 0 or docker_force_install | default(false)
# ── Enable & Start Docker ─────────────────────
- name: Enable and start Docker service
ansible.builtin.service:
name: docker
state: started
enabled: true
# ── Install Python Docker SDK ─────────────────
- name: Install Python Docker SDK
ansible.builtin.pip:
name:
- docker
- docker-compose
state: present
ignore_errors: true
# ── Επαλήθευση ────────────────────────────────
- name: Verify Docker installation
ansible.builtin.command:
cmd: docker --version
register: docker_version
changed_when: false
- name: Verify Docker Compose
ansible.builtin.command:
cmd: docker compose version
register: compose_version
changed_when: false
ignore_errors: true
- name: Installation summary
ansible.builtin.debug:
msg:
- "✅ {{ docker_version.stdout }}"
- "✅ {{ compose_version.stdout | default('Docker Compose: check manually') }}"
EOF
Σύγκριση Μεθόδων Εγκατάστασης
┌──────────────────┬───────────────────────────────────────┐
│ Μέθοδος │ Χαρακτηριστικά │
├──────────────────┼───────────────────────────────────────┤
│ OS packages │ ❌ Παλιά έκδοση │
│ (docker.io) │ ❌ Χωρίς compose plugin │
│ │ ✅ Απλή εγκατάσταση │
├──────────────────┼───────────────────────────────────────┤
│ Official repo │ ✅ Πάντα latest │
│ (docker-ce) │ ✅ Compose + buildx included │
│ │ ✅ Official support │
│ │ ⚠️ Πιο σύνθετη εγκατάσταση │
├──────────────────┼───────────────────────────────────────┤
│ geerlingguy role │ ✅ Battle-tested │
│ │ ✅ Multi-distro │
│ │ ✅ Πλήρης configuration │
│ │ ✅ Συνιστάται για production │
└──────────────────┴───────────────────────────────────────┘
Εκτέλεση
# Syntax check
ansible-playbook playbooks/docker-install.yml \
--syntax-check
# Dry run
ansible-playbook playbooks/docker-install.yml \
--check \
--limit nextcloud \
-v
# Εκτέλεση
ansible-playbook playbooks/docker-install.yml \
--limit nextcloud \
-v
# Επαλήθευση
ansible nextcloud \
-m ansible.builtin.command \
-a "docker --version" \
--become
Σύνοψη D2.1
Docker Installation
├── Debian/Ubuntu:
│ ├── Prerequisites (ca-certs, curl, gnupg)
│ ├── GPG key → /etc/apt/keyrings/docker.gpg
│ ├── Repository → /etc/apt/sources.list.d/docker.list
│ └── Packages: docker-ce, cli, containerd, buildx, compose
│
├── RedHat/Fedora:
│ ├── Remove old versions
│ ├── Repository → yum_repository module
│ ├── Packages: docker-ce, cli, containerd, buildx, compose
│ └── SELinux configuration
│
├── openSUSE:
│ ├── Repository → zypper_repository module
│ └── Packages: docker-ce ή docker (official)
│
└── Universal:
├── Enable & start docker service
├── pip install docker (Python SDK)
└── Verify: docker --version