
Proloog
Hiljuti kuulsin "taskukohasest" PaaS-ist, mis sarnaneb Herokule ja millel on üsna öeldav nimi – Dokku. Mind köitis võimalus rakendusele ja vhostile lihtne sertifikaadi lisamine otse tarneprotsessist, seetõttu otsustasin oma Docker-pildid Dokku peale üle kolida. Kahjuks pettusin selles, et Dokkus ei ole Heroku sarnaseid käske.
dokku container:push
dokku container:release
// See oleks tõesti mugav, aga praegu ei ole :(On olemas käsk mis võimaldab pilte deploida, kuid see image peab olema sel hetkel juba hostis. Teisisõnu, et väljastada just loodud kohalik image, tuleb see esmalt hostile kopeerida.
tags:create # Lisa silt viimasele käivitatud rakenduse pildile
tags:deploy # Deploida sildistatud rakenduse pilt
tags:destroy # Eemalda rakenduse pildi siltOlen tuttav Ansible'iga ja isegi loonud selle abil lihtsaid torujuhtmeid tagumise teenuse tarnimiseks, seega oli valik lihtne. Üks võimalus oleks olnud kirjutada Dokku jaoks plugin, aga mitte praegu.
Playbook
See playbook arhiveerib mingi kohaliku image, kopeerib selle hosti, taastab ja deploida selle Dokku. Panin üles Gitlabi varasse. Parendamiseks on veel palju võimalusi.
push-image.dokku.yml
---
- name: "DEPOLEERI RAKENDUS '{{ appname }}' DOKKUS"
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 }}' dokkusse üles 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 - Taastamise image"
debug:
var: restore.stdout_lines
- name: "Teha sildistamine '{{ dokku_image }}'"
shell:
cmd: docker tag "{{ image }}" "{{ dokku_image }}"
- name: "Loo dokku silt '{{ dokku_image }}'"
shell:
cmd: dokku tags:create "{{ appname }}" "{{ apptag }}"
- name: "Väljastage '{{ appname }}'"
register: release
shell:
cmd: dokku tags:deploy "{{ appname }}" "{{ apptag }}"
- name: "Logi - Väljastamine"
debug:
var: release.stdout_lines
eeldatakse, et Ansible on kohaliku masina peal ja Dokku on hostis juba installitud
Kasuta 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
