Vodič za početnike za Docker - kako stvoriti stranu klijenta / poslužitelja pomoću docker-compose

Vi ste programer i želite otkriti docker-compose? Ovaj je članak stvoren za vas.

Nakon kratkog uvoda u Docker-Compose, moći ćete stvoriti svoju prvu aplikaciju na strani klijenta / poslužitelja pomoću Dockera.

Ovaj članak uzima u obzir da znate osnove Dockera. Ako ne, nemojte paničariti! Predlažem da pročitate moj prvi članak kako biste otkrili Docker i naučili kako stvoriti svoju prvu aplikaciju.

Vodič za početnike za Docker - kako stvoriti svoju prvu Docker aplikaciju

Vi ste programer i želite započeti s Dockerom? Ovaj je članak stvoren za vas. Nakon kratkog uvoda o tome što je Docker i zašto ga koristiti, moći ćete stvoriti svoju prvu aplikaciju s Dockerom.

Što je Docker-Compose?

Docker-Compose alat je koji nudi Docker. Da bi to bilo jednostavno, ovaj je alat implementiran za rješavanje arhitektonskih problema u vašim projektima.

Kao što ste mogli primijetiti u mom prethodnom članku, stvorili smo jednostavan program koji je prikazivao "Docker je magija!" kada je pokrenut.

Nažalost, kada ste programer, rijetko stvarate samostalni program (program koji ne zahtijeva bilo koje druge usluge, poput baze podataka).

Međutim, kako znati trebate li Docker-Compose? Vrlo je jednostavno - ako vaša aplikacija zahtijeva nekoliko usluga, potreban vam je ovaj alat. Na primjer, ako izradite web mjesto koje se treba povezati s vašom bazom podataka radi provjere autentičnosti korisnika (ovdje 2 usluge, web mjesto i baza podataka).

Docker-compose nudi vam mogućnost pokretanja svih ovih usluga u jednoj naredbi.

Razlika između Dockera i Docker-Composea

Docker se koristi za upravljanje pojedinačnim spremnikom (uslugom) za vašu aplikaciju.

Docker-Compose koristi se za upravljanje više spremnika istodobno za istu aplikaciju. Ovaj alat nudi iste značajke kao Docker, ali omogućuje složenije programe.

Tipičan slučaj upotrebe

Ovaj alat može postati vrlo moćan i omogućiti vam vrlo brzo postavljanje aplikacija sa složenim arhitekturama. Dat ću vam konkretnu studiju slučaja koja će dokazati da vam treba.

Zamislite, vi ste ponosni tvorac svog web softvera.

Vaše rješenje nudi dvije web stranice. Prva omogućuje trgovinama da kreiraju svoju internetsku trgovinu u samo nekoliko klikova. Drugi je posvećen korisničkoj podršci. Ove dvije web stranice komuniciraju s istom bazom podataka.

Počinjete biti uspješni i vaš poslužitelj više nije dovoljan. Dakle, odlučili ste prebaciti cijeli svoj softver na drugi stroj.

Nažalost, niste koristili docker-compose. Dakle, morat ćete migrirati i rekonfigurirati svoje usluge jednu za drugom, nadajući se da ništa nije zaboravljeno.

Da ste koristili docker-compose, u samo nekoliko naredbi rasporedili biste cijelu svoju arhitekturu na novi poslužitelj. Sve što sada trebate je napraviti nekoliko konfiguracija i učitati sigurnosnu kopiju baze podataka kako bi se finalizirala migracija.

Sada kreirajmo vašu prvu aplikaciju na strani klijenta / poslužitelja pomoću Docker-Compose

Sad kad znate za što će se koristiti docker-compose, vrijeme je da izradite svoju prvu aplikaciju na strani klijenta / poslužitelja!

Cilj ovog vodiča je stvoriti malo web mjesto (poslužitelj) u Pythonu koje će sadržavati rečenicu. Ovu rečenicu mora dohvatiti program (klijent) na Pythonu koji će prikazati rečenicu.

Napomena: Ovaj vodič uzima u obzir da ste Docker već instalirali na računalo i da imate osnove. Ako to nije slučaj, pozivam vas da se uputite na moj prethodni članak.

1. Stvorite svoj projekt

Da biste stvorili svoj prvi klijent / poslužitelj, pozivam vas da stvorite mapu na računalu. U korijenu mora sadržavati sljedeću datoteku i mape:

  • Datoteka ' docker-compose.yml ' (datoteka docker-compose koja će sadržavati potrebne upute za stvaranje različitih usluga).
  • Mapa ' poslužitelj ' (ova mapa sadržavat će datoteke potrebne za postavljanje poslužitelja).
  • Mapa ' klijenta ' (ova mapa sadržavat će datoteke potrebne za postavljanje klijenta).

Obično biste trebali imati ovu arhitekturu mape:

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

2. Stvorite svoj poslužitelj

Da bismo započeli s podsjetnicima na Dockerove osnove, započet ćemo s izradom poslužitelja.

2a. Stvaranje datoteka

Premjestite se u mapu ' poslužitelj ' i stvorite sljedeće datoteke:

  • Datoteka ' server.py ' (python datoteka koja će sadržavati kod poslužitelja).
  • Datoteka ' index.html ' (html datoteka koja će sadržavati rečenicu za prikaz).
  • Datoteka ' Dockerfile ' (datoteka dockera koja će sadržavati potrebne upute za stvaranje okruženja poslužitelja).

Obično biste trebali imati ovu arhitekturu mape na sljedećem putu ' server / ':

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

2b. Uredite datoteku Python

U datoteku ' server.py ' možete dodati sljedeći kod :

#!/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()

Ovaj će vam kôd omogućiti stvaranje jednostavnog web poslužitelja unutar ove mape. Dohvatit će sadržaj datoteke index.html kako bi ga podijelio na web stranici.

2c. Uredite HTML datoteku

U datoteku ' index.html ' možete dodati sljedeću rečenicu :

Docker-Compose is magic!

Ovu datoteku će dijeliti poslužitelj kada se pokrene i prikazat će se ova rečenica.

2d. Uredite Docker datoteku

Ovdje ćemo stvoriti osnovnu Docker datoteku koja će biti zadužena za izvršavanje naše Python datoteke. Koristit ćemo službenu sliku stvorenu za izvršavanje Pythona.

# 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. Stvorite svog klijenta

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()

This code will allow you to get the content of the server web page and to display it.

3c. Edit the Docker file

Što se tiče poslužitelja, stvorit ćemo osnovnu Dockerfile koja će biti zadužena za izvršavanje naše Python datoteke.

# 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. Natrag na Docker-Compose

Kao što ste mogli primijetiti, stvorili smo dva različita projekta, poslužitelj i klijent, oba s Dockerfileom.

Do sada se ništa nije promijenilo od osnova koje već znate.

Sada ćemo urediti ' docker-compose.yml ' u korijenu spremišta.

Napomena: Docker-Compose je vrlo potpun, ovaj članak želi vam dati konkretan i tipičan primjer. Zbog toga nećete vidjeti sve ključne riječi.
# 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. Izgradite Docker-Compose

Jednom kada se postavi docker-compose, potrebno je izraditi vašu klijentsku / poslužiteljsku aplikaciju. Ovaj korak odgovara naredbi 'docker build', ali primijenjen na različite usluge.

$ docker-compose build

6. Pokrenite Docker-Compose

Sastavljen je vaš docker-compose! Sad je vrijeme za početak! Ovaj korak odgovara naredbi 'docker run', ali primijenjen na različite usluge.

$ docker-compose up

Eto, to je to. Obično biste trebali vidjeti "Docker-Compose je magija!" prikazan na vašem terminalu.

Napomena: Kao što je naznačeno u vodiču, vaša usluga "poslužitelj" koristi port 1234 vašeg računala za distribuciju svog sadržaja. Ako na računalu otvorite stranicu '// localhost: 1234 /', trebali biste vidjeti 'Docker-Compose is magic!'.

Kod je dostupan

Ako želite doći do cjelovitog koda da biste ga jednostavnije otkrili ili izvršili, stavio sam vam ga na raspolaganje na svom Githubu.

-> GitHub: Primjer komponiranja poslužitelja klijenta, sastavljanje

Korisne naredbe za Docker

Kao i obično, pripremio sam popis narudžbi koje bi vam mogle biti korisne s 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.