Panduan pemula untuk Docker - cara membuat sisi pelanggan / pelayan dengan penggabungan dok

Anda adalah pembangun dan anda ingin menemui penggubah-dok? Artikel ini dibuat untuk anda.

Selepas pengenalan ringkas mengenai Docker-Compose, anda akan dapat membuat aplikasi pelanggan / pelayan pertama anda dengan Docker.

Artikel ini mengambil kira bahawa anda mengetahui asas-asas Docker. Sekiranya tidak, jangan panik! Saya mencadangkan agar anda membaca artikel pertama saya untuk menemui Docker dan belajar bagaimana membuat aplikasi pertama anda.

Panduan pemula untuk Docker - cara membuat aplikasi Docker pertama anda

Anda adalah pembangun dan anda mahu memulakan dengan Docker? Artikel ini dibuat untuk anda. Selepas pengenalan ringkas mengenai apa itu Docker dan mengapa menggunakannya, anda akan dapat membuat aplikasi pertama anda dengan Docker.

Apa itu Docker-Compose?

Docker-Compose adalah alat yang disediakan oleh Docker. Untuk menjadikannya mudah, alat ini dilaksanakan untuk menyelesaikan masalah seni bina dalam projek anda.

Seperti yang anda perhatikan dalam artikel saya sebelumnya, kami membuat program sederhana yang memaparkan "Docker is magic!" semasa ia dilancarkan.

Malangnya, semasa anda menjadi pembangun, anda jarang membuat program yang berdiri sendiri (program yang tidak memerlukan perkhidmatan lain untuk dijalankan, seperti pangkalan data).

Namun, bagaimana anda tahu jika anda memerlukan Docker-Compose? Sangat mudah - jika aplikasi anda memerlukan beberapa perkhidmatan untuk dijalankan, anda memerlukan alat ini. Sebagai contoh, jika anda membuat laman web yang perlu disambungkan ke pangkalan data anda untuk mengesahkan pengguna (di sini 2 perkhidmatan, laman web dan pangkalan data).

Docker-compose menawarkan anda kemungkinan untuk melancarkan semua perkhidmatan ini dalam satu arahan.

Perbezaan antara Docker dan Docker-Compose

Docker digunakan untuk menguruskan wadah individu (perkhidmatan) untuk aplikasi anda.

Docker-Compose digunakan untuk menguruskan beberapa bekas pada masa yang sama untuk aplikasi yang sama. Alat ini menawarkan ciri yang sama seperti Docker tetapi membolehkan anda mempunyai aplikasi yang lebih kompleks.

Kes penggunaan biasa

Alat ini boleh menjadi sangat kuat dan membolehkan anda menggunakan aplikasi dengan seni bina yang kompleks dengan cepat. Saya akan memberi anda kajian kes konkrit yang akan membuktikan bahawa anda memerlukannya.

Bayangkan, anda adalah pencipta perisian web anda yang bangga.

Penyelesaian anda menawarkan dua laman web. Yang pertama membolehkan kedai membuat kedai dalam talian mereka hanya dengan beberapa klik. Yang kedua dikhaskan untuk sokongan pelanggan. Kedua-dua laman web ini berinteraksi dengan pangkalan data yang sama.

Anda mula berjaya dan pelayan anda tidak lagi mencukupi. Oleh itu, anda memutuskan untuk memindahkan keseluruhan perisian anda ke mesin lain.

Malangnya, anda tidak menggunakan penggubah dok. Oleh itu, anda perlu melakukan migrasi dan mengkonfigurasi semula perkhidmatan anda satu demi satu, dengan harapan tidak ada yang dilupakan.

Sekiranya anda menggunakan komposisi docker, hanya dalam beberapa arahan anda akan menggunakan keseluruhan seni bina anda pada pelayan baru anda. Yang perlu anda buat sekarang adalah membuat beberapa konfigurasi dan memuatkan sandaran pangkalan data anda untuk menyelesaikan penghijrahan.

Sekarang mari buat aplikasi pelanggan / pelayan pertama anda dengan Docker-Compose

Sekarang anda sudah mengetahui apa yang akan digunakan untuk menulis-docker, sudah tiba masanya untuk membuat aplikasi pelanggan / pelayan pertama anda!

Objektif tutorial ini adalah untuk membuat laman web kecil (pelayan) di Python yang akan mengandungi ayat. Kalimat ini mesti diambil oleh program (klien) di Python yang akan memaparkan ayat.

Catatan: Tutorial ini mempertimbangkan bahawa anda sudah memasang Docker pada komputer anda dan bahawa anda mempunyai asas-asasnya. Sekiranya ini tidak berlaku, saya menjemput anda untuk merujuk pada artikel saya sebelumnya.

1. Buat projek anda

Untuk membuat aplikasi pelanggan / pelayan pertama anda, saya menjemput anda untuk membuat folder di komputer anda. Ia mesti mengandungi fail dan folder berikut:

  • A ' buruh pelabuhan-compose.yml ' Fail (Fail buruh pelabuhan-karang yang akan mengandungi arahan yang perlu untuk mewujudkan perkhidmatan yang berbeza).
  • A ' server folder' (folder ini akan mengandungi fail yang diperlukan untuk menubuhkan pelayan).
  • A ' pelanggan folder' (folder ini akan mengandungi fail yang diperlukan untuk menubuhkan pelanggan).

Biasanya anda harus mempunyai arsitektur folder ini:

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

2. Buat pelayan anda

Untuk memulakan dengan peringatan asas Docker, kita akan mulakan dengan membuat pelayan.

2a. Buat fail

Pindah ke folder ' pelayan ' anda dan buat fail berikut:

  • Fail ' server.py ' (fail python yang akan mengandungi kod pelayan).
  • An ' index.html ' fail (fail html yang akan mengandungi hukuman yang akan dipaparkan).
  • A ' Dockerfile fail (Fail buruh pelabuhan yang akan mengandungi arahan yang perlu untuk mewujudkan persekitaran pelayan).

Biasanya anda harus mempunyai arsitektur folder ini di laluan berikut ' server / ':

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

2b. Edit fail Python

Anda boleh menambahkan kod berikut ke fail ' server.py ':

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

Kod ini akan membolehkan anda membuat pelayan web ringkas di dalam folder ini. Ia akan mengambil kandungan fail index.html untuk membagikannya di laman web.

2c. Edit fail Html

Anda boleh menambahkan ayat berikut ke fail ' index.html ':

Docker-Compose is magic!

Fail ini akan dikongsi oleh pelayan semasa dimulakan dan ayat ini akan dipaparkan.

2d. Edit fail Docker

Di sini kita akan membuat Dockerfile asas yang akan bertugas melaksanakan fail Python kita. Kami akan menggunakan gambar rasmi yang dibuat untuk melaksanakan 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. Buat pelanggan anda

Untuk meneruskan peringatan asas Docker, kami akan membuat pelanggan.

3a. Buat fail

Pindah ke folder ' klien ' anda dan buat fail berikut:

  • A ' client.py ' fail (fail python yang akan mengandungi kod pelanggan).
  • A ' Dockerfile fail (Fail buruh pelabuhan yang akan mengandungi arahan yang perlu untuk mewujudkan persekitaran pelanggan).

Biasanya anda harus mempunyai arsitektur folder ini di jalan berikut ' client / ':

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

3b. Edit fail Python

Anda boleh menambahkan kod berikut ke fail ' client.py ':

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

Kod ini akan membolehkan anda mendapatkan kandungan halaman web pelayan dan memaparkannya.

3c. Edit fail Docker

Bagi pelayan, kami akan membuat Dockerfile asas yang akan bertanggungjawab melaksanakan fail Python kami.

# 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. Kembali ke Docker-Compose

Seperti yang anda perhatikan, kami telah membuat dua projek yang berbeza, pelayan, dan klien, keduanya dengan Dockerfile.

Setakat ini tidak ada yang berubah dari asas-asas yang sudah anda ketahui.

Sekarang kita akan mengedit ' docker-compose.yml ' di akar repositori.

Catatan: Docker-Compose sangat lengkap, artikel ini bertujuan untuk memberi anda contoh konkrit dan tipikal. Itulah sebabnya anda tidak akan melihat semua kata kunci.
# 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. Bina Docker-Compose

Setelah penyusun dok dibuat, aplikasi pelanggan / pelayan anda perlu dibina. Langkah ini sesuai dengan arahan 'docker build' tetapi digunakan untuk perkhidmatan yang berbeza.

$ docker-compose build

6. Jalankan Docker-Compose

Kompos dok anda dibina! Sekarang masanya untuk memulakan! Langkah ini sesuai dengan perintah 'docker run' tetapi digunakan untuk perkhidmatan yang berbeza.

$ docker-compose up

Di sana anda pergi, itu sahaja. Anda biasanya akan melihat "Docker-Compose is magic!" dipaparkan di terminal anda.

Catatan: Seperti yang ditunjukkan dalam tutorial, perkhidmatan 'pelayan' anda menggunakan port 1234 komputer anda untuk menyebarkan kandungannya. Sekiranya anda membuka halaman '// localhost: 1234 /' di komputer anda, anda akan melihat 'Docker-Compose is magic!'.

Kod ada

Sekiranya anda ingin mendapatkan semula kod yang lengkap untuk mencarinya dengan lebih mudah atau melaksanakannya, saya telah meletakkannya di Github saya.

-> 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.