Docker Image'i juurutamine Dokku abil Ansible'iga

Docker Image'i juurutamine Dokku abil Ansible'iga

Proloog

Hiljuti kuulsin "taskukohasest" PaaS-ist, mis sarnaneb Herokule ja millel on üsna öeldav nimi – Dokku. Mind köitis võimalus rakendusele ja vhostile lihtne sertifikaadi lisamine otse tarneprotsessist, seetõttu otsustasin oma Docker-pildid Dokku peale üle kolida. Kahjuks pettusin selles, et Dokkus ei ole Heroku sarnaseid käske.

dokku container:push
dokku container:release
// See oleks tõesti mugav, aga praegu ei ole :(

On olemas käsk tags mis võimaldab pilte deploida, kuid see image peab olema sel hetkel juba hostis. Teisisõnu, et väljastada just loodud kohalik image, tuleb see esmalt hostile kopeerida.

tags:create                          # Lisa silt viimasele käivitatud rakenduse pildile
tags:deploy                          # Deploida sildistatud rakenduse pilt
tags:destroy                         # Eemalda rakenduse pildi silt

Olen tuttav Ansible'iga ja isegi loonud selle abil lihtsaid torujuhtmeid tagumise teenuse tarnimiseks, seega oli valik lihtne. Üks võimalus oleks olnud kirjutada Dokku jaoks plugin, aga mitte praegu.

Playbook

See playbook arhiveerib mingi kohaliku image, kopeerib selle hosti, taastab ja deploida selle Dokku. Panin üles Gitlabi varasse. Parendamiseks on veel palju võimalusi.

push-image.dokku.yml

push-image.dokku.yml

---
  - name: "DEPOLEERI RAKENDUS '{{ appname }}' DOKKUS"
    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 }}' dokkusse üles 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 - Taastamise image"
        debug:
          var: restore.stdout_lines

      - name: "Teha sildistamine '{{ dokku_image }}'"
        shell:
          cmd: docker tag "{{ image }}" "{{ dokku_image }}"

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

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

      - name: "Logi - Väljastamine"
        debug:
          var: release.stdout_lines  

eeldatakse, et Ansible on kohaliku masina peal ja Dokku on hostis juba installitud

Kasuta 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 hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster