Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dokumentáció #6

Merged
merged 6 commits into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
python -m unittest test_app.py

deploy:
name: Telepítés (CD)
name: Építés (CI)
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
python -m unittest test_app.py

deploy:
name: Telepítés (CD)
name: Építés (CI)
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
python -m unittest test_app.py

deploy:
name: Telepítés (CD)
name: Építés (CI)
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
pytest

deploy:
name: Telepítés (CD)
name: Építés (CI)
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest

Expand Down
21 changes: 21 additions & 0 deletions .github/workflows/pelda.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: CI

on:
push:
branches:
- main
pull_request:
branches:
- "*"

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Egy soros script
run: echo Helló világ!
- name: Töb soros script
run: |
echo "További sorok"
echo "Bármilyen parancsot is futtathatnánk"
2 changes: 2 additions & 0 deletions Kod1/kod1.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Alap Docker példa

Hivatalos Python Docker kép használata: https://hub.docker.com/_/python


1. Indítsunk el egy Python konténert, és futtassunk benne egy Python parancsot.

Expand Down
173 changes: 147 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
# Docker gyakorlati példák

## Tartalomjegyzék

- [Docker alapok](#docker-alapok)
- [Docker Desktop telepítése](#docker-desktop-telepítése)
- [Docker parancsok](#docker-parancsok)
- [Konténer adatainak ellenőrzése, naplózás](#konténer-adatainak-ellenőrzése-naplózás)
- [Konténer indítása, leállítása](#konténer-indítása-leállítása)
- [Konténer hálózatok](#konténer-hálózatok)
- [Docker fájlrendszer](#docker-fájlrendszer)
- [Parancsok futtatása konténerben](#parancsok-futtatása-konténerben)
- [Képek kezelése (letöltés, címkézés)](#képek-kezelése-letöltés-címkézés)
- [Képek létrehozása (docker build)](#képek-létrehozása-docker-build)
- [Docker Compose](#docker-compose)
- [Docker alapú alkalmazás saját képből](#docker-alapú-alkalmazás-saját-képből)
- [Képek tárolása Azure-ban (ACR)](#képek-tárolása-azure-ban-acr)
- [Azure erőforrások létrehozása Docker képből](#azure-erőforrások-létrehozása-docker-képből)
- [DevOps CI/CD pipeline alkalmazása](#devops-cicd-pipeline-alkalmazása)
- [Azure Webalkalmazás létrehozása Docker képből](#azure-webalkalmázás-létrehozása-docker-képből)
- Példák:
- [Kód 1 - Alap python példa](./Kod1/kod1.md)
- [Kód 2 - API példa](./Kod2/README.md)
- [Kód 3 - Docker Compose példa (web + sql)](./Kod3/README.md)
- [Kód 4 - Webalkalmazás példa](./Kod4/README.md)


Képzési anyag a Docker használatához.
Expand All @@ -8,14 +31,14 @@ Képzési anyag a Docker használatához.

A Docker egy innovatív eszköz, amely segít a fejlesztőknek és rendszergazdáknak az alkalmazások gyors kifejlesztésében, telepítésében és skálázásában konténerizált környezetben. Konténerek segítségével a Docker lehetővé teszi az alkalmazások csomagolását és futtatását izolált környezetben, ami nagyban hozzájárul a platformok közötti kompatibilitáshoz és az infrastruktúra hatékonyságának növeléséhez.

### Miért Docker?
- **Miért Docker?**

- **Konzisztencia**: A Docker garantálja, hogy az alkalmazás ugyanúgy fut minden környezetben, legyen szó fejlesztői gépről vagy termelési környezetről.
- **Izoláció**: Minden konténer izoláltan működik, így a szoftverek kölcsönös zavarása nélkül futtathatók.
- **Biztonság**: Az izoláció révén a Docker javítja az alkalmazások biztonságát, mivel a konténerek korlátozzák a hozzáférést és erőforrás-használatot.
- **Skálázhatóság és menedzsment**: A Docker lehetővé teszi az alkalmazások könnyű skálázását és kezelését, ami ideálissá teszi őket mikroszolgáltatások architektúrájában.

### Alapvető fogalmak
- **Alapvető fogalmak**

- **Docker képfájlok**: A Docker képek a szoftvercsomagok állóképei, amelyek tartalmazzák az alkalmazások futtatásához szükséges minden fájlt és könyvtárat.
- **Konténerek**: Az indított Docker képekből létrehozott futtatható példányok, amelyek tartalmazzák az alkalmazást és annak futtatásához szükséges környezetet.
Expand Down Expand Up @@ -60,7 +83,7 @@ docker images
- Image törlés:

```bash
docker rmi [image neve]:[tag]
docker rmi {image neve}:{tag}
```

- Docker konténer futtatása:
Expand All @@ -84,73 +107,124 @@ docker ps -a
- Docker konténer törlése (csak ha le van állítva):

```bash
docker rm [konténer azonosító]
docker rm {konténer azonosító}
```

- Docker konténer törlése (erőltetve):

```bash
docker rm [konténer azonosító] --force
docker rm {konténer azonosító} --force
```


- Image építése Dockerfile alapján:

```bash
docker build --tag [namespace vagy author]]/[image neve]:[verzió] .
docker build --tag {namespace vagy author}/{image neve}:{verzió} .
```

Megjegyzés:
- Ha az image fájlt Apple Silicon processzoros gépen készítem, de utána Intel processzoros gépen használom, akkor a fenti parancshoz adjuk hozzá ezt: `--platform linux/amd64`
- Több platformos build: `docker buildx build --tag [kép neve címkével] --push . --platform linux/amd64,linux/arm64,linux/arm/v7`

## Első Docker konténer
- Több platformos build: `docker buildx build --tag {kép neve címkével} --push . --platform linux/amd64,linux/arm64,linux/arm/v7`

## Konténer adatainak ellenőrzése, naplózás

### Konténer adatainak ellenőrzése

```bash
docker inspect [konténer azonosító]
docker inspect {konténer azonosító}
```

### Napló ellenőrzése

```bash
docker logs [konténer azonosító]
docker logs {konténer azonosító}
```

Megjegyzés:
- Ha a naplót folyamatosan szeretnénk látni, akkor használjuk a `-f` kapcsolót: `docker logs -f [konténer azonosító]`
- Ha a naplót folyamatosan szeretnénk látni, akkor használjuk a `-f` kapcsolót: `docker logs -f {konténer azonosító}`

## Konténer indítása, leállítása

### Konténer indítása

```bash
docker start [konténer azonosító]
docker start {konténer azonosító}
```

### Konténer leállítása

```bash
docker stop [konténer azonosító]
docker stop {konténer azonosító}
```

## Konténer hálózatok


Hálózatkezelése hasonlít a hagyományos hálózatkezeléshez, de a konténerek izoláltak, és saját IP-címmel rendelkeznek.

## Docker fájlrendszer


A fájlrendszer a konténerben a Docker image-ből indul ki, és a konténer futása során módosítható. A fájlrendszer a konténerben lévő fájlokat és könyvtárakat tartalmazza, és lehetővé teszi az alkalmazások számára az adatok tárolását és kezelését.

## Parancsok futtatása konténerben

### Interaktív mód

```bash
docker exec -it {konténer azonosító} bash
```

### Parancs futtatása

```bash
docker exec {konténer azonosító} {parancs}
```


## Képek kezelése (letöltés, címkézés)

### Docker kép letöltése

```bash
docker pull {kép neve}:{verzió}
```

### Docker kép címkézése

```bash
docker tag {kép neve}:{verzió} {új név}:{új verzió}
```

## Képek létrehozása (docker build)

Képeket a progtamkódunk alapján készíthetünk el a Dockerfile segítségével. A Dockerfile egy szöveges fájl, amely tartalmazza azokat az utasításokat, amelyekre a Docker Engine építi a képet.

## Docker Compose

- **Mi az a Docker Compose?**

Docker Compose egy eszköz, amely lehetővé teszi több Docker konténer egyszerű definícióját és indítását egyetlen konfigurációs fájl segítségével. Kifejezetten hasznos fejlesztői környezetekben, teszteléshez és staging környezetekben.

- **Miért hasznos a Docker Compose?**

- **Egyszerűség**: Egyetlen `docker-compose.yml` fájlban kezelhető az összes szolgáltatás, ami egyszerűsíti a konfigurációt.
- **Automatizálás**: Parancssorból egyszerű parancsokkal indíthatók és állíthatók le a szolgáltatások.
- **Környezet konzisztencia**: Biztosítja, hogy a fejlesztői környezet megegyezzen a termelésivel, csökkentve a "nálam működik" típusú problémákat.

- **Hogyan működik a Docker Compose?**

A `docker-compose.yml` fájlban definiálod a szükséges szolgáltatásokat, hálózatokat és tárolókat. A `docker compose up` parancs futtatásával elindítja a definiált konténereket és szolgáltatásokat. A `docker compose down` parancs leállítja és eltávolítja a szolgáltatásokat, hálózatokat és konténereket.

- **Első lépések**

1. Telepítsd a Docker Compose-t (Docker Desktop telepíti).
2. Készíts egy `docker-compose.yml` fájlt, amely tartalmazza a futtatni kívánt szolgáltatásokat.
3. Használd a `docker compose up` parancsot a szolgáltatások indításához.
4. Használd a `docker compose down` parancsot a szolgáltatások leállításához.

_Megjegyzés: `docker compose up -d` kapcsolóval a konténerek a háttérben futnak._


### Indítás építéssel

```bash
Expand All @@ -172,6 +246,9 @@ docker-compose down
```

## Docker alapú alkalmazás saját képből

Jelenleg Azure Container Registry (ACR) szolgáltatásban tároljuk a Docker képeket, amelyeket a GitHub Actions segítségével automatizáltan telepítünk az Azure Webalkalmazásba.

## Képek tárolása Azure-ban (ACR)

Azure Container Registry (ACR) egy Docker képtároló, amely lehetővé teszi a Docker képek tárolását és kezelését a felhőben. Az ACR használatával a fejlesztők könnyen kezelhetik a Docker képeket, és biztonságosan oszthatják meg őket a csapat tagjaival.
Expand All @@ -188,26 +265,46 @@ Azure Container Registry (ACR) egy Docker képtároló, amely lehetővé teszi a
- Location: a régió, ahol az ACR tárolva lesz
- SKU: az ACR ártervezési modellje

- **Admin Account engedélyezése az ACR-ben**

Ha frissen hoztunk létre egy Azure Container Registry-t, akkor az alapértelmezett beállítások miatt nem tudunk hozzáférni az ACR-hez webalkalmazásból.
Ezért engedélyeznunk kell az Admin Account-ot az ACR-ben. Ennek lépései azure-cli segítségével:

1. Jelentkezzünk be az ACR-be:

```bash
az acr login --name {ACR név}

```

2. Engedélyezzük az Admin Account-ot:

```bash
az acr update -n {ACR név} --admin-enabled true
```



### Docker kép feltöltése az ACR-be

1. Bejelentkezés az ACR-be:

```bash
az acr login --name [ACR név]
az acr login --name {ACR név}
```

2. Docker kép címkézése:

```bash
docker tag [kép neve] [ACR név].azurecr.io/[kép neve]:[verzió]
docker tag {kép neve} {ACR név}.azurecr.io/{kép neve}:{verzió}
```

_Megjegyzés: `latest` verziót minden esetben töltsünk fel, hogy egyszerűbb legyen az automatizáció._

3. Docker kép feltöltése:

```bash
docker push [ACR név].azurecr.io/[kép neve]:[verzió]
docker push {ACR név}.azurecr.io/{kép neve}:{verzió}
```

## Azure erőforrások létrehozása Docker képből
Expand Down Expand Up @@ -238,9 +335,28 @@ docker push [ACR név].azurecr.io/[kép neve]:[verzió]

## DevOps CI/CD pipeline alkalmazása

### GitHub Actions
### GitHub Actions Workflow

- **Mi az a GitHub Actions?**

GitHub Actions egy automatizálási eszköz, amely lehetővé teszi szoftverfejlesztési feladatok automatizálását közvetlenül a GitHub repository-kon belül. Felhasználható tesztek futtatására, build-ek készítésére, deploy folyamatok kezelésére és még sok másra.

- **Miért hasznos a GitHub Actions?**

- **Integráció**: Közvetlenül integrálható a GitHub-al, nem szükséges külső CI/CD eszközöket használni.
- **Rugalmas**: Tetszőleges workflow-k létrehozhatók, amelyek megfelelnek a projekt specifikus igényeinek.
- **Közösségi támogatás (community)**: Hozzáférés számos előre készített "action"-höz, amelyeket a közösség osztott meg.

- **Hogyan működik a GitHub Actions?**

Workflow fájlok (általában `.github/workflows` mappában található YAML fájlok) definiálják a műveleteket, amelyeket egy esemény (például `push`, `pull request`) vált ki. Minden workflow tartalmaz egy vagy több job-ot, amelyek futtathatók ugyanazon runner-en vagy különböző runner-eken. Az Actions lehetővé teszi a folyamatok parallelizálását és az erőforrások hatékony kezelését.

- **Első lépések**

1. Készíts egy `.github/workflows` mappát a repository-ban.
2. Hozz létre egy YAML fájlt, ami leírja a workflow-d (például `build.yml`).
3. Definiálj eseményeket, job-okat és lépéseket a fájlban, amelyek meghatározzák, mi történjen automatizálás során.
4. Commitold és pushold a változásokat, hogy aktiváld a workflow-t.

### Secrets kezelése GitHub repository-ban, ACR hozzáféréshez

Expand All @@ -255,24 +371,29 @@ docker push [ACR név].azurecr.io/[kép neve]:[verzió]
7. Kattints az "Add secret" gombra.
8. Ismételje meg az 5-7 lépéseket a következő adatokkal:
- Name: ACR_USERNAME
- Secret: [az ACR felhasználóneve]
- Secret: {az ACR felhasználóneve}
9. Ismételje meg az 5-7 lépéseket a következő adatokkal:
- Name: ACR_PASSWORD
- Secret: [az ACR password vagy password2]
- Secret: {az ACR password vagy password2}


### ACR használata GitHub Actions-ben

1. Clone-ozzuk le a repository-t a gépünkre.
2. Hozzunk létre egy `.github/workflows` mappát a repository gyökérkönyvtárában.
3. Hozzunk létre egy `elso-github-action.yml` fájlt a `.github/workflows` mappában.
4. Másoljuk be a következő kódot a fájlba:
4. Készítsük el a megfelelő CI/CD pipeline-t a fájlban. (nem szükséges a teéjes folyamatot egy fájlban megvalósítani. Lehetséges, hogy egy nagy CI/CD folyamatot több fájlban valósítunk meg.)

```yaml
```
Példák:
- [.github/workflows/penda.yml](/.github/workflows/pelda.yaml)
- [.github/workflows](/.github/workflows)


## Azure Webalkalmazás létrehozása Docker képből

- Webalkalmazás létrehozásánál a Docker képet az Azure Container Registry-ből használjuk. Az Azure Webalkalmazás lehetővé teszi a konténerek gyors és egyszerű telepítését, skálázását és kezelését a felhőben.
- Webalkalmazás módosítása

## Azure Webalkalmazás létrehozása Docker képből
1. Üzembehelyezési központban állítsuk át a `Folyamatos telepítés` értékés `Bekalcsolva`-ra.
2. Konfiguráció > Általános beállítások > Mindig bekapcsolva: Be

Loading