A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Következő változat | Előző változat | ||
tanszek:oktatas:iss_t:docker [2023/04/02 16:56] knehez létrehozva |
tanszek:oktatas:iss_t:docker [2023/04/16 18:38] (aktuális) knehez [Docker compose commands] |
||
---|---|---|---|
Sor 92: | Sor 92: | ||
* EXPOSE command opens a tcp port to the outside (in this case, 5000) | * EXPOSE command opens a tcp port to the outside (in this case, 5000) | ||
* copy everything to the working directory | * copy everything to the working directory | ||
- | the last line defines the startup command after installation, in this case: "flask run" | + | * the last line defines the startup command after installation, in this case: "flask run" |
- | Soronként a következőket definiáljuk: | + | ==== Creating a docker-compose file to manage lifecycle ==== |
- | * Hozzon létre egy kiinduló virtuális gépet (image) a python 3.7-es támogatással és a **alpine** nevű linux kernellel. | + | In other tutorials, the virtual machine is started at this point. We don't do it, but move on to the possibilities of **docker-compose.yml**, which allows us to flexibly manage several virtual machines at the same time. It is not necessary to create a Dockerfile either, if we use standard configurations available on the Internet. |
- | * a munkakönyvtárunk a /code lesz. | + | |
- | * Állítsunk be két környezeti változót, ami a flask-nak szükséges a kiszolgáláshoz. | + | |
- | * Telepítsük a gcc-t és más függőségeket. (ez azért kell, mert a Python sok csomagot c/c++ forrás állományokból fordít) | + | |
- | * másoljuk be a requirements.txt-t a munkakönyvtárba (ez azért kell, mert a virtuális gépnek saját fájlrendszere van, a Dockerfile mellett lévő állományokat nem tudja közvetlenül olvasni.) | + | |
- | * EXPOSE parancs tcp portot nyit meg kifelé (jelen esetben az 5000-est) | + | |
- | * mindent másoljuk be a munkakönyvtárba | + | |
- | * az utolsó sor a telepítés utáni indító parancsot definiálja, jelen esetben: "flask run" | + | |
- | + | Create the docker-compose.yml file as usual: | |
- | + | ||
- | ==== Compose állomány létrehozása ==== | + | |
- | + | ||
- | Más leírásokban ennél a pontnál elindítják a virtuális gépet. Mi nem tesszük meg, hanem továbblépünk a **docker-compose** lehetőségeire, amivel rugalmasan tudunk több virtuális gépet egyszerre kezelni. Nem feltétlenül kell Dockerfile-t sem létrehozni, ha Interneten is elérhető szabványos konfigurációkat használunk. | + | |
- | + | ||
- | Hozzuk létre a docker-compose.yml állományt a szokásos módon: | + | |
<code> | <code> | ||
Sor 124: | Sor 111: | ||
</code> | </code> | ||
- | Ez az állomány szolgáltatásokban gondolkodik. Minden **service** egy különálló docker image, viszont a nevükre hivatkozva belsőleg elérik egymást. A fenti konfiguráció **web** elnevezésű szolgáltatását a **build: .** miatt a Dockerfile alapján hozzuk létre, viszont a másik **redis** szolgáltatást a szabványos "redis:alpine" konfiguráció alapján használjuk. | + | Each //service// is a separate docker image, but they reach each other internally by referring to their names. The service named //web// in the above configuration is provided by //build: .// because of this, we create it based on the //Dockerfile//, but we use the other redis service based on the standard "redis:alpine" configuration. |
- | A **web** esetén a belsőleg kinyitott 5000-es portot láthatóvá tesszük a 80-as port-on. | + | In the case of the //web//, the internally opened port 5000 is made visible on port 80. |
- | Indítsuk el a következő parancsot és várjuk meg ameddig lefut: | + | Let's start the following command and wait until it runs: |
<code> | <code> | ||
Sor 134: | Sor 121: | ||
</code> | </code> | ||
- | A következő képernyőhöz hasonlót kell látnunk, ha mindent jól állítottunk be előzőleg. Nyomjuk meg a nyíllal jelölt gombot. | + | We should see something similar to the next screen, if everything was set up correctly previously. |
{{tanszek:oktatas:informatikai_rendszerek_epitese:3.png?320x200|}} | {{tanszek:oktatas:informatikai_rendszerek_epitese:3.png?320x200|}} | ||
+ | ==== Possibilities for development ==== | ||
- | ==== Fejlesztési lehetőségek ==== | + | Refresh the browser several times, we can see that the number of visits is updated dynamically. |
- | Frissítsük többször a böngészőt, láthatjuk, hogy a látogatásszám dinamikusan frissül. | + | Ctrl + c can be used to stop the execution. |
- | Ctrl + c segítségével megállíthatjuk a futtatást. | + | replace the contents of //docker-compose.yml// with the following: |
- | + | ||
- | cseréljük le a docker-compose.yml tartalmát a következőre: | + | |
<code> | <code> | ||
Sor 163: | Sor 149: | ||
</code> | </code> | ||
- | A **volumes** beállítja, hogy a virtuális gépben belül levő könyvtár, jelen esetben a __working directory__ a gazda rendszerhez legyen kötve, illetve kimásolva. Ha nem a gyökérbe szeretnénk mappelni, akkor pl: ./mycode:/code is megadható, de a mycode könyvtárnak az indítás előtt léteznie kell. | + | **volumes** sets the directory inside the virtual machine, in this case the working directory ./ is connected to the host system. (it means, all the file changes will shared between the host and container.) If you don't want to map to the root, you can enter e.g.: ./mycode:/code, but the **mycode** directory must exist before starting. |
- | Indítsuk el újra a rendszert: | + | Let's restart the system: |
<code> | <code> | ||
Sor 171: | Sor 157: | ||
</code> | </code> | ||
- | Majd látható, hogy a konzolban developer módra kapcsoltunk. Módosítsuk az editor segítségével a app.py-t, mondjuk az utolsó függvényben a kiírás szövegét és frissítsük a böngészőt. | + | Then you can see that we switched to developer mode in the console. Use the editor to modify //app.py//, say the text of the statement in the last function, and update the browser. |
- | ==== Docker compose parancsok ==== | + | ==== Docker compose commands ==== |
- | Futó virtuális gépek listázása: | + | List running virtual machines:: |
<code> | <code> | ||
Sor 182: | Sor 168: | ||
</code> | </code> | ||
- | Egy adott instance milyen környezeti változókat használ? | + | What environment variables does a given instance use? |
<code> | <code> | ||
Sor 188: | Sor 174: | ||
</code> | </code> | ||
- | Hogyan állíthatjuk le a szolgáltatásokat? | + | How can we stop the services? |
<code> | <code> | ||
- | docker-compose stop | + | docker-compose stop <service-name> |
</code> | </code> | ||
- | Hogyan tudunk teljesen letörölni mindent leállítás után? | + | How can we completely wipe everything after shutdown? |
<code> | <code> | ||
Sor 200: | Sor 186: | ||
</code> | </code> | ||
- | Hogyan tudunk shellbe belépni egy konténeren belül? | + | How can we enter a shell inside a container? |
<code> | <code> | ||
Sor 206: | Sor 192: | ||
</code> | </code> | ||
- | Honnan tudok előre elkészített minta container-eket letölteni? | + | How can I see the logs? |
+ | <code> | ||
+ | docker-compose logs <containername> | ||
+ | </code> | ||
+ | |||
+ | |||
+ | Where can I download pre-made sample containers? | ||
https://github.com/docker/awesome-compose | https://github.com/docker/awesome-compose | ||
+ | Source code can be found here: https://github.com/knehez/isi in folder example_1. | ||