Docker Kép Telepítése Dokku Segítségével Ansible

Docker Kép Telepítése Dokku Segítségével Ansible

Prológus

Nemrégiben hallottam a Herokura hasonlító "zsebes" PaaS-ról, amelynek neve Dokku. Nagyon vonzott a lehetőség, hogy egyszerűen adhassak hozzá tanúsítványt az alkalmazáshoz és a vhost-hoz, ezért úgy döntöttem, hogy áthelyezem a docker képeimet a Dokku-ra. Azonban csalódott voltam, hogy a Dokku-ban nincsenek Heroku-hoz hasonló parancsok.

dokku container:push
dokku container:release
// Nagyon kényelmes lenne, de még nincs :(

Van egy parancs címkék amely lehetővé teszi a képek telepítését, de a képnek már a gazdagépen kell lennie ebben a pillanatban. Más szavakkal, ahhoz, hogy a friss, helyben készített képet fel tudjuk tölteni, először át kell másolni a gazdagépre.

tags:create                          # Címkét ad hozzá a legfrissebb futó alkalmazás képhez
tags:deploy                          # Címkézett alkalmazás kép telepítése
tags:destroy                         # Az alkalmazás kép címkéjének eltávolítása

Ismerem az Ansible-t, és már készítettem egyszerű pipeline-okat a backend kiszolgálásához, így a választás egyszerű volt. Persze írhattam volna egy plugint a dokkuhoz, de nem, nem most.

Playbook

Ez a playbook archivál egy helyi képet, átmásolja a gazdagéphez, visszaállítja, és telepíti a dokku-ban. A Gitlab repómban helyeztem el. Még sok lehetőség van a fejlesztésre.

push-image.dokku.yml

push-image.dokku.yml

---
  - name: "ALKALMAZÁS '{{ appname }}' TELEPÍTÉSE DOKKU-BA"
    hosts: dokku_hosts
    remote_user: root
    gather_facts: false
    vars:
      tarname: "{{ appname }}__{{ image }}.tar"
      upload_dir: "/usr/local/src"
      upload_path: "{{ upload_dir }}/{{ tarname }}"
      apptag: "{{ upload_tag | default('latest') }}"
      dokku_image: "dokku/{{ appname }}:{{ apptag }}"

    tasks:
      - name: "Archíválja a '{{ image }}' képet a feltöltéshez"
        register: env
        delegate_to: localhost
        shell:
          cmd: docker image save -o "./{{ tarname }}" {{ image }}

      - name: "Feltöltés a '{{ image }}' képet a dokku-ra a '{{ inventory_hostname }}' címen"
        register: upload
        copy:
          src: "./{{ tarname }}"
          dest: "{{ upload_path }}"

      - name: "Log - Feltöltési eredmény"
        debug:
          var: upload.dest

      - name: "Visszaállítja a feltöltött docker képet"
        register: restore
        shell:
          cmd: docker image load -i "{{ upload_path }}"

      - name: "Log - Kép visszaállítása"
        debug:
          var: restore.stdout_lines

      - name: "Címkézze a képet '{{ dokku_image }}'-ra"
        shell:
          cmd: docker tag "{{ image }}" "{{ dokku_image }}"

      - name: "Hozzon létre dokku címkét a '{{ dokku_image }}'-nek"
        shell:
          cmd: dokku tags:create "{{ appname }}" "{{ apptag }}"

      - name: "Kiadja a '{{ appname }}' alkalmazást"
        register: release
        shell:
          cmd: dokku tags:deploy "{{ appname }}" "{{ apptag }}"

      - name: "Log - Kiadás"
        debug:
          var: release.stdout_lines  

Tételezzük fel, hogy az ansible már telepítve van a helyi gépen és a dokku a gazdagépen.

Úgy használható, hogy

ansible-playbook push-image.dokku.yml -i some_inventory -e "appname=DOKKU_APP_NAME image=DOCKER_IMAGE"

some_inventory

[dokku_hosts]
your.domain.example

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster