Docker Compose Guide pikeun Beginners

Panulis tulisan, tarjamahan anu kami publikasikeun ayeuna, nyatakeun yén éta dimaksudkeun pikeun pamekar anu hoyong diajar Docker Compose sareng nuju nyiptakeun aplikasi klien-server anu munggaran nganggo Docker. Dianggap yén pamaca bahan ieu wawuh sareng dasar-dasar Docker. Upami teu kitu, anjeun tiasa nyandak katingal di ieu runtuyan bahan dina ieu pos ngawengku dasar Docker sapanjang kalawan dasar Kubernetes, jeung ieu artikel pikeun beginners.

Docker Compose Guide pikeun Beginners

Naon Docker Compose?

Docker Compose mangrupikeun alat anu kalebet sareng Docker. Éta dirancang pikeun ngabéréskeun masalah anu aya hubunganana sareng panyebaran proyék.

Nalika diajar dasar-dasar Docker, anjeun tiasa nyanghareupan nyiptakeun aplikasi saderhana anu tiasa dianggo sacara mandiri sareng henteu gumantung, contona, kana sumber data éksternal atanapi dina jasa anu tangtu. Dina prakték, aplikasi sapertos jarang. Proyék nyata biasana ngalibatkeun sakumpulan aplikasi anu damel babarengan.

Kumaha anjeun terang upami anjeun kedah nganggo Docker Compose nalika nyebarkeun proyék? Ieu sabenerna basajan pisan. Upami anjeun nganggo sababaraha jasa pikeun ngajantenkeun proyék ieu, maka Docker Compose tiasa dianggo. Salaku conto, dina kaayaan dimana aranjeunna nyiptakeun halaman wéb anu kedah nyambung ka pangkalan data pikeun ngabuktoskeun kaaslianana pangguna. Proyék sapertos kitu tiasa diwangun ku dua jasa - anu ngajamin operasi situs, sareng anu tanggung jawab pikeun ngajaga pangkalan data.

Téknologi Docker Compose, pikeun ngajelaskeun éta ku cara anu saderhana, ngamungkinkeun anjeun ngaluncurkeun seueur jasa kalayan hiji paréntah.

Bédana antara Docker sareng Docker Compose

Docker dianggo pikeun ngatur wadah individu (jasa) anu ngawangun hiji aplikasi.

Docker Compose dianggo pikeun sakaligus ngatur sababaraha wadah anu ngawangun hiji aplikasi. Alat ieu nawiskeun kamampuan anu sami sareng Docker, tapi ngamungkinkeun anjeun damel sareng aplikasi anu langkung kompleks.

Docker Compose Guide pikeun Beginners
Docker (wadah tunggal) sareng Docker Compose (sababaraha wadah)

Kasus panggunaan biasa pikeun Docker Compose

Docker Compose nyaéta, dina panangan anu leres, alat anu kuat pisan anu ngamungkinkeun anjeun gancang pisan nyebarkeun aplikasi sareng arsitéktur anu kompleks. Ayeuna urang bakal ningali conto panggunaan praktis Docker Compose, analisa anu bakal ngamungkinkeun anjeun ngira-ngira kauntungan anu bakal dipasihkeun ku Docker Compose.

Bayangkeun yén anjeun pamekar proyék wéb. Proyék ieu kalebet dua situs wéb. Anu kahiji ngamungkinkeun jalma-jalma bisnis nyiptakeun toko online kalayan ngan ukur sababaraha klik. Anu kadua ditujukeun pikeun dukungan palanggan. Dua situs ieu berinteraksi sareng database anu sami.

Proyék anjeun janten langkung populer, sareng tétéla yén kakuatan server anu dijalankeun henteu cekap. Hasilna, anjeun mutuskeun pikeun mindahkeun sakabéh proyék ka mesin sejen.

Hanjakalna, anjeun henteu nganggo anu sapertos Docker Compose. Ku alatan éta, anjeun kedah nransfer sareng ngonpigurasikeun deui jasa hiji-hiji, ngarepkeun anjeun moal hilap nanaon dina prosésna.

Upami anjeun nganggo Docker Compose, teras mindahkeun proyék anjeun ka server énggal mangrupikeun masalah anu tiasa direngsekeun ku ngajalankeun sababaraha paréntah. Dina raraga ngalengkepan mindahkeun proyék ka lokasi anyar, anjeun ngan kudu nyieun sababaraha setélan jeung unggah salinan cadangan database ka server anyar.

Ngembangkeun aplikasi klien-server nganggo Docker Compose

Ayeuna anjeun terang naon anu bakal kami anggo Docker Compose, waktosna pikeun nyiptakeun aplikasi klien-server munggaran anjeun nganggo alat ieu. Nyaéta, urang ngobrol ngeunaan ngamekarkeun ramatloka leutik (server) dina Python nu bisa kaluaran file kalawan sempalan téks. file ieu dipénta ti server ku program (klien), ogé ditulis dina Python. Saatos nampi file ti server, program nampilkeun téks anu disimpen dina éta dina layar.

Punten dicatet yén kami nganggap yén anjeun gaduh pamahaman dasar ngeunaan Docker sareng anjeun parantos dipasang platform Docker.

Hayu urang mimitian gawé dina proyék.

▍1. Nyiptakeun Proyék

Pikeun ngawangun aplikasi klien-server munggaran anjeun, kuring nyarankeun anjeun ngamimitian ku nyiptakeun polder proyék. Éta kedah ngandung file sareng polder di handap ieu:

  • file docker-compose.yml. Ieu mangrupikeun file Docker Compose anu bakal ngandung petunjuk anu diperyogikeun pikeun ngamimitian sareng ngonpigurasikeun jasa.
  • map server. Bakal ngandung file anu dipikabutuh pikeun ngajaga server jalan.
  • map client. File aplikasi klien bakal aya di dieu.

Hasilna, eusi folder utama proyék anjeun kedah sapertos kieu:

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

▍2. Nyiptakeun server

Di dieu, dina prosés nyiptakeun server, urang bakal nyabak sababaraha hal dasar ngeunaan Docker.

2a. Nyieun file

Buka polder server sareng jieun file di handap ieu di jerona:

  • file server.py. Bakal ngandung kode server.
  • file index.html. Berkas ieu bakal ngandung sapotong téks anu kedah dikaluarkeun ku aplikasi klien.
  • file Dockerfile. Ieu mangrupikeun file Docker anu bakal ngandung petunjuk anu diperyogikeun pikeun nyiptakeun lingkungan server.

Ieu naon eusi folder anjeun kedah kasampak kawas server/:

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

2b. Ngédit file Python.

Tambahkeun ka file server.py kodeu handap:

#!/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 ieu ngidinan Anjeun pikeun nyieun hiji web server basajan. Anjeunna bakal masihan klien file index.html, eusina engké bakal dipintonkeun dina kaca wéb.

2c. Ngédit File HTML

Pikeun file index.html tambahkeun téks di handap ieu:

Docker-Compose is magic!

Téks ieu bakal dikirim ka klien.

2d. Ngédit Dockerfile

Ayeuna urang bakal nyieun file basajan Dockerfile, anu bakal tanggung jawab pikeun ngatur lingkungan runtime pikeun server Python. Salaku dadasar pikeun gambar dijieun, urang bakal ngagunakeun sacara resmi, dirancang pikeun ngajalankeun program ditulis dina Python. Ieu eusi 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/

Ayeuna hayu urang ngamimitian ngerjakeun klien.

▍3. Nyiptakeun klien

Nalika nyiptakeun sisi klien tina proyék kami, kami bakal émut sababaraha dasar Docker sapanjang jalan.

3a. Nyieun file

Pindah ka folder proyék anjeun client sareng jieun file di handap ieu di jerona:

  • file client.py. Kodeu klien bakal aya di dieu.
  • file Dockerfile. Berkas ieu maénkeun peran anu sami sareng file anu sami dina folder server. Nyaéta, éta ngandung petunjuk anu ngajelaskeun kumaha cara nyiptakeun lingkungan pikeun ngalaksanakeun kode klien.

Hasilna, folder Anjeun client/ Dina tahap ieu karya kudu kasampak kawas kieu:

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

3b. Ngédit File Python

Tambahkeun ka file client.py kodeu handap:

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

Kalayan kode ieu, aplikasi klien tiasa ngaunduh data tina pangladén sareng nampilkeunana dina layar.

3c. Ngédit Dockerfile

Saperti dina kasus server, urang nyieun basajan Dockerfile, tanggung jawab pikeun nyiptakeun lingkungan dimana aplikasi klien Python bakal dijalankeun. Ieu kode klien Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Nyusun

Sakumaha anjeun tiasa tingali, kami nyiptakeun dua proyék anu béda: server sareng klien. Tiap di antarana boga file sorangan Dockerfile. Sajauh ieu, sadaya anu kajantenan henteu langkung seueur tina dasar gawé bareng Docker. Ayeuna urang ngamimitian sareng Docker Compose. Jang ngalampahkeun ieu, hayu urang buka file docker-compose.yml, ayana dina folder root proyék.

Punten dicatet yén di dieu urang henteu nyobian nutupan sadayana paréntah anu tiasa dianggo docker-compose.yml. Tujuan utama kami nyaéta pikeun ngalangkungan conto praktis anu bakal masihan anjeun pangaweruh dasar ngeunaan Docker Compose.

Ieu kode pikeun nempatkeun dina 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. Ngawangun proyék

Sanggeus di docker-compose.yml Sadaya petunjuk anu diperyogikeun parantos diasupkeun, proyék kedah dirakit. Léngkah ieu padamelan urang sami sareng nganggo paréntah docker build, tapi paréntah anu cocog relevan pikeun sababaraha jasa:

$ docker-compose build

▍6. Peluncuran proyék

Ayeuna yén proyék éta dirakit, waktosna pikeun ngaluncurkeunana. Léngkah ieu padamelan urang saluyu sareng léngkah dimana, nalika damel sareng wadah individu, paréntahna dieksekusi docker run:

$ docker-compose up

Saatos ngalaksanakeun paréntah ieu, téks anu diunduh ku klien tina server kedah muncul dina terminal: Docker-Compose is magic!.

Sakumaha geus disebutkeun, server ngagunakeun port komputer 1234 pikeun ngalayanan paménta klien. Ku alatan éta, lamun buka alamat dina panyungsi anjeun http://localhost:1234/, éta bakal nembongkeun kaca sareng téks Docker-Compose is magic!.

Paréntah mangpaat

Hayu urang tingali sababaraha paréntah anu anjeun tiasa mendakan nalika damel sareng Docker Compose.

Paréntah ieu ngamungkinkeun anjeun ngeureunkeun sareng mupus wadah sareng sumber daya sanés anu diciptakeun ku paréntah docker-compose up:

$ docker-compose down

Paréntah ieu nyitak log jasa:

$ docker-compose logs -f [service name]

Contona, dina proyék urang bisa dipaké dina formulir ieu: $ docker-compose logs -f [service name].

Nganggo paréntah ieu anjeun tiasa ningalikeun daptar wadah:

$ docker-compose ps

Paréntah ieu ngamungkinkeun anjeun ngaéksekusi paréntah dina wadah anu ngajalankeun:

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

Contona, éta bisa kasampak kawas kieu: docker-compose exec server ls.

Paréntah ieu ngamungkinkeun anjeun pikeun nampilkeun daptar gambar:

$ docker-compose images

hasil

Kami parantos ningali dasar-dasar damel sareng téknologi Docker Compose, pangaweruh anu bakal ngamungkinkeun anjeun ngagunakeun téknologi ieu sareng, upami hoyong, mimitian diajar langkung jero. di dieu a Repository jeung kode pikeun proyék kami kasampak di dieu.

Pamiarsa Hadirin! Naha anjeun nganggo Docker Compose dina proyék anjeun?

Docker Compose Guide pikeun Beginners

sumber: www.habr.com

Tambahkeun komentar