Sambaza Picha ya Docker kwa Dokku kwa kutumia Ansible

Sambaza Picha ya Docker kwa Dokku kwa kutumia Ansible

Dibaji

Hivi majuzi nilijifunza juu ya PaaS "ya ukubwa wa mfukoni" sawa na Heroku iliyo na jina dhahiri Dokku. Nilivutiwa sana na uwezo wa kuongeza cheti kwa urahisi kwa programu na vhost nje ya boksi, kwa hivyo niliamua kuhamishia picha zangu za Docker hadi Dokku. Walakini, nilikatishwa tamaa kuwa Dokku haina amri kama za Heroku.

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

Kuna timu tags ambayo hukuruhusu kupeleka picha, lakini picha yenyewe lazima iwe tayari kwenye mwenyeji wakati huo. Kwa maneno mengine, ili kupeleka picha mpya iliyoundwa ndani, kwanza unahitaji kuinakili kwa mwenyeji.

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

Ninaifahamu Ansible na hata nimeunda mabomba rahisi ya uwasilishaji nayo, kwa hivyo chaguo lilikuwa rahisi. Ningeweza kwenda kwa shida ya kuandika programu-jalizi ya dokku, lakini hapana, sio sasa.

Kitabu cha kucheza

Kitabu hiki cha kucheza huweka picha ya ndani kwenye kumbukumbu, kuinakili kwa seva pangishi, kuirejesha, na kuituma kwa Dokku. Nimeichapisha kwa repo langu la Gitlab. Bado kuna nafasi nyingi za kuboresha.

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  

Inachukuliwa kuwa Ansible tayari imewekwa kwenye mashine ya ndani na Dokku tayari imewekwa kwenye jeshi.

Itumie hivi

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

baadhi_hesabu

[dokku_hosts]
your.domain.example

Chanzo: mapenzi.com

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS 🔥 Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster