Deploy Docker Image në Dokku me ndihmën e Ansible

Deploy Docker Image në Dokku me ndihmën e Ansible

Prologu

SĂ« fundmi, mĂ«sova pĂ«r njĂ« PaaS "tĂ« dukshĂ«m" tĂ« ngjashĂ«m me Heroku, me njĂ« emĂ«r tĂ« qartĂ« — Dokku. MĂ« tĂ«rhoqi mundĂ«sia pĂ«r tĂ« shtuar lehtĂ«sisht njĂ« certifikatĂ« nĂ« aplikacion dhe vhost nga kutia, prandaj vendosa ta transferoj imazhet e mia docker nĂ« Dokku. MegjithatĂ«, isha i zhgĂ«njyer qĂ« nĂ« Dokku nuk ka komanda si ato tĂ« Heroku.

dokku container:push
dokku container:release
// Do të ishte shumë e përshtatshme, por akoma nuk është :(

Ekziston një komandë : ngarkesë. Mund të përdoren etika të tjera kuptimplote. Ato caktohen e cila lejon të përcaktohen imazhet, por vetë imazhi duhet të jetë tashmë në host në atë moment. Në fjalë të tjera, për të distribuuar një imazh lokal të sapo krijuar, duhet fillimisht ta kopjoni në host.

tags:create                          # Shtoni një tag në imazhin më të fundit të aplikacionit
tags:deploy                          # Distribuoni imazhin e etiketuar të aplikacionit
tags:destroy                         # Fshini etiketën e imazhit të aplikacionit

Unë kam njohuri për Ansible dhe madje kam krijuar me të linja të thjeshta për dorëzimin e backend-it, prandaj zgjedhja ishte e thjeshtë. Sigurisht, mund të merresha me hartimin e një plugins për dokku, por jo, jo tani.

Playbook

Ky playbook arkivon një imazh lokal, e kopjon në host, e rikthen dhe e distribuon në dokku. E kam postuar në një repo GitLab. Ka ende shumë mundësi për përmirësime.

push-image.dokku.yml

push-image.dokku.yml

---
  - name: "DISTRIBUO APLIKACIONIN '{{ appname }}' NË 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: "Arkivo '{{ image }}' për ngarkim"
        register: env
        delegate_to: localhost
        shell: 
          cmd: docker image save -o "./{{ tarname }}" {{ image }}

      - name: "Ngarko imazhin '{{ image }}' në dokku në '{{ inventory_hostname }}'"
        register: upload
        copy:
          src: "./{{ tarname }}"
          dest: "{{ upload_path }}"

      - name: "Log - Rezultati i ngarkimit"
        debug:
          var: upload.dest

      - name: "Restauro imazhin docker të ngarkuar"
        register: restore
        shell:
          cmd: docker image load -i "{{ upload_path }}"

      - name: "Log - Restauro imazhin"
        debug:
          var: restore.stdout_lines

      - name: "Retag imazhin në '{{ dokku_image }}'"
        shell:
          cmd: docker tag "{{ image }}" "{{ dokku_image }}"

      - name: "Krijo etiketa dokku për '{{ dokku_image }}'"
        shell:
          cmd: dokku tags:create "{{ appname }}" "{{ apptag }}"

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

      - name: "Log - Lëshimi"
        debug:
          var: release.stdout_lines  

supozimi është që ansible është tashmë i instaluar në makinën lokale dhe dokku në host

Përdorni kështu

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

some_inventory

[dokku_hosts]
your.domain.example

Burimi: habr.com

Bleni hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera đŸ”„ Bli hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera | ProHoster