Implementer Docker Image til Dokku ved hjælp af Ansible

Implementer Docker Image til Dokku ved hjælp af Ansible

prolog

Jeg har for nylig lært om en "lomme" PaaS, der ligner Heroku med et ret åbenlyst navn - Dokku. Jeg var meget tiltrukket af evnen til nemt at tilføje et certifikat til applikationen og vhost ud af kassen, så jeg besluttede at overføre mine docker-billeder til Dokku. Sandt nok var jeg skuffet over, at Dokku ikke har kommandoer, der ligner Heroku

dokku container:push
dokku container:release
// Очень было бы удобно, но еще нет :(

Der er et hold tags som giver dig mulighed for at implementere billeder, men selve billedet skal allerede være på værten i dette øjeblik. Med andre ord, for at udrulle det lokale billede, du lige har lavet, skal du først kopiere det til værten.

tags:create <app> <tag>                        # Add tag to latest running app image
tags:deploy <app> <tag>                        # Deploy tagged app image
tags:destroy <app> <tag>                       # Remove app image tag

Jeg er bekendt med Ansible og har endda lavet simple backend-leveringspipelines med det, så valget var nemt. Selvfølgelig kunne jeg godt blive træt af det og skrive et plugin til dokku, men nej, ikke nu.

Playbook

Denne afspilningsbog arkiverer et lokalt billede, kopierer det til værten, gendanner og implementerer det til dokku. Udgivet i Gitlab repo. Der er stadig masser af plads til forbedringer.

push-image.dokku.yml

push-image.dokku.yml

---
  - name: "DEPLOY APP '{{ appname }}' TO DOKKU"
    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: "Archive '{{ image }}' to upload"
        register: env
        delegate_to: localhost
        shell: 
          cmd: docker image save -o "./{{ tarname }}" {{ image }}

      - name: "Upload image '{{ image }}' to dokku at '{{ inventory_hostname }}'"
        register: upload
        copy:
          src: "./{{ tarname }}"
          dest: "{{ upload_path }}"

      - name: "Log - Upload result"
        debug:
          var: upload.dest

      - name: "Restore uploaded docker image"
        register: restore
        shell:
          cmd: docker image load -i "{{ upload_path }}"

      - name: "Log - Restore image"
        debug:
          var: restore.stdout_lines

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

      - name: "Create dokku tag for '{{ dokku_image }}'"
        shell: 
          cmd: dokku tags:create "{{ appname }}" "{{ apptag }}"

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

      - name: "Log - Release"
        debug:
          var: release.stdout_lines  

det antages, at ansible allerede er installeret på den lokale maskine og dokku på værten

Brug sådan her

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

noget_inventar

[dokku_hosts]
your.domain.example

Kilde: www.habr.com

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster