Dokku Docker Image'i juurutamine Ansible'i abil

Dokku Docker Image'i juurutamine Ansible'i abil

Proloog

Hiljuti kuulsin "taskust" PaaS-st, mis on sarnane Herokule ja mille nimi on selgelt Dokku. Mind köitis võimalus lihtsasti lisada rakendusele ja vhost'ile sertifikaate otse välja, seetõttu otsustasin oma docker'i pildid Dokku'le üle kanda. Kahjuks olin pettunud, et Dokku-l puuduvad sarnased käsud nagu Herokul.

dokku container:push
dokku container:release
// See oleks väga mugav, kuid hetkel seda pole :(

Eksisteerib käsk tags mis võimaldab pilte juurutada, kuid pilt peab sel hetkel olema juba hostis. Teisisõnu, et kasutada just loodud kohalikku imaget, tuleb see esmalt hostile kopeerida.

tags:create <app> <tag>                        # Lisa silt viimasele käivitunud rakenduse pildile
tags:deploy <app> <tag>                        # Juurutage märgistatud rakenduse pilt
tags:destroy <app> <tag>                       # Eemalda rakenduse pildi silt

Olen tuttav Ansible'iga ja olen isegi loonud sellega lihtsaid torujuhtmeid tagaosa toimetamiseks, seetõttu oli valik selge. Loomulikult võiksin kirjutada plugina Dokku jaoks, aga mitte praegu.

Playbook

See playbook arhiveerib kohaliku pildi, kopeerib selle hostile, taastab ja juurutab selle Dokku's. Olen selle leidnud Gitlabis. Parendamisvõimalusi on veel palju.

push-image.dokku.yml

push-image.dokku.yml

---
  - name: "DEPLANEERI RAKENDUS '{{ appname }}' DOKKU-sse"
    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: "Arhiveeri '{{ image }}' üleslaadimiseks"
        register: env
        delegate_to: localhost
        shell: 
          cmd: docker image save -o "./{{ tarname }}" {{ image }}

      - name: "Laadi image '{{ image }}' dokku-sse aadressil '{{ inventory_hostname }}'"
        register: upload
        copy:
          src: "./{{ tarname }}"
          dest: "{{ upload_path }}"

      - name: "Logi - Üleslaadimise tulemus"
        debug:
          var: upload.dest

      - name: "Taasta üleslaaditud docker image"
        register: restore
        shell:
          cmd: docker image load -i "{{ upload_path }}"

      - name: "Logi - Taasta image"
        debug:
          var: restore.stdout_lines

      - name: "Retag'i image '{{ dokku_image }}'"
        shell: 
          cmd: docker tag "{{ image }}" "{{ dokku_image }}"

      - name: "Loo dokku silt '{{ dokku_image }}' jaoks"
        shell: 
          cmd: dokku tags:create "{{ appname }}" "{{ apptag }}"

      - name: "Käivita '{{ appname }}'"
        register: release
        shell: 
          cmd: dokku tags:deploy "{{ appname }}" "{{ apptag }}"  

      - name: "Logi - Käivitamine"
        debug:
          var: release.stdout_lines  

eeldatakse, et ansible on kohalikul masinal ja dokku on juba serveris installitud

Kasutage nii

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

some_inventory

[dokku_hosts]
your.domain.example

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster