Docker Compose Starter Guide

Penulis artikel, terjemahan yang kami terbitkan hari ini, mengatakan bahwa artikel ini ditujukan untuk para pengembang yang ingin mempelajari Docker Compose dan akan membuat aplikasi server-klien pertama mereka menggunakan Docker. Pembaca seharusnya terbiasa dengan dasar-dasar Docker. Jika ini bukan masalahnya, Anda dapat melihat seri bahan ini , publikasi ini , di mana dasar-dasar Docker dibahas bersama dengan dasar-dasar Kubernetes, dan artikel ini untuk pemula.

gambar

Apa itu Susunan Docker?


Docker Compose adalah alat yang disertakan dengan Docker. Ini dirancang untuk menyelesaikan masalah yang terkait dengan penyebaran proyek.

Mempelajari dasar-dasar Docker, Anda mungkin menemukan penciptaan aplikasi sederhana yang bekerja secara mandiri, terlepas dari, misalnya, sumber data eksternal atau layanan tertentu. Dalam praktiknya, aplikasi seperti itu jarang terjadi. Proyek nyata biasanya mencakup seluruh rangkaian aplikasi kolaboratif.

Bagaimana Anda tahu jika Anda perlu menggunakan Docker Compose saat menggunakan proyek? Bahkan - sangat sederhana. Jika beberapa layanan digunakan untuk memastikan berfungsinya proyek ini, maka Docker Compose mungkin berguna. Misalnya, dalam situasi di mana mereka membuat situs web yang, untuk mengotentikasi pengguna, perlu terhubung ke database. Proyek serupa dapat terdiri dari dua layanan - satu yang menyediakan situs, dan satu yang bertanggung jawab untuk memelihara database.

Docker Compose technology, jika dideskripsikan secara sederhana, memungkinkan, dengan satu perintah, untuk meluncurkan banyak layanan.

Perbedaan Antara Docker dan Docker Compose


Docker digunakan untuk mengelola wadah individu (layanan) yang membentuk aplikasi.

Docker Compose digunakan untuk mengelola beberapa wadah sekaligus yang membentuk aplikasi. Alat ini menawarkan fitur yang sama dengan Docker, tetapi memungkinkan Anda bekerja dengan aplikasi yang lebih kompleks.


Docker (wadah tunggal) dan Docker Compose (beberapa wadah)

Docker Khas Pembuatan Case


Docker Compose adalah, di tangan kanan, alat yang sangat kuat yang memungkinkan Anda untuk dengan cepat menyebarkan aplikasi dengan arsitektur yang kompleks. Sekarang kita akan melihat contoh penggunaan praktis dari Docker Compose, analisis yang akan memungkinkan Anda untuk mengevaluasi keuntungan yang akan memberi Anda menggunakan Docker Compose.

Bayangkan Anda adalah pengembang proyek web. Proyek ini mencakup dua situs web. Yang pertama memungkinkan orang dalam bisnis untuk membuat, hanya dengan beberapa klik, toko online. Yang kedua ditujukan untuk dukungan pelanggan. Kedua situs ini berinteraksi dengan database yang sama.

Proyek Anda menjadi lebih populer, dan ternyata kekuatan server tempat ia bekerja tidak lagi cukup. Akibatnya, Anda memutuskan untuk mentransfer seluruh proyek ke komputer lain.

Sayangnya, Anda tidak menggunakan sesuatu seperti Docker Compose. Karena itu, Anda harus mentransfer dan mengkonfigurasi ulang layanan satu per satu, berharap bahwa Anda, dalam proses pekerjaan ini, tidak akan melupakan apa pun.

Jika Anda menggunakan Docker Compose, maka mentransfer proyek Anda ke server baru adalah masalah yang dapat diselesaikan dengan menjalankan beberapa perintah. Untuk menyelesaikan transfer proyek ke tempat baru, Anda hanya perlu melakukan beberapa pengaturan dan mengunggah salinan cadangan dari database ke server baru.

Mengembangkan aplikasi klien-server menggunakan Docker Compose


Sekarang Anda tahu untuk apa kami akan menggunakan Docker Compose, sekarang saatnya untuk membuat aplikasi server klien pertama Anda menggunakan alat ini. Yaitu, kita berbicara tentang pengembangan situs web kecil (server) dengan Python, yang dapat menghasilkan file dengan fragmen teks. File ini diminta dari server oleh program (klien), juga ditulis dengan Python. Setelah menerima file dari server, program menampilkan teks yang tersimpan di layar.

Harap perhatikan bahwa kami berharap Anda memiliki dasar-dasar Docker dan Anda sudah menginstal platform Docker.

Mari kita mulai mengerjakan proyek.

▍1. Pembuatan proyek


Untuk membangun aplikasi server-klien pertama Anda, saya sarankan mulai dengan membuat folder proyek. Itu harus berisi file dan folder berikut:

  • docker-compose.yml . Ini adalah file Menulis Docker yang akan berisi instruksi yang diperlukan untuk memulai dan mengkonfigurasi layanan.
  • Folder server . Ini akan berisi file yang diperlukan untuk memastikan operasi server.
  • Folder client . Ini akan menjadi file aplikasi klien.

Akibatnya, isi folder utama proyek Anda akan terlihat seperti ini:

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

▍2. Pembuatan server


Di sini kita, dalam proses membuat server, akan menyentuh beberapa hal dasar tentang Docker.

2a. Pembuatan file


Buka folder server dan buat file-file berikut di dalamnya:

  • File server.py . Ini akan berisi kode server.
  • File index.html . File ini akan berisi sepotong teks yang harus ditampilkan oleh aplikasi klien.
  • File Dockerfile . Ini adalah file Docker yang akan berisi instruksi yang diperlukan untuk membuat lingkungan server.

Beginilah isi dari server/ folder Anda seharusnya:

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

2b. Mengedit file Python.


Tambahkan kode berikut ke file server.py :

 #!/usr/bin/env python3 #    python. #       -. #     - ,      Python. import http.server import socketserver #         . handler = http.server.SimpleHTTPRequestHandler #   ,        1234. #    ,        ,    docker-compose. with socketserver.TCPServer(("", 1234), handler) as httpd:   #       ,    .  httpd.serve_forever() 

Kode ini memungkinkan Anda membuat server web sederhana. Ini akan memberi klien file index.html , yang isinya nanti akan ditampilkan di halaman web.

2c. Pengeditan file HTML


Tambahkan teks berikut ke file index.html :

 Docker-Compose is magic! 

Teks ini akan dikirim ke klien.

2d. Mengedit Dockerfile


Sekarang kita akan membuat Dockerfile sederhana, yang akan bertanggung jawab untuk mengatur runtime untuk server Python. Kami akan menggunakan gambar resmi yang dimaksudkan untuk pelaksanaan program yang ditulis dengan Python sebagai dasar dari gambar yang dibuat. Berikut adalah isi Dockerfile:

 #    ,  Dockerfile       . #      'FROM'. #      python ( DockerHub). #   ,    ,  'python',     - 'latest'. FROM python:latest #       ,   Python,     'server.py'  'index.html'. #     ,     'ADD'. #  , 'server.py',    ,   . #  , '/server/',  ,        . #        '/server/'. ADD server.py /server/ ADD index.html /server/ #     'WORKDIR', ,   . #      . #    ,      ,   '/server/'. WORKDIR /server/ 

Sekarang mari kita bekerja pada klien.

▍3. Penciptaan Pelanggan


Menciptakan bagian klien dari proyek kami, kami akan secara bersamaan mengingat beberapa dasar dari Docker.

3a. Pembuatan file


Buka folder proyek client Anda dan buat file-file berikut di dalamnya:

  • File client.py . Ini akan menjadi kode klien.
  • File Dockerfile . File ini memainkan peran yang sama dengan file serupa di folder server. Yaitu, itu berisi instruksi yang menggambarkan penciptaan lingkungan untuk mengeksekusi kode klien.

Akibatnya, client/ folder Anda pada tahap kerja ini akan terlihat seperti ini:

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

3b. Pengeditan file python


Tambahkan kode berikut ke file client.py :

 #!/usr/bin/env python3 #    Python. #      'index.html'  . #     ,      Python. import urllib.request #      'http://localhost:1234/'. # ,      ,   'http://localhost:1234'. # localhost   ,      . # 1234 -   ,        . fp = urllib.request.urlopen("http://localhost:1234/") # 'encodedContent'     ('index.html'). # 'decodedContent'     (  ,      ). encodedContent = fp.read() decodedContent = encodedContent.decode("utf8") #   ,    ('index.html'). print(decodedContent) #    . fp.close() 

Berkat kode ini, aplikasi klien dapat mengunduh data dari server dan menampilkannya di layar.

3c. Mengedit Dockerfile


Seperti dalam kasus server, kami membuat Dockerfile sederhana untuk klien, yang bertanggung jawab untuk menciptakan lingkungan di mana aplikasi klien Python akan bekerja. Berikut adalah kode Dockerfile klien:

 #   ,     Dockerfile. FROM python:latest #  'client.py'   '/client/'. ADD client.py /client/ #      '/client/'. WORKDIR /client/ 

▍4. Menulis Docker


Seperti yang mungkin Anda perhatikan, kami menciptakan dua proyek berbeda: server dan klien. Masing-masing dari mereka memiliki Dockerfile sendiri. Sampai sekarang, semua yang terjadi tidak melampaui dasar-dasar bekerja dengan Docker. Sekarang kita sedang memulai dengan Docker Compose. Untuk melakukan ini, kita beralih ke file docker-compose.yml terletak di folder root proyek.

Harap dicatat bahwa di sini kami tidak mencoba untuk mempertimbangkan sepenuhnya semua perintah yang dapat digunakan di docker-compose.yml . Tujuan utama kami adalah memberi Anda contoh praktis yang memberi Anda pengetahuan dasar tentang Docker Compose.

Berikut adalah kode untuk dimasukkan ke docker-compose.yml :

 #  docker-compose     . #   "3"    -        . version: "3" #  ,  docker-composes   . # 1  = 1 . #    , ,   ... # ,     ,   'services'. services: #    ,       . #  ,     . #   (): . #    ,   . #       . #  ,    ,    'server'. server:   #   "build"     #    Dockerfile,      ,   #    .   #  'server/'     ,   #    Dockerfile.   build: server/   # ,      .   #     "python ./server.py".   command: python ./server.py   #   ,      'server/server.py'   1234.   #          (   ),   #         .   #       'ports'.   #      : [ ]:[ ]   #        1234         # 1234  (         #   ).   ports:     - 1234:1234 #   (): . #    'client'. client:   #  'client/    ,     #  Dockerfile    .   build: client/   # ,      .   #     "python ./client.py".   command: python ./client.py   #   'network_mode'     .   #    ,      'localhost' .   network_mode: host   #   'depends_on'  ,   ,   #   , ,       .   #  ,   'client'       'server'.   depends_on:     - server 

▍5. Perakitan proyek


Setelah semua instruksi yang diperlukan dimasukkan dalam docker-compose.yml , proyek perlu dirakit. Langkah pekerjaan kami ini menyerupai penggunaan docker build , tetapi perintah yang sesuai terkait dengan beberapa layanan:

 $ docker-compose build 

▍6. Peluncuran proyek


Sekarang proyek sudah selesai, sekarang saatnya untuk meluncurkannya. Langkah pekerjaan kami ini sesuai dengan langkah di mana, ketika bekerja dengan masing-masing kontainer, perintah docker run dijalankan:

 $ docker-compose up 

Setelah menjalankan perintah ini, terminal harus menampilkan teks yang diunduh oleh klien dari server: Docker-Compose is magic! .

Seperti yang telah disebutkan, server menggunakan port komputer 1234 untuk melayani permintaan klien. Karena itu, jika Anda masuk ke browser di http: // localhost: 1234 / , halaman dengan teks Docker-Compose is magic! akan ditampilkan di dalamnya Docker-Compose is magic! .

Perintah yang Berguna


Mari kita lihat beberapa perintah yang mungkin berguna saat Anda bekerja dengan Docker Compose.

Perintah ini memungkinkan Anda untuk menghentikan dan menghapus wadah dan sumber daya lain yang dibuat oleh docker-compose up :

 $ docker-compose down 

Perintah ini menampilkan log layanan:

 $ docker-compose logs -f [service name] 

Sebagai contoh, dalam proyek kami ini dapat digunakan dalam bentuk berikut: $ docker-compose logs -f [service name] .

Dengan menggunakan perintah ini, Anda dapat membuat daftar kontainer:

 $ docker-compose ps 

Perintah ini memungkinkan Anda untuk mengeksekusi perintah dalam wadah eksekusi:

 $ docker-compose exec [service name] [command] 

Sebagai contoh, ini mungkin terlihat seperti ini: docker-compose exec server ls .

Perintah ini memungkinkan Anda untuk menampilkan daftar gambar:

 $ docker-compose images 

Ringkasan


Kami memeriksa dasar-dasar bekerja dengan teknologi Docker Compose, pengetahuan yang akan memungkinkan Anda untuk menggunakan teknologi ini dan, jika Anda mau, untuk memulai studi yang lebih dalam. Ini adalah repositori dengan kode proyek yang kami ulas di sini.

Pembaca yang budiman! Apakah Anda menggunakan Docker Compose di proyek Anda?

Source: https://habr.com/ru/post/id450312/


All Articles