
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ë 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ë aplikacionitUnë 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
---
- 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.exampleBurimi: habr.com
