From a7b12f0b324ca783400d9741c878fc034aa31170 Mon Sep 17 00:00:00 2001 From: James Turland Date: Thu, 2 May 2024 13:37:53 +0100 Subject: [PATCH] docker --- .../Playbooks/Docker-Portainer/inventory.yaml | 8 ++++ .../Playbooks/Docker-Portainer/playbook.yaml | 7 ++++ .../roles/docker_install/handlers/main.yaml | 5 +++ .../roles/docker_install/tasks/main.yaml | 41 +++++++++++++++++++ .../templates/docker_daemon.json.j2 | 3 ++ .../roles/docker_install/vars/main.yaml | 5 +++ .../roles/portainer_deploy/handlers/main.yaml | 6 +++ .../roles/portainer_deploy/tasks/main.yaml | 34 +++++++++++++++ .../templates/docker_compose.yaml.j2 | 13 ++++++ .../roles/portainer_deploy/vars/main.yaml | 2 + 10 files changed, 124 insertions(+) create mode 100644 Ansible/Playbooks/Docker-Portainer/inventory.yaml create mode 100644 Ansible/Playbooks/Docker-Portainer/playbook.yaml create mode 100644 Ansible/Playbooks/Docker-Portainer/roles/docker_install/handlers/main.yaml create mode 100644 Ansible/Playbooks/Docker-Portainer/roles/docker_install/tasks/main.yaml create mode 100644 Ansible/Playbooks/Docker-Portainer/roles/docker_install/templates/docker_daemon.json.j2 create mode 100644 Ansible/Playbooks/Docker-Portainer/roles/docker_install/vars/main.yaml create mode 100644 Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/handlers/main.yaml create mode 100644 Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/tasks/main.yaml create mode 100644 Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/templates/docker_compose.yaml.j2 create mode 100644 Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/vars/main.yaml diff --git a/Ansible/Playbooks/Docker-Portainer/inventory.yaml b/Ansible/Playbooks/Docker-Portainer/inventory.yaml new file mode 100644 index 0000000..80c494d --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/inventory.yaml @@ -0,0 +1,8 @@ +--- +docker: + hosts: + docker01: + ansible_host: 192.168.200.222 + ansible_user: 'ubuntu' + ansible_become: true + ansible_become_method: sudo diff --git a/Ansible/Playbooks/Docker-Portainer/playbook.yaml b/Ansible/Playbooks/Docker-Portainer/playbook.yaml new file mode 100644 index 0000000..6609da0 --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/playbook.yaml @@ -0,0 +1,7 @@ +--- +- name: Install Docker on Ubuntu + hosts: all + become: true + roles: + - docker_install + - portainer_deploy diff --git a/Ansible/Playbooks/Docker-Portainer/roles/docker_install/handlers/main.yaml b/Ansible/Playbooks/Docker-Portainer/roles/docker_install/handlers/main.yaml new file mode 100644 index 0000000..303ef11 --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/roles/docker_install/handlers/main.yaml @@ -0,0 +1,5 @@ +--- +- name: Restart Docker + ansible.builtin.systemd: + name: docker + state: restarted diff --git a/Ansible/Playbooks/Docker-Portainer/roles/docker_install/tasks/main.yaml b/Ansible/Playbooks/Docker-Portainer/roles/docker_install/tasks/main.yaml new file mode 100644 index 0000000..a8cc071 --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/roles/docker_install/tasks/main.yaml @@ -0,0 +1,41 @@ +--- +- name: Ensure apt is using HTTPS + ansible.builtin.apt: + name: "{{ item }}" + state: present + loop: + - apt-transport-https + - ca-certificates + - curl + - software-properties-common + +- name: Add Docker GPG key + ansible.builtin.apt_key: + url: "https://download.docker.com/linux/ubuntu/gpg" + state: present + +- name: Add Docker repository + ansible.builtin.apt_repository: + repo: "{{ docker_apt_repository }}" + state: present + +- name: Install Docker CE + ansible.builtin.apt: + name: docker-ce + state: present + update_cache: true + +- name: Configure Docker daemon options + ansible.builtin.template: + src: "templates/docker_daemon.json.j2" + dest: "/etc/docker/daemon.json" + owner: 'root' + group: 'root' + mode: '0755' # Optional file permissions + notify: Restart Docker + +- name: Ensure Docker service is enabled and running + ansible.builtin.systemd: + name: docker + enabled: true + state: started diff --git a/Ansible/Playbooks/Docker-Portainer/roles/docker_install/templates/docker_daemon.json.j2 b/Ansible/Playbooks/Docker-Portainer/roles/docker_install/templates/docker_daemon.json.j2 new file mode 100644 index 0000000..7858f8e --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/roles/docker_install/templates/docker_daemon.json.j2 @@ -0,0 +1,3 @@ +{ + "storage-driver": "{{ docker_daemon_options['storage-driver'] }}" +} diff --git a/Ansible/Playbooks/Docker-Portainer/roles/docker_install/vars/main.yaml b/Ansible/Playbooks/Docker-Portainer/roles/docker_install/vars/main.yaml new file mode 100644 index 0000000..5105d78 --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/roles/docker_install/vars/main.yaml @@ -0,0 +1,5 @@ +--- +docker_apt_release_channel: "stable" +docker_apt_repository: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable" +docker_daemon_options: + storage-driver: "overlay2" diff --git a/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/handlers/main.yaml b/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/handlers/main.yaml new file mode 100644 index 0000000..c2c1aae --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/handlers/main.yaml @@ -0,0 +1,6 @@ +--- +- name: Start Portainer + community.docker.docker_compose: + project_src: /home/ubuntu/docker-compose/portainer + state: present + restarted: true diff --git a/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/tasks/main.yaml b/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/tasks/main.yaml new file mode 100644 index 0000000..483ebae --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/tasks/main.yaml @@ -0,0 +1,34 @@ +--- +- name: Ensure docker-compose is installed + ansible.builtin.package: + name: docker-compose + state: present + +- name: Ensure Docker service is running + ansible.builtin.service: + name: docker + state: started + enabled: true + +- name: Setup Portainer directory + ansible.builtin.file: + path: /home/ubuntu/docker-compose/portainer + state: directory + mode: '0755' # Optional file permissions + owner: ubuntu # Optional ownership + group: ubuntu # Optional group ownership + +- name: Deploy Portainer using Docker Compose + ansible.builtin.template: + src: "templates/docker_compose.yaml.j2" + dest: "/home/ubuntu/docker-compose/portainer/docker-compose.yaml" + mode: '0755' # Optional file permissions + owner: ubuntu # Optional ownership + group: ubuntu # Optional group ownership + notify: + - Start Portainer + +- name: Run Portainer docker-compose up + community.docker.docker_compose: + project_src: /home/ubuntu/docker-compose/portainer + state: present diff --git a/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/templates/docker_compose.yaml.j2 b/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/templates/docker_compose.yaml.j2 new file mode 100644 index 0000000..00a105f --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/templates/docker_compose.yaml.j2 @@ -0,0 +1,13 @@ +version: '3.3' +services: + portainer: + image: portainer/portainer-ce:{{ portainer_version }} + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - portainer_data:/data + ports: + - "9000:9000" + restart: always + +volumes: + portainer_data: diff --git a/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/vars/main.yaml b/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/vars/main.yaml new file mode 100644 index 0000000..204bbe2 --- /dev/null +++ b/Ansible/Playbooks/Docker-Portainer/roles/portainer_deploy/vars/main.yaml @@ -0,0 +1,2 @@ +--- +portainer_version: "latest"