
प्रस्तावना
मला नुकतेच Heroku सारख्या "पॉकेट" PaaS बद्दल एक स्पष्ट नाव - Dokku बद्दल कळले. अनुप्रयोगात प्रमाणपत्र आणि बॉक्सच्या बाहेर vhost सहज जोडण्याच्या क्षमतेमुळे मी खूप आकर्षित झालो, म्हणून मी माझ्या डॉकर प्रतिमा Dokku वर हस्तांतरित करण्याचा निर्णय घेतला. हे खरे आहे की, Dokku कडे Heroku सारख्या कमांड्स नाहीत म्हणून मी निराश झालो होतो
dokku container:push
dokku container:release
// Очень было бы удобно, но еще нет :(
एक संघ आहे जे तुम्हाला प्रतिमा उपयोजित करण्यास अनुमती देते, परंतु या क्षणी प्रतिमा स्वतःच होस्टवर असणे आवश्यक आहे. दुसऱ्या शब्दांत, तुम्ही नुकतीच बनवलेली स्थानिक प्रतिमा रोल आउट करण्यासाठी, तुम्ही प्रथम ती होस्टवर कॉपी करणे आवश्यक आहे.
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
---
- 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"
काही_इन्व्हेंटरी
[dokku_hosts]
your.domain.example
स्त्रोत: www.habr.com
