
Proloog
Hiljuti kuulsin "taskust" PaaS-st, mis on sarnane Herokule ja mille nimi on selgelt Dokku. Mind köitis võimalus lihtsasti lisada rakendusele ja vhost'ile sertifikaate otse välja, seetõttu otsustasin oma docker'i pildid Dokku'le üle kanda. Kahjuks olin pettunud, et Dokku-l puuduvad sarnased käsud nagu Herokul.
dokku container:push
dokku container:release
// See oleks väga mugav, kuid hetkel seda pole :(Eksisteerib käsk mis võimaldab pilte juurutada, kuid pilt peab sel hetkel olema juba hostis. Teisisõnu, et kasutada just loodud kohalikku imaget, tuleb see esmalt hostile kopeerida.
tags:create <app> <tag> # Lisa silt viimasele käivitunud rakenduse pildile
tags:deploy <app> <tag> # Juurutage märgistatud rakenduse pilt
tags:destroy <app> <tag> # Eemalda rakenduse pildi siltOlen tuttav Ansible'iga ja olen isegi loonud sellega lihtsaid torujuhtmeid tagaosa toimetamiseks, seetõttu oli valik selge. Loomulikult võiksin kirjutada plugina Dokku jaoks, aga mitte praegu.
Playbook
See playbook arhiveerib kohaliku pildi, kopeerib selle hostile, taastab ja juurutab selle Dokku's. Olen selle leidnud Gitlabis. Parendamisvõimalusi on veel palju.
push-image.dokku.yml
---
- name: "DEPLANEERI RAKENDUS '{{ appname }}' DOKKU-sse"
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: "Arhiveeri '{{ image }}' üleslaadimiseks"
register: env
delegate_to: localhost
shell:
cmd: docker image save -o "./{{ tarname }}" {{ image }}
- name: "Laadi image '{{ image }}' dokku-sse aadressil '{{ inventory_hostname }}'"
register: upload
copy:
src: "./{{ tarname }}"
dest: "{{ upload_path }}"
- name: "Logi - Üleslaadimise tulemus"
debug:
var: upload.dest
- name: "Taasta üleslaaditud docker image"
register: restore
shell:
cmd: docker image load -i "{{ upload_path }}"
- name: "Logi - Taasta image"
debug:
var: restore.stdout_lines
- name: "Retag'i image '{{ dokku_image }}'"
shell:
cmd: docker tag "{{ image }}" "{{ dokku_image }}"
- name: "Loo dokku silt '{{ dokku_image }}' jaoks"
shell:
cmd: dokku tags:create "{{ appname }}" "{{ apptag }}"
- name: "Käivita '{{ appname }}'"
register: release
shell:
cmd: dokku tags:deploy "{{ appname }}" "{{ apptag }}"
- name: "Logi - Käivitamine"
debug:
var: release.stdout_lines
eeldatakse, et ansible on kohalikul masinal ja dokku on juba serveris installitud
Kasutage nii
ansible-playbook push-image.dokku.yml -i some_inventory -e "appname=DOKKU_APP_NAME image=DOCKER_IMAGE"some_inventory
[dokku_hosts]
your.domain.exampleAllikas: habr.com
