Kezdő útmutató a Dockerhez - hogyan lehet kliens / szerver oldalt létrehozni a docker-compose használatával

Fejlesztő vagy és szeretnéd felfedezni a dokkoló-írást? Ez a cikk az Ön számára készült.

A Docker-Compose rövid bemutatása után létrehozhatja az első kliens / szerver oldali alkalmazást a Docker segítségével.

Ez a cikk figyelembe veszi, hogy ismeri a Docker alapjait. Ha nem, ne essen pánikba! Javaslom, hogy olvassa el az első cikkemet, hogy felfedezze a Dockert, és megtanulja az első alkalmazás létrehozását.

Kezdő útmutató a Dockerhez - az első Docker alkalmazás létrehozásának módja

Fejlesztő vagy és a Dockerrel szeretnél kezdeni? Ez a cikk az Ön számára készült. Rövid bemutatás után, hogy mi is a Docker, és miért kell használni, létrehozhatja első alkalmazását a Docker segítségével.

Mi az a Docker-Compose?

A Docker-Compose a Docker által biztosított eszköz. Az egyszerűség kedvéért ez az eszköz a projektjeivel kapcsolatos építészeti problémák megoldására szolgál.

Amint az előző cikkemben észrevehette, létrehoztunk egy egyszerű programot, amely a „Docker varázslat!” Feliratot jelenítette meg. amikor elindították.

Sajnos, amikor fejlesztő vagy, ritkán hoz létre önálló programot (olyan programot, amelynek futtatásához nincs szükség más szolgáltatásokra, például adatbázisra).

Azonban honnan tudja, hogy szüksége van-e a Docker-Compose-ra? Nagyon egyszerű - ha az alkalmazás futtatásához több szolgáltatás szükséges, akkor erre az eszközre van szükség. Például, ha létrehoz egy weboldalt, amelynek a felhasználók hitelesítéséhez csatlakoznia kell az adatbázisához (itt 2 szolgáltatás, webhely és adatbázis).

A Docker-compose lehetőséget kínál arra, hogy ezeket a szolgáltatásokat egyetlen parancsban indítsa el.

Különbség a Docker és a Docker-Compose között

A Docker az alkalmazás egyedi tárolójának (szolgáltatásának) kezelésére szolgál.

A Docker-Compose segítségével több tárolót kezelhet egyszerre ugyanazon alkalmazáshoz. Ez az eszköz ugyanazokat a szolgáltatásokat kínálja, mint a Docker, de bonyolultabb alkalmazásokat tesz lehetővé.

Tipikus használati eset

Ez az eszköz nagyon erőssé válhat, és lehetővé teszi az összetett architektúrájú alkalmazások nagyon gyors telepítését. Adok egy konkrét esettanulmányt, amely bebizonyítja, hogy szüksége van rá.

Képzelje el, Ön büszke alkotója webes szoftverének.

Megoldása két weboldalt kínál. Az első lehetővé teszi, hogy az üzletek néhány kattintással létrehozhassák online áruházukat. A második az ügyfélszolgálatnak szól. Ez a két webhely ugyanazzal az adatbázissal működik együtt.

Kezd sikeres lenni, és a szervere már nem elegendő. Tehát úgy dönt, hogy a teljes szoftvert áttér egy másik gépre.

Sajnos nem használta a dokkoló-írást. Tehát egymás után kell áttelepítenie és újrakonfigurálnia a szolgáltatásait, remélve, hogy semmit nem felejtettek el.

Ha dokkoló-írást használt volna, csak néhány parancsban telepítette volna a teljes architektúrát az új kiszolgálóra. Most csak annyit kell tennie, hogy néhány beállítást kell végrehajtania, és az áttelepítés befejezéséhez be kell töltenie az adatbázis biztonsági másolatát.

Most hozzuk létre az első kliens / szerver oldali alkalmazást a Docker-Compose segítségével

Most, hogy tudja, mire fogja használni a dokkoló-írást, itt az ideje létrehozni az első kliens / szerver oldali alkalmazást!

Az oktatóanyag célja egy kis webhely (szerver) létrehozása a Pythonban, amely tartalmazni fog egy mondatot. Ezt a mondatot a programnak (kliensnek) kell lekérnie a Pythonban, amely megjeleníti a mondatot.

Megjegyzés: Ez az oktatóanyag figyelembe veszi, hogy a Dockert már telepítette a számítógépére, és hogy rendelkezik az alapokkal. Ha nem ez a helyzet, akkor kérem, olvassa el az előző cikkemet.

1. Készítse el projektjét

Az első kliens / szerver alkalmazás létrehozásához felkérem, hogy hozzon létre egy mappát a számítógépén. A gyökérben a következő fájlt és mappákat kell tartalmaznia:

  • Egy „ docker-compose.yml ” fájl ( docker -compose fájl, amely tartalmazza a különböző szolgáltatások létrehozásához szükséges utasításokat).
  • Szerver ” mappa (ez a mappa tartalmazza a szerver beállításához szükséges fájlokat).
  • Egy „ kliens ” mappa (ez a mappa tartalmazza az ügyfél beállításához szükséges fájlokat).

Normál esetben ez a mappa architektúra szükséges:

. ├── client/ ├── docker-compose.yml └── server/ 2 directories, 1 file

2. Hozza létre a szervert

Annak érdekében, hogy emlékeztessünk a Docker alapjaira, a szerver létrehozásával kezdjük.

2a. Hozzon létre fájlokat

Lépjen a " szerver " mappába, és hozza létre a következő fájlokat:

  • Server.py ” fájl (a szerver kódját tartalmazó python fájl).
  • ' Index.html ' fájl (html fájl, amely tartalmazza a megjelenítendő mondatot).
  • Dockerfile ” fájl ( docker fájl, amely tartalmazza a szerver környezetének létrehozásához szükséges utasításokat).

Normál esetben ez a mappaarchitektúra a következő elérési útvonalon kell lennie : ' server / ':

. ├── Dockerfile ├── index.html └── server.py 0 directories, 3 files

2b. Szerkessze a Python fájlt

A következő kódot hozzáadhatja a ' server.py ' fájlhoz:

#!/usr/bin/env python3 # Import of python system libraries. # These libraries will be used to create the web server. # You don't have to install anything special, these libraries are installed with Python. import http.server import socketserver # This variable is going to handle the requests of our client on the server. handler = http.server.SimpleHTTPRequestHandler # Here we define that we want to start the server on port 1234. # Try to remember this information it will be very useful to us later with docker-compose. with socketserver.TCPServer(("", 1234), handler) as httpd: # This instruction will keep the server running, waiting for requests from the client. httpd.serve_forever()

Ez a kód lehetővé teszi egy egyszerű webszerver létrehozását ebben a mappában. Letölti az index.html fájl tartalmát, hogy megossza azt egy weboldalon.

2c. Szerkessze a Html fájlt

A következő mondatot hozzáadhatja az ' index.html ' fájlhoz:

Docker-Compose is magic!

Ezt a fájlt a szerver az indításkor megosztja, és ez a mondat megjelenik.

2d. Szerkessze a Docker fájlt

Here we will create a basic Dockerfile that will be in charge of executing our Python file. We will use the official image created to execute Python.

# Just a remember, dockerfile must always start by importing the base image. # We use the keyword 'FROM' to do that. # In our example, we want to import the python image (from DockerHub). # So, we write 'python' for the image name and 'latest' for the version. FROM python:latest # In order to launch our python code, we must import the 'server.py' and 'index.html' file. # We use the keyword 'ADD' to do that. # Just a remember, the first parameter 'server.py' is the name of the file on the host. # The second parameter '/server/' is the path where to put the file on the image. # Here we put files at the image '/server/' folder. ADD server.py /server/ ADD index.html /server/ # I would like to introduce something new, the 'WORKDIR' command. # This command changes the base directory of your image. # Here we define '/server/' as base directory (where all commands will be executed). WORKDIR /server/

3. Create your client

In order to continue with reminders of Docker’s basics, we will create the client.

3a. Create files

Move to your ‘client’ folder and create the following files:

  • A ‘client.py’ file (python file that will contain the client code).
  • A ‘Dockerfile’ file (docker file that will contain the necessary instructions to create the environment of the client).

Normally you should have this folder architecture in the following path ‘client/’:

. ├── client.py └── Dockerfile 0 directories, 2 files

3b. Edit the Python file

You can add the following code to the ‘client.py’ file:

#!/usr/bin/env python3 # Import of python system library. # This library is used to download the 'index.html' from server. # You don't have to install anything special, this library is installed with Python. import urllib.request # This variable contain the request on '//localhost:1234/'. # You must wondering what is '//localhost:1234'? # localhost: This means that the server is local. # 1234: Remember we define 1234 as the server port. fp = urllib.request.urlopen("//localhost:1234/") # 'encodedContent' correspond to the server response encoded ('index.html'). # 'decodedContent' correspond to the server response decoded (what we want to display). encodedContent = fp.read() decodedContent = encodedContent.decode("utf8") # Display the server file: 'index.html'. print(decodedContent) # Close the server connection. fp.close()

Ez a kód lehetővé teszi a szerver weboldalának tartalmának megszerzését és megjelenítését.

3c. Szerkessze a Docker fájlt

Ami a szervert illeti, létrehozunk egy alap Docker fájlt, amely a Python fájlunk futtatásáért felel majd.

# Same thing than the 'server' Dockerfile. FROM python:latest # Same thing than the 'server' Dockerfile. # We import 'client.py' in '/client/' folder. ADD client.py /client/ # I would like to introduce something new, the 'WORKDIR' command. # This command changes the base directory of your image. # Here we define '/client/' as base directory. WORKDIR /client/

4. Vissza a Docker-Compose oldalhoz

Mint észrevette, két különböző projektet hoztunk létre, a szervert és az ügyfelet, mindkettőt egy Dockerfile-lel.

Eddig semmi sem változott a már ismert alapoktól.

Most szerkeszteni fogjuk a ' docker-compose.yml ' fájlt a tárház gyökerében.

Megjegyzés: Mivel a Docker-Compose nagyon teljes, a cikk célja egy konkrét és tipikus példa bemutatása. Ezért nem fogja látni az összes kulcsszót.
# A docker-compose must always start by the version tag. # We use "3" because it's the last version at this time. version: "3" # You should know that docker-composes works with services. # 1 service = 1 container. # For example, a service maybe, a server, a client, a database... # We use the keyword 'services' to start to create services. services: # As we said at the beginning, we want to create: a server and a client. # That is two services. # First service (container): the server. # Here you are free to choose the keyword. # It will allow you to define what the service corresponds to. # We use the keyword 'server' for the server. server: # The keyword "build" will allow you to define # the path to the Dockerfile to use to create the image # that will allow you to execute the service. # Here 'server/' corresponds to the path to the server folder # that contains the Dockerfile to use. build: server/ # The command to execute once the image is created. # The following command will execute "python ./server.py". command: python ./server.py # Remember that we defined in'server/server.py' 1234 as port. # If we want to access the server from our computer (outside the container), # we must share the content port with our computer's port. # To do this, the keyword 'ports' will help us. # Its syntax is as follows: [port we want on our machine]:[port we want to retrieve in the container] # In our case, we want to use port 1234 on our machine and # retrieve port 1234 from the container (because it is on this port that # we broadcast the server). ports: - 1234:1234 # Second service (container): the client. # We use the keyword 'client' for the server. client: # Here 'client/ corresponds to the path to the client folder # that contains the Dockerfile to use. build: client/ # The command to execute once the image is created. # The following command will execute "python ./client.py". command: python ./client.py # The keyword 'network_mode' is used to define the network type. # Here we define that the container can access to the 'localhost' of the computer. network_mode: host # The keyword'depends_on' allows you to define whether the service # should wait until other services are ready before launching. # Here, we want the 'client' service to wait until the 'server' service is ready. depends_on: - server

5. Docker-Compose felépítése

Miután beállította a dokkoló-írást, fel kell építeni az ügyfél / kiszolgáló alkalmazást. Ez a lépés megfelel a 'docker build' parancsnak, de a különböző szolgáltatásokra alkalmazva.

$ docker-compose build

6. Futtassa a Docker-Compose alkalmazást

A dokkoló-írása megépült! Itt az ideje, hogy elinduljon! Ez a lépés megfelel a 'docker run' parancsnak, de a különböző szolgáltatásokra alkalmazva.

$ docker-compose up

Tessék, ennyi. Általában látnia kell a „Docker-Compose varázslat!” megjelenik a terminálon.

Megjegyzés: Az oktatóanyagban leírtak szerint a „kiszolgáló” szolgáltatás a számítógép 1234-es portját használja a tartalom terjesztésére. Ha megnyitja számítógépén a '// localhost: 1234 /' oldalt, látnia kell a 'Docker-Compose is magic!'.

A kód elérhető

Ha le akarja szerezni a teljes kódot annak egyszerűbb felfedezéséhez vagy végrehajtásához, akkor az Ön rendelkezésére bocsátottam a Github-on.

-> GitHub: Client Server Docker-Compose example

Useful commands for Docker

As usual, I have prepared a list of orders that may be useful to you with docker-compose.

  • Stops containers and removes containers, images… created by ‘docker-compose up’.
$ docker-compose down
  • Displays log output from services (example: ‘docker-compose logs -f client’).
$ docker-compose logs -f [service name]
  • Lists containers.
$ docker-compose ps
  • Executes a command in a running container (example: ‘docker-compose exec server ls’).
$ docker-compose exec [service name] [command]
  • Lists images.
$ docker-compose images

Conclusion

You can refer to this post every time you need a simple and concrete example on how to create a client/server-side with docker-compose. If you have any questions or feedback, feel free to ask.

Don't miss my content by following me on Twitter and Instagram.

You can find other articles like this on my website: herewecode.io.

Want more?

  • Each week get a motivational quote with some advice, a short tutorial into a few slides, and one developer's picture on Instagram.
  • Sign-up for the newsletter and get the latest articles, courses, tutorials, tips, books, motivation, and other exclusive content.