با استفاده از Ansible، Docker Image را در Dokku قرار دهید

با استفاده از Ansible، Docker Image را در Dokku قرار دهید

پیش نویس

من اخیراً در مورد یک PaaS "جیبی" مشابه Heroku با نام نسبتاً واضح - Dokku یاد گرفتم. توانایی اضافه کردن آسان گواهی به برنامه و vhost خارج از جعبه بسیار جذب من شد، بنابراین تصمیم گرفتم تصاویر docker خود را به Dokku منتقل کنم. درست است، من ناامید شدم که Dokku دستورات مشابه Heroku را ندارد

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

یک تیم وجود دارد tags که به شما امکان می دهد تصاویر را مستقر کنید، اما خود تصویر باید در حال حاضر روی میزبان باشد. به عبارت دیگر، برای پخش تصویر محلی که به تازگی ساخته اید، ابتدا باید آن را در هاست کپی کنید.

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

من با Ansible آشنا هستم و حتی خطوط لوله تحویل باطن ساده را با آن ایجاد کرده ام، بنابراین انتخاب آسان بود. البته میتونستم ازش خسته بشم و یه افزونه برای dokku بنویسم ولی نه الان نه.

دفترچه یادداشت

این کتاب بازی یک تصویر محلی را بایگانی می کند، آن را در میزبان کپی می کند، آن را بازیابی و در dokku مستقر می کند. ارسال شده در مخزن Gitlab. هنوز جای زیادی برای پیشرفت وجود دارد.

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  

فرض بر این است که ansible از قبل روی ماشین محلی و dokku روی هاست نصب شده است

اینجوری استفاده کن

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

some_inventory

[dokku_hosts]
your.domain.example

منبع: www.habr.com

خرید هاست قابل اعتماد برای سایت های دارای حفاظت DDoS، سرورهای VPS VDS 🔥 خرید هاستینگ معتبر با محافظت در برابر حملات DDoS، سرورهای VPS و VDS | ProHoster