Pandhuan Pemula kanggo Docker Compose

Penulis artikel kasebut, terjemahan sing diterbitake saiki, ujar manawa iki ditujokake kanggo para pangembang sing pengin sinau Docker Compose lan bakal nggawe aplikasi klien-server pisanan nggunakake Docker. Dianggep manawa maca materi iki wis kenal karo dhasar Docker. Yen iki ora cilik, sampeyan bisa njupuk dipikir ing iki seri bahan ing iki kirim panutup Docker dhasar bebarengan karo dhasar Kubernetes, lan iki artikel kanggo pamula.

Pandhuan Pemula kanggo Docker Compose

Apa Docker Compose?

Docker Compose minangka alat sing kalebu karo Docker. Iki dirancang kanggo ngatasi masalah sing ana gandhengane karo panyebaran proyek.

Nalika sinau dhasar Docker, sampeyan bisa uga nemoni nggawe aplikasi prasaja sing bisa digunakake kanthi mandiri lan ora gumantung, contone, ing sumber data eksternal utawa layanan tartamtu. Ing laku, aplikasi kasebut arang banget. Proyek nyata biasane nglibatake kabeh aplikasi sing bisa digunakake bebarengan.

Kepiye sampeyan ngerti yen sampeyan kudu nggunakake Docker Compose nalika nggunakake proyek? Iku bener banget prasaja. Yen sampeyan nggunakake macem-macem layanan kanggo nggawe proyek iki, Docker Compose bisa uga migunani. Contone, ing kahanan sing nggawe situs web sing kudu nyambung menyang database supaya bisa otentikasi pangguna. Proyek kasebut bisa uga kalebu rong layanan - sing njamin operasi situs kasebut, lan sing tanggung jawab kanggo njaga database.

Teknologi Docker Compose, kanggo njlèntrèhaké kanthi cara sing disederhanakaké, ngidini sampeyan miwiti akeh layanan kanthi siji printah.

Bedane antarane Docker lan Docker Compose

Docker digunakake kanggo ngatur wadhah individu (layanan) sing nggawe aplikasi.

Docker Compose digunakake kanggo ngatur macem-macem wadah sing nggawe aplikasi bebarengan. Alat iki nawakake kemampuan sing padha karo Docker, nanging ngidini sampeyan nggarap aplikasi sing luwih rumit.

Pandhuan Pemula kanggo Docker Compose
Docker (wadhah tunggal) lan Docker Compose (multi wadah)

Kasus panggunaan khas kanggo Docker Compose

Docker Compose, ing tangan tengen, alat sing kuat banget sing ngidini sampeyan nyebarake aplikasi kanthi arsitektur rumit kanthi cepet. Saiki kita bakal ndeleng conto panggunaan praktis Docker Compose, analisa kasebut bakal ngidini sampeyan ngevaluasi keuntungan sing bakal diwenehake dening Docker Compose.

Bayangake sampeyan minangka pangembang proyek web. Proyek iki kalebu rong situs web. Pisanan ngidini wong bisnis nggawe toko online kanthi mung sawetara klik. Kapindho ngarahake dhukungan pelanggan. Iki loro situs sesambungan karo database padha.

Proyek sampeyan dadi luwih populer, lan ternyata kekuwatan server sing ditindakake ora cukup maneh. Akibaté, sampeyan mutusake kanggo mindhah kabeh proyek menyang mesin liyane.

Sayange, sampeyan ora nggunakake kaya Docker Compose. Mulane, sampeyan kudu nransfer lan ngatur ulang layanan siji-sijine, ngarep-arep sampeyan ora bakal lali apa-apa ing proses kasebut.

Yen sampeyan nggunakake Docker Compose, banjur mindhah proyek sampeyan menyang server anyar minangka masalah sing bisa ditanggulangi kanthi nggunakake sawetara perintah. Kanggo ngrampungake transfer proyek menyang lokasi anyar, sampeyan mung kudu nggawe sawetara setelan lan upload salinan serep database menyang server anyar.

Ngembangake aplikasi klien-server nggunakake Docker Compose

Saiki sampeyan ngerti apa sing bakal digunakake Docker Compose, wektune nggawe aplikasi klien-server pisanan sampeyan nggunakake alat iki. Yaiku, kita ngomong babagan ngembangake situs web (server) cilik ing Python sing bisa ngasilake file kanthi fragmen teks. Berkas iki dijaluk saka server dening program (klien), uga ditulis ing Python. Sawise nampa file saka server, program nampilake teks sing disimpen ing layar.

Wigati dimangerteni manawa sampeyan duwe pangerten dhasar babagan Docker lan sampeyan wis nginstal platform Docker.

Ayo miwiti nggarap proyek kasebut.

▍1. Nggawe Proyek

Kanggo mbangun aplikasi klien-server pisanan, aku saranake sampeyan miwiti nggawe folder proyek. Sampeyan kudu ngemot file lan folder ing ngisor iki:

  • berkas docker-compose.yml. Iki minangka file Docker Compose sing bakal ngemot instruksi sing dibutuhake kanggo miwiti lan ngatur layanan kasebut.
  • Folder server. Bakal ngemot file sing dibutuhake supaya server tetep mlaku.
  • Folder client. File aplikasi klien bakal ana ing kene.

Akibaté, isi folder utama proyek sampeyan kudu katon kaya iki:

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

▍2. Nggawe server

Ing kene, ing proses nggawe server, kita bakal ndemek sawetara perkara dhasar babagan Docker.

2a. Nggawe file

Bukak folder server lan gawe file ing ngisor iki:

  • berkas server.py. Bakal ngemot kode server.
  • berkas index.html. Berkas iki bakal ngemot potongan teks sing kudu ditindakake dening aplikasi klien.
  • berkas Dockerfile. Iki minangka file Docker sing bakal ngemot instruksi sing dibutuhake kanggo nggawe lingkungan server.

Iki kaya apa isi folder sampeyan server/:

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

2b. Ngowahi file Python.

Tambah menyang file server.py kode ing ngisor iki:

#!/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 iki ngidini sampeyan nggawe server web sing prasaja. Dheweke bakal menehi klien file kasebut index.html, sing isine mengko bakal ditampilake ing kaca web.

2c. Ngedit File HTML

Kanggo file index.html tambahake teks ing ngisor iki:

Docker-Compose is magic!

Teks iki bakal dikirim menyang klien.

2d. Ngowahi file Docker

Saiki kita bakal nggawe file prasaja Dockerfile, sing bakal tanggung jawab kanggo ngatur lingkungan runtime kanggo server Python. Minangka basis kanggo gambar sing digawe, kita bakal nggunakake kanthi resmi, dirancang kanggo mbukak program ditulis ing Python. Punika 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/

Saiki ayo miwiti nggarap klien.

▍3. Nggawe klien

Nalika nggawe sisih klien proyek kita, kita bakal ngelingi sawetara dhasar Docker ing sadawane dalan.

3a. Nggawe file

Pindhah menyang folder proyek sampeyan client lan gawe file ing ngisor iki:

  • berkas client.py. Kode klien bakal ana ing kene.
  • berkas Dockerfile. Berkas iki nduweni peran sing padha karo file sing padha ing folder server. Yaiku, ngemot instruksi sing nerangake carane nggawe lingkungan kanggo nglakokake kode klien.

Akibaté, folder sampeyan client/ ing tataran iki karya kudu katon kaya iki:

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

3b. Ngedit File Python

Tambah menyang file client.py kode ing ngisor iki:

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

Kanthi kode iki, aplikasi klien bisa ndownload data saka server lan nampilake ing layar.

3c. Ngowahi file Docker

Kaya ing kasus server, kita nggawe prasaja Dockerfile, tanggung jawab kanggo nggawe lingkungan ing ngendi aplikasi klien Python bakal mbukak. Punika kode klien Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Compose

Kaya sing wis dingerteni, kita nggawe rong proyek beda: server lan klien. Saben wong duwe file dhewe Dockerfile. Nganti saiki, kabeh sing kedadeyan ora ngluwihi dhasar kerja karo Docker. Saiki kita miwiti karo Docker Compose. Kanggo nindakake iki, ayo pindhah menyang file docker-compose.yml, dumunung ing folder root project.

Elinga yen ing kene kita ora nyoba nutupi kabeh perintah sing bisa digunakake docker-compose.yml. Tujuan utama kita yaiku lumaku liwat conto praktis sing bakal menehi kawruh dhasar babagan Docker Compose.

Punika kode kanggo dilebokake ing 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. Nggawe proyek

Sawise ing docker-compose.yml Kabeh instruksi sing dibutuhake wis dilebokake, proyek kasebut kudu dirakit. Langkah karya kita iki padha karo nggunakake printah docker build, nanging printah sing cocog cocog karo sawetara layanan:

$ docker-compose build

▍6. Bukak proyek

Saiki proyek wis dirakit, wektune kanggo miwiti. Langkah karya kita iki cocog karo langkah sing, nalika nggarap wadhah individu, perintah kasebut dieksekusi docker run:

$ docker-compose up

Sawise nglakokake printah iki, teks sing diundhuh dening klien saka server kudu katon ing terminal: Docker-Compose is magic!.

Kaya sing wis kasebut, server nggunakake port komputer 1234 kanggo layanan panjalukan klien. Mulane, yen sampeyan pindhah menyang alamat ing browser Panjenengan http://localhost:1234/, bakal nampilake kaca kanthi teks Docker-Compose is magic!.

printah migunani

Ayo goleki sawetara prentah sing bisa migunani nalika nggarap Docker Compose.

Printah iki ngidini sampeyan kanggo mungkasi lan mbusak wadhah lan sumber daya liyane digawe dening printah docker-compose up:

$ docker-compose down

Printah iki nyithak log layanan:

$ docker-compose logs -f [service name]

Contone, ing proyek kita bisa digunakake ing wangun iki: $ docker-compose logs -f [service name].

Nggunakake printah iki sampeyan bisa nampilake dhaptar wadhah:

$ docker-compose ps

Printah iki ngidini sampeyan nglakokake printah ing wadhah sing mlaku:

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

Contone, bisa uga katon kaya iki: docker-compose exec server ls.

Printah iki ngidini sampeyan nampilake dhaptar gambar:

$ docker-compose images

Hasil

Kita wis ndeleng dhasar nggarap teknologi Docker Compose, kawruh sing bakal ngidini sampeyan nggunakake teknologi iki lan, yen pengin, miwiti sinau kanthi luwih jero. kene gudang karo kode kanggo project kita katon ing kene.

Para pamaca ingkang kinurmatan! Apa sampeyan nggunakake Docker Compose ing proyek sampeyan?

Pandhuan Pemula kanggo Docker Compose

Source: www.habr.com

Add a comment