Kodutöö — Ansible paigaldab sinu konteineri¶
Eeldused: 5. nädala lab on tehtud (sinu image on Docker Hubis: <kasutaja>/minu-nginx:v1), N3–N4 Ansible.
Esitamine: sama repo ja haru mis labis (n05-docker), kaust ansible/, sama PR.
Hinne: kodutöö on vabatahtlik boonus. Labi hinne tuleb kontrollidest 1–12 (85 punkti); kontroll „BOONUS 13. Kodutöö“ punkte ei anna ega võta. Tehtud boonus annab laboritahvlil tähe ja XP-d. Punane rist Actionsis tähendab siis ainult, et boonus on tegemata.
Ülesanne¶
Labis käivitasid konteinereid käsitsi (docker run). Päris töös teeb seda automatiseerimine: Ansible valmistab serveri ette ja käivitab konteineri. Nii paned loengu põhimõtte "Ansible haldab serverit, Docker rakendust" praktikasse.
Kirjuta playbook ansible/deploy.yml, mis sinu esimeses VM-is (selles, kus on Docker):
- tagab, et Docker töötab (
service:docker,started,enabled); - paigaldab Pythoni Docker SDK (Ansible'i moodul vajab seda sihtmasinas): kõigepealt
ansible.builtin.dnf→python3-pip, siisansible.builtin.pip→docker; - käivitab sinu Docker Hubi image'i mooduliga
community.docker.docker_container: nimiweb-ansible, image<kasutaja>/minu-nginx:v1, port8085:80,restart_policy: always,state: started.
ansible-galaxy collection install community.docker
cd ansible
ansible-playbook -i inventory.ini deploy.yml
curl <VM-IP>:8085
Käivita playbook teist korda ja salvesta tulemus. Idempotentsus (N3): teisel korral peab olema changed=0.
Tip
community.docker.docker_container on deklaratiivne: sa kirjeldad, milline olek peab olema ("konteiner töötab sellest image'ist"), mitte ei anna käsku. Võrdle sellega: ansible.builtin.command: docker run ... — mis juhtuks teisel käivitusel? (Meenuta labi 5. osa viga!)
Mõtle
Tuleb uus versioon: ehitad v2 ja laadid selle Docker Hubi. Mida muudad playbookis ja mida Ansible siis konteineriga teeb? Kuidas lähed tagasi v1 juurde, kui v2 on katki?
Repo¶
PR uueneb automaatselt. Kirjuta PR-i kirjeldusse 2–3 lauset: miks kasutasid docker_container-it, mitte command: docker run-i.
Enesekontroll¶
-
ansible-playbook --syntax-checkläbib - Playbook kasutab
community.docker.docker_containerja sinu Docker Hubi image'i konkreetse tag'iga -
curl <VM-IP>:8085näitab sinu lehte - Teisel käivitusel on
changed=0
Veaotsing¶
| Probleem | Lahendus |
|---|---|
couldn't resolve module/action 'community.docker.docker_container' |
ansible-galaxy collection install community.docker |
Failed to import the required Python library (Docker SDK for Python) |
Samm 2: moodul pip, name: docker sihtmasinas |
permission denied ... docker.sock |
Lisa playbooki become: true |
port is already allocated |
Port 8085 on juba kasutusel — vaata docker ps ja vali teine port |
Teisel korral changed=1 |
Kas kasutad command-i? Või on tag latest? |