Panduan Menulis Docker untuk Pemula

Penulis artikel, terjemahan yang kami terbitkan hari ini, mengatakan bahwa artikel ini ditujukan bagi para pengembang yang ingin mempelajari Docker Compose dan sedang dalam proses membuat aplikasi server klien pertama mereka menggunakan Docker. Diasumsikan bahwa pembaca materi ini sudah familiar dengan dasar-dasar Docker. Jika tidak demikian, Anda dapat melihatnya ini serangkaian bahan ini postingan yang membahas dasar-dasar Docker beserta dasar-dasar Kubernetes, dan ini artikel untuk pemula.

Panduan Menulis Docker untuk Pemula

Apa itu Penulisan Docker?

Docker Compose adalah alat yang disertakan dengan Docker. Ini dirancang untuk memecahkan masalah yang berkaitan dengan penerapan proyek.

Saat mempelajari dasar-dasar Docker, Anda mungkin menemukan pembuatan aplikasi paling sederhana yang bekerja secara mandiri, tidak bergantung, misalnya, pada sumber data eksternal atau layanan tertentu. Dalam praktiknya, penerapan seperti itu jarang terjadi. Proyek nyata biasanya melibatkan serangkaian aplikasi kolaboratif.

Bagaimana Anda tahu jika Anda perlu menggunakan Docker Compose saat menerapkan proyek? Sebenarnya, ini sangat sederhana. Jika Anda menggunakan beberapa layanan untuk menjalankan proyek ini, Docker Compose mungkin berguna. Misalnya, dalam situasi di mana Anda membuat situs web yang, untuk melakukan otentikasi pengguna, perlu tersambung ke database. Proyek semacam itu dapat terdiri dari dua layanan - satu yang memastikan pengoperasian situs, dan satu lagi yang bertanggung jawab untuk mendukung database.

Teknologi Docker Compose, jika kami menjelaskannya dengan cara yang disederhanakan, memungkinkan, dengan bantuan satu perintah, untuk memulai banyak layanan.

Perbedaan antara Docker dan Docker Compose

Docker digunakan untuk mengelola masing-masing container (layanan) yang membentuk suatu aplikasi.

Docker Compose digunakan untuk mengelola beberapa container yang merupakan bagian dari suatu aplikasi secara bersamaan. Alat ini menawarkan fitur yang sama seperti Docker, namun memungkinkan Anda bekerja dengan aplikasi yang lebih kompleks.

Panduan Menulis Docker untuk Pemula
Docker (kontainer tunggal) dan Docker Compose (beberapa kontainer)

Kasus penggunaan Docker Compose yang umum

Docker Compose, di tangan kanan, adalah alat yang sangat kuat yang memungkinkan Anda menerapkan aplikasi dengan arsitektur kompleks dengan cepat. Sekarang kita akan melihat contoh penggunaan praktis Docker Compose, analisisnya akan memungkinkan Anda mengevaluasi manfaat penggunaan Docker Compose.

Bayangkan Anda adalah pengembang proyek web. Proyek ini mencakup dua situs web. Yang pertama memungkinkan pebisnis 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 semakin populer, dan ternyata kapasitas server tempatnya bekerja tidak lagi mencukupi. Akibatnya, Anda memutuskan untuk mentransfer seluruh proyek ke komputer lain.

Sayangnya, Anda belum pernah menggunakan sesuatu seperti Docker Compose. Oleh karena itu, Anda harus memigrasi dan mengkonfigurasi ulang layanan satu per satu, dengan harapan Anda tidak akan melupakan apa pun selama proses pekerjaan ini.

Jika Anda menggunakan Docker Compose, memigrasikan proyek Anda ke server baru adalah masalah yang dapat diselesaikan dengan menjalankan beberapa perintah. Untuk menyelesaikan transfer proyek ke lokasi baru, Anda hanya perlu membuat beberapa pengaturan dan mengunggah salinan cadangan database ke server baru.

Mengembangkan aplikasi client-server menggunakan Docker Compose

Sekarang setelah Anda mengetahui tujuan penggunaan Docker Compose, sekarang saatnya membuat aplikasi klien/server pertama Anda menggunakan alat ini. Yaitu, kita berbicara tentang pengembangan situs web kecil (server) dengan Python, yang dapat menghasilkan file dengan potongan teks. File ini diminta dari server oleh suatu program (klien), juga ditulis dengan Python. Setelah menerima file dari server, program menampilkan teks yang tersimpan di dalamnya di layar.

Harap dicatat bahwa kami berasumsi bahwa Anda memiliki dasar-dasar Docker dan Anda sudah menginstal platform Docker.

Mari kita mulai mengerjakan proyek ini.

▍1. Buat proyek

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

  • berkas docker-compose.yml. Ini adalah file Docker Compose yang berisi instruksi yang diperlukan untuk memulai dan mengkonfigurasi layanan.
  • Map server. Ini akan berisi file yang diperlukan agar server berfungsi.
  • Map client. Di sinilah file aplikasi klien akan ditempatkan.

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

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

▍2. Pembuatan server

Disini kita dalam proses pembuatan server akan menyentuh beberapa hal dasar mengenai Docker.

2a. Membuat File

Masuk ke folder server dan buat file berikut di dalamnya:

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

Seperti inilah tampilan isi folder Anda server/:

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

2b. Mengedit file Python.

Tambahkan ke file server.py kode berikut:

#!/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. Dia akan memberikan file kepada klien index.html, yang isinya nantinya akan ditampilkan di halaman web.

2c. Mengedit file HTML

Untuk mengajukan index.html tambahkan teks berikut:

Docker-Compose is magic!

Teks ini akan dikirim ke klien.

2d. Mengedit Dockerfile

Sekarang kita akan membuat file sederhana Dockerfile, yang akan bertanggung jawab untuk mengatur lingkungan runtime untuk server Python. Sebagai dasar dari gambar yang dibuat, kami akan menggunakan secara resmi, dirancang untuk menjalankan program yang ditulis dengan Python. Berikut isi Dockerfilenya:

# На всякий случай напоминаю, что 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. Buat klien

Saat membuat sisi klien dari proyek kami, kami akan mengingat beberapa dasar Docker sepanjang prosesnya.

3a. Membuat File

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

  • berkas client.py. Di sinilah kode klien akan berada.
  • berkas Dockerfile. File ini memainkan peran yang sama dengan file serupa di folder server. Yaitu, berisi pernyataan yang menjelaskan cara membuat lingkungan untuk mengeksekusi kode klien.

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

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

3b. Mengedit File Python

Tambahkan ke file client.py kode berikut:

#!/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 halnya server, kami membuat yang sederhana untuk klien Dockerfile, bertanggung jawab untuk membentuk lingkungan tempat aplikasi klien Python akan berjalan. Ini kode kliennya Dockerfile:

# То же самое, что и в серверном Dockerfile.

FROM python:latest

# Импортируем 'client.py' в папку '/client/'.

ADD client.py /client/

# Устанавливаем в качестве рабочей директории '/client/'.

WORKDIR /client/

▍4. Penulisan Docker

Seperti yang Anda lihat, kami telah membuat dua proyek berbeda: server dan klien. Masing-masing memiliki filenya sendiri Dockerfile. Sejauh ini, segala sesuatu yang terjadi tidak melampaui dasar-dasar bekerja dengan Docker. Sekarang kita mulai bekerja dengan Docker Compose. Untuk melakukan hal ini, lihat file docker-compose.ymlterletak di folder root proyek.

Harap dicatat bahwa di sini kami tidak bertujuan untuk mencakup secara mutlak semua perintah yang dapat digunakan docker-compose.yml. Tujuan utama kami adalah menguraikan contoh praktis yang memberi Anda pengetahuan dasar tentang Docker Compose.

Berikut adalah kode untuk dimasukkan ke dalam file 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. Pembangunan proyek

Setelah masuk docker-compose.yml semua instruksi yang diperlukan telah dibuat, proyek perlu dirakit. Langkah pekerjaan kita ini menyerupai penggunaan perintah docker build, tetapi perintah terkait terkait dengan beberapa layanan:

$ docker-compose build

▍6. Peluncuran proyek

Sekarang proyek telah selesai dibangun, saatnya untuk menjalankannya. Langkah pekerjaan kami ini sesuai dengan langkah di mana, ketika bekerja dengan kontainer individual, perintah dijalankan docker run:

$ docker-compose up

Setelah menjalankan perintah ini, teks yang dimuat oleh klien dari server akan muncul di terminal: Docker-Compose is magic!.

Seperti yang telah disebutkan, server menggunakan port komputer 1234 untuk melayani permintaan pelanggan. Oleh karena itu, jika Anda masuk ke browser ke alamat tersebut http://localhost:1234/, itu akan menampilkan halaman dengan teks Docker-Compose is magic!.

Perintah yang Berguna

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

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

$ docker-compose down

Perintah ini mencetak log layanan:

$ docker-compose logs -f [service name]

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

Dengan perintah ini, Anda dapat menampilkan daftar container:

$ docker-compose ps

Perintah ini memungkinkan Anda menjalankan perintah dalam container yang sedang berjalan:

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

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

Perintah ini memungkinkan Anda menampilkan daftar gambar:

$ docker-compose images

Hasil

Kami telah membahas dasar-dasar bekerja dengan teknologi Docker Compose, yang pengetahuannya akan memungkinkan Anda menggunakan teknologi ini dan, jika diinginkan, mulai mempelajarinya lebih dalam. di sini adalah repositori dengan kode proyek, yang kami pertimbangkan di sini.

Pembaca yang terhormat Apakah Anda menggunakan Docker Compose di proyek Anda?

Panduan Menulis Docker untuk Pemula

Sumber: www.habr.com

Tambah komentar