Panduan Pemula untuk Mengarang Docker

Pengarang artikel, terjemahan yang kami terbitkan hari ini, mengatakan bahawa ia bertujuan untuk pembangun yang ingin mempelajari Docker Compose dan sedang bergerak ke arah mencipta aplikasi pelayan pelanggan pertama mereka menggunakan Docker. Diandaikan bahawa pembaca bahan ini sudah biasa dengan asas Docker. Jika ini tidak berlaku, anda boleh lihat ini siri bahan pada ini siaran meliputi asas Docker bersama asas Kubernetes, dan ini artikel untuk pemula.

Panduan Pemula untuk Mengarang Docker

Apakah Docker Compose?

Docker Compose ialah alat yang disertakan dengan Docker. Ia direka untuk menyelesaikan masalah yang berkaitan dengan penggunaan projek.

Semasa mempelajari asas Docker, anda mungkin mengalami penciptaan aplikasi mudah yang berfungsi secara autonomi dan tidak bergantung, contohnya, pada sumber data luaran atau pada perkhidmatan tertentu. Dalam amalan, aplikasi sedemikian jarang berlaku. Projek sebenar biasanya melibatkan keseluruhan set aplikasi yang bekerjasama.

Bagaimanakah anda tahu jika anda perlu menggunakan Docker Compose semasa menggunakan projek? Ia sebenarnya sangat mudah. Jika anda menggunakan berbilang perkhidmatan untuk membuat projek ini berfungsi, maka Docker Compose mungkin berguna. Sebagai contoh, dalam situasi di mana mereka mencipta tapak web yang perlu disambungkan ke pangkalan data untuk mengesahkan pengguna. Projek sedemikian mungkin terdiri daripada dua perkhidmatan - satu yang memastikan operasi tapak, dan satu yang bertanggungjawab untuk mengekalkan pangkalan data.

Teknologi Docker Compose, untuk menerangkannya dengan cara yang ringkas, membolehkan anda melancarkan banyak perkhidmatan dengan satu arahan.

Perbezaan antara Docker dan Docker Compose

Docker digunakan untuk mengurus bekas individu (perkhidmatan) yang membentuk aplikasi.

Docker Compose digunakan untuk mengurus berbilang bekas yang membentuk aplikasi secara serentak. Alat ini menawarkan keupayaan yang sama seperti Docker, tetapi membolehkan anda bekerja dengan aplikasi yang lebih kompleks.

Panduan Pemula untuk Mengarang Docker
Docker (bekas tunggal) dan Docker Compose (beberapa bekas)

Kes penggunaan biasa untuk Docker Compose

Docker Compose adalah, di tangan yang betul, alat yang sangat berkuasa yang membolehkan anda menggunakan aplikasi dengan cepat dengan seni bina yang kompleks. Sekarang kita akan melihat contoh penggunaan praktikal Docker Compose, analisis yang akan membolehkan anda menilai faedah yang akan diberikan oleh Docker Compose kepada anda.

Bayangkan anda adalah pembangun projek web. Projek ini merangkumi dua laman web. Yang pertama membolehkan ahli perniagaan membuat kedai dalam talian dengan hanya beberapa klik. Yang kedua bertujuan untuk sokongan pelanggan. Kedua-dua laman web ini berinteraksi dengan pangkalan data yang sama.

Projek anda menjadi semakin popular, dan ternyata kuasa pelayan di mana ia berjalan tidak lagi mencukupi. Akibatnya, anda memutuskan untuk memindahkan keseluruhan projek ke mesin lain.

Malangnya, anda tidak menggunakan sesuatu seperti Docker Compose. Oleh itu, anda perlu memindahkan dan mengkonfigurasi semula perkhidmatan satu demi satu, dengan harapan anda tidak akan melupakan apa-apa dalam proses itu.

Jika anda menggunakan Docker Compose, maka mengalihkan projek anda ke pelayan baharu adalah perkara yang boleh diselesaikan dengan menjalankan beberapa arahan. Untuk melengkapkan pemindahan projek ke lokasi baharu, anda hanya perlu membuat beberapa tetapan dan memuat naik salinan sandaran pangkalan data ke pelayan baharu.

Membangunkan aplikasi pelayan pelanggan menggunakan Docker Compose

Sekarang setelah anda tahu untuk apa kami akan gunakan Docker Compose, tiba masanya untuk mencipta aplikasi pelayan pelanggan pertama anda menggunakan alat ini. Iaitu, kita bercakap tentang membangunkan laman web kecil (pelayan) dalam Python yang boleh mengeluarkan fail dengan serpihan teks. Fail ini diminta daripada pelayan oleh program (klien), juga ditulis dalam Python. Selepas menerima fail daripada pelayan, program memaparkan teks yang disimpan di dalamnya pada skrin.

Sila ambil perhatian bahawa kami menganggap bahawa anda mempunyai pemahaman asas tentang Docker dan anda sudah memasang platform Docker.

Mari kita mula bekerja pada projek itu.

▍1. Mencipta Projek

Untuk membina aplikasi pelayan pelanggan pertama anda, saya cadangkan anda mulakan dengan mencipta folder projek. Ia harus mengandungi fail dan folder berikut:

  • fail docker-compose.yml. Ini ialah fail Docker Compose yang akan mengandungi arahan yang diperlukan untuk memulakan dan mengkonfigurasi perkhidmatan.
  • Folder server. Ia akan mengandungi fail yang diperlukan untuk memastikan pelayan berjalan.
  • Folder client. Fail aplikasi klien akan terletak di sini.

Akibatnya, kandungan folder utama projek anda sepatutnya kelihatan seperti ini:

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

▍2. Mencipta pelayan

Di sini, dalam proses mencipta pelayan, kami akan menyentuh beberapa perkara asas berkenaan Docker.

2a. Mencipta fail

Pergi ke folder server dan buat fail berikut di dalamnya:

  • fail server.py. Ia akan mengandungi kod pelayan.
  • fail index.html. Fail ini akan mengandungi sekeping teks yang harus dikeluarkan oleh aplikasi klien.
  • fail Dockerfile. Ini ialah fail Docker yang akan mengandungi arahan yang diperlukan untuk mencipta persekitaran pelayan.

Beginilah rupa kandungan folder anda server/:

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

2b. Mengedit fail Python.

Tambahkan pada fail server.py kod 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()

Kod ini membolehkan anda membuat pelayan web mudah. Dia akan memberikan fail kepada pelanggan index.html, yang kandungannya kemudiannya akan dipaparkan pada halaman web.

2c. Mengedit Fail HTML

Untuk memfailkan index.html tambah teks berikut:

Docker-Compose is magic!

Teks ini akan dihantar kepada pelanggan.

2h. Mengedit fail Docker

Sekarang kita akan membuat fail mudah Dockerfile, yang akan bertanggungjawab untuk mengatur persekitaran masa jalan untuk pelayan Python. Sebagai asas untuk imej yang dibuat, kami akan menggunakan secara rasmi, direka untuk menjalankan program yang ditulis dalam Python. Berikut ialah kandungan 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 mula bekerja pada pelanggan.

▍3. Mencipta pelanggan

Semasa mencipta bahagian pelanggan projek kami, kami akan mengingati beberapa asas Docker sepanjang perjalanan.

3a. Mencipta fail

Pergi ke folder projek anda client dan buat fail berikut di dalamnya:

  • fail client.py. Kod pelanggan akan terletak di sini.
  • fail Dockerfile. Fail ini memainkan peranan yang sama seperti fail serupa dalam folder pelayan. Iaitu, ia mengandungi arahan yang menerangkan cara mencipta persekitaran untuk melaksanakan kod klien.

Akibatnya, folder anda client/ pada peringkat kerja ini ia sepatutnya kelihatan seperti ini:

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

3b. Mengedit Fail Python

Tambahkan pada fail client.py kod 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()

Dengan kod ini, aplikasi klien boleh memuat turun data dari pelayan dan memaparkannya pada skrin.

3c. Mengedit fail Docker

Seperti dalam kes pelayan, kami mencipta yang mudah Dockerfile, bertanggungjawab untuk mewujudkan persekitaran di mana aplikasi klien Python akan dijalankan. Berikut ialah kod pelanggan Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Karang Docker

Seperti yang anda mungkin perasan, kami mencipta dua projek berbeza: pelayan dan pelanggan. Setiap daripada mereka mempunyai fail sendiri Dockerfile. Setakat ini, semua yang berlaku tidak melampaui asas bekerja dengan Docker. Sekarang kita mulakan dengan Docker Compose. Untuk melakukan ini, mari pergi ke fail docker-compose.yml, terletak dalam folder akar projek.

Sila ambil perhatian bahawa di sini kami tidak cuba untuk merangkumi sepenuhnya semua arahan yang boleh digunakan docker-compose.yml. Matlamat utama kami adalah untuk melihat contoh praktikal yang akan memberi anda pengetahuan asas tentang Docker Compose.

Berikut adalah kod untuk dimasukkan ke dalam fail 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. Membina projek

Selepas masuk docker-compose.yml Semua arahan yang diperlukan telah dimasukkan, projek itu perlu dipasang. Langkah kerja kami ini serupa dengan menggunakan arahan docker build, tetapi arahan yang sepadan adalah berkaitan dengan beberapa perkhidmatan:

$ docker-compose build

▍6. Pelancaran projek

Selepas projek itu dipasang, tiba masanya untuk melancarkannya. Langkah kerja kami ini sepadan dengan langkah di mana, apabila bekerja dengan bekas individu, arahan itu dilaksanakan docker run:

$ docker-compose up

Selepas melaksanakan arahan ini, teks yang dimuat turun oleh klien dari pelayan harus muncul di terminal: Docker-Compose is magic!.

Seperti yang telah disebutkan, pelayan menggunakan port komputer 1234 untuk melayani permintaan pelanggan. Oleh itu, jika anda pergi ke alamat dalam pelayar anda http://localhost:1234/, ia akan memaparkan halaman dengan teks Docker-Compose is magic!.

Perintah yang berguna

Mari lihat beberapa arahan yang mungkin anda rasa berguna semasa bekerja dengan Docker Compose.

Perintah ini membolehkan anda menghentikan dan memadam bekas dan sumber lain yang dibuat oleh arahan itu docker-compose up:

$ docker-compose down

Perintah ini mencetak log perkhidmatan:

$ docker-compose logs -f [service name]

Sebagai contoh, dalam projek kami ia boleh digunakan dalam bentuk ini: $ docker-compose logs -f [service name].

Menggunakan arahan ini anda boleh memaparkan senarai bekas:

$ docker-compose ps

Perintah ini membolehkan anda melaksanakan arahan dalam bekas yang sedang berjalan:

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

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

Perintah ini membolehkan anda memaparkan senarai imej:

$ docker-compose images

Keputusan

Kami telah melihat asas bekerja dengan teknologi Docker Compose, pengetahuan yang akan membolehkan anda menggunakan teknologi ini dan, jika mahu, mula mengkajinya dengan lebih mendalam. di sini ialah repositori dengan kod untuk projek yang kami lihat di sini.

Pembaca yang dihormati! Adakah anda menggunakan Docker Compose dalam projek anda?

Panduan Pemula untuk Mengarang Docker

Sumber: www.habr.com

Tambah komen