Yeni Başlayanlar İçin Docker Compose Kılavuzu

Bugün çevirisini yayınladığımız makalenin yazarı, Docker Compose'u öğrenmek isteyen ve Docker kullanarak ilk istemci-sunucu uygulamasını oluşturmaya doğru ilerleyen geliştiricilere yönelik olduğunu söylüyor. Bu materyalin okuyucusunun Docker'ın temellerine aşina olduğu varsayılmaktadır. Eğer durum böyle değilse, şuna bir göz atabilirsiniz: bu bir dizi malzeme bu Kubernetes temellerinin yanı sıra Docker temellerini kapsayan gönderi ve bu yeni başlayanlar için makale.

Yeni Başlayanlar İçin Docker Compose Kılavuzu

Docker Compose nedir?

Docker Compose, Docker'da bulunan bir araçtır. Proje dağıtımıyla ilgili sorunları çözmek için tasarlanmıştır.

Docker'ın temellerini öğrenirken, otonom olarak çalışan ve örneğin harici veri kaynaklarına veya belirli hizmetlere bağlı olmayan basit uygulamaların oluşturulmasıyla karşılaşmış olabilirsiniz. Pratikte bu tür uygulamalar nadirdir. Gerçek projeler genellikle birlikte çalışan bir dizi uygulamayı içerir.

Bir projeyi dağıtırken Docker Compose'u kullanmanız gerekip gerekmediğini nasıl anlarsınız? Aslında çok basit. Bu projenin çalışması için birden fazla hizmet kullanıyorsanız Docker Compose işinize yarayabilir. Örneğin, kullanıcıların kimliğini doğrulamak için bir veritabanına bağlanması gereken bir web sitesi oluşturdukları bir durumda. Böyle bir proje iki hizmetten oluşabilir - sitenin çalışmasını sağlayan ve veritabanının bakımından sorumlu olan.

Docker Compose teknolojisi, basitleştirilmiş bir şekilde açıklamak gerekirse, birçok hizmeti tek komutla başlatmanıza olanak tanır.

Docker ve Docker Compose arasındaki fark

Docker, bir uygulamayı oluşturan bireysel konteynerleri (hizmetleri) yönetmek için kullanılır.

Docker Compose, bir uygulamayı oluşturan birden fazla kapsayıcıyı aynı anda yönetmek için kullanılır. Bu araç, Docker ile aynı yetenekleri sunar ancak daha karmaşık uygulamalarla çalışmanıza olanak tanır.

Yeni Başlayanlar İçin Docker Compose Kılavuzu
Docker (tek konteyner) ve Docker Compose (çoklu konteyner)

Docker Compose'un tipik kullanım durumu

Docker Compose, doğru ellerde, karmaşık mimarilere sahip uygulamaları çok hızlı bir şekilde dağıtmanıza olanak tanıyan çok güçlü bir araçtır. Şimdi, analizi Docker Compose kullanmanın size sağlayacağı faydaları değerlendirmenizi sağlayacak Docker Compose'un pratik kullanımına ilişkin bir örneğe bakacağız.

Bir web projesinin geliştiricisi olduğunuzu hayal edin. Bu proje iki web sitesini içermektedir. Birincisi, iş adamlarının yalnızca birkaç tıklamayla çevrimiçi mağazalar oluşturmasına olanak tanır. İkincisi müşteri desteğine yöneliktir. Bu iki site aynı veritabanıyla etkileşime girer.

Projeniz giderek daha popüler hale geliyor ve üzerinde çalıştığı sunucunun gücünün artık yeterli olmadığı ortaya çıkıyor. Sonuç olarak tüm projeyi başka bir makineye taşımaya karar veriyorsunuz.

Maalesef Docker Compose gibi bir şey kullanmadınız. Bu nedenle, süreçte hiçbir şeyi unutmayacağınızı umarak hizmetleri birer birer aktarmanız ve yeniden yapılandırmanız gerekecektir.

Docker Compose kullanıyorsanız projenizi yeni bir sunucuya taşımak birkaç komut çalıştırarak çözülebilecek bir konudur. Projenin yeni bir konuma aktarımını tamamlamak için yalnızca bazı ayarları yapmanız ve veritabanının yedek kopyasını yeni sunucuya yüklemeniz yeterlidir.

Docker Compose kullanarak istemci-sunucu uygulaması geliştirme

Artık Docker Compose'u ne için kullanacağımızı bildiğinize göre, bu aracı kullanarak ilk istemci-sunucu uygulamanızı oluşturmanın zamanı geldi. Yani Python'da bir metin parçası içeren bir dosyanın çıktısını alabilen küçük bir web sitesi (sunucu) geliştirmekten bahsediyoruz. Bu dosya yine Python'da yazılmış bir program (istemci) tarafından sunucudan istenir. Sunucudan bir dosya aldıktan sonra program, içinde saklanan metni ekranda görüntüler.

Docker hakkında temel bilgilere sahip olduğunuzu ve Docker platformunun zaten kurulu olduğunu varsaydığımızı lütfen unutmayın.

Proje üzerinde çalışmaya başlayalım.

▍1. Proje Oluşturma

İlk istemci-sunucu uygulamanızı oluşturmak için bir proje klasörü oluşturarak başlamanızı öneririm. Aşağıdaki dosya ve klasörleri içermelidir:

  • Dosya docker-compose.yml. Bu, hizmetleri başlatmak ve yapılandırmak için gereken talimatları içeren bir Docker Compose dosyasıdır.
  • Dosya server. Sunucunun çalışır durumda kalması için gerekli dosyaları içerecektir.
  • Dosya client. İstemci uygulama dosyaları burada bulunacaktır.

Sonuç olarak projenizin ana klasörünün içeriği şu şekilde görünmelidir:

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

▍2. Sunucu oluşturma

Burada sunucu oluşturma sürecinde Docker ile ilgili bazı temel konulara değineceğiz.

2a. Dosya oluşturma

klasöre git server ve içinde aşağıdaki dosyaları oluşturun:

  • Dosya server.py. Sunucu kodunu içerecektir.
  • Dosya index.html. Bu dosya, istemci uygulamasının çıktısını alması gereken bir metin parçası içerecektir.
  • Dosya Dockerfile. Bu, sunucu ortamını oluşturmak için gereken talimatları içeren bir Docker dosyasıdır.

Klasörünüzün içeriği böyle görünmeli server/:

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

2b. Python dosyasını düzenleme.

dosyaya ekle server.py aşağıdaki kod:

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

Bu kod basit bir web sunucusu oluşturmanıza olanak sağlar. Müşterilere dosyayı verecek index.htmliçeriği daha sonra web sayfasında görüntülenecektir.

2c. HTML Dosyasını Düzenleme

Dosyalamak index.html aşağıdaki metni ekleyin:

Docker-Compose is magic!

Bu metin müşteriye gönderilecektir.

2d. Docker dosyasını düzenleme

Şimdi basit bir dosya oluşturacağız DockerfilePython sunucusunun çalışma zamanı ortamını düzenlemekten sorumlu olacak kişi. Oluşturulan görüntünün temeli olarak kullanacağız resmi bir şekildePython'da yazılmış programları çalıştırmak için tasarlanmıştır. İşte Dockerfile'ın içeriği:

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

Şimdi istemci üzerinde çalışmaya başlayalım.

▍3. İstemci oluşturma

Projemizin istemci tarafını oluştururken Docker'ın bazı temel bilgilerini hatırlayacağız.

3a. Dosya oluşturma

Proje klasörünüze gidin client ve içinde aşağıdaki dosyaları oluşturun:

  • Dosya client.py. Müşteri kodu burada yer alacaktır.
  • Dosya Dockerfile. Bu dosya, sunucu klasöründeki benzer bir dosyayla aynı rolü oynar. Yani, istemci kodunun yürütülmesi için bir ortamın nasıl oluşturulacağını açıklayan talimatlar içerir.

Sonuç olarak, klasörünüz client/ işin bu aşamasında şöyle görünmelidir:

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

3b. Python Dosyasını Düzenleme

dosyaya ekle client.py aşağıdaki kod:

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

Bu kod ile istemci uygulaması sunucudan veri indirebilir ve ekranda görüntüleyebilir.

3c. Docker dosyasını düzenleme

Sunucu örneğinde olduğu gibi basit bir şey oluşturuyoruz DockerfilePython istemci uygulamasının çalışacağı ortamı oluşturmaktan sorumludur. İşte müşteri kodu Dockerfile:

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

FROM python:latest

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

ADD client.py /client/

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

WORKDIR /client/

▍4. Docker Oluşturma

Fark etmiş olabileceğiniz gibi iki farklı proje oluşturduk: bir sunucu ve bir istemci. Her birinin kendi dosyası var Dockerfile. Şu ana kadar gerçekleşen her şey Docker ile çalışmanın temellerinin ötesine geçmedi. Şimdi Docker Compose'a başlıyoruz. Bunu yapmak için dosyaya gidelim docker-compose.yml, proje kök klasöründe bulunur.

Burada kullanılabilecek tüm komutları kesinlikle kapsamaya çalışmadığımızı lütfen unutmayın. docker-compose.yml. Ana amacımız size Docker Compose'un temel bilgilerini verecek pratik bir örnek üzerinden yürümek.

İşte dosyaya koyacağımız kod 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. Projeyi inşa etmek

Sonra docker-compose.yml Gerekli tüm talimatlar girildi, projenin montajı gerekiyor. Çalışmamızın bu adımı komutu kullanmaya benzer docker buildancak karşılık gelen komut birkaç hizmetle ilgilidir:

$ docker-compose build

▍6. Projenin lansmanı

Artık proje oluşturulduğuna göre, onu başlatmanın zamanı geldi. Çalışmamızın bu adımı, bireysel kaplarla çalışırken komutun yürütüldüğü adıma karşılık gelir docker run:

$ docker-compose up

Bu komutu yürüttükten sonra istemci tarafından sunucudan indirilen metin terminalde görünmelidir: Docker-Compose is magic!.

Daha önce de belirtildiği gibi, sunucu bilgisayar bağlantı noktasını kullanır 1234 Müşteri isteklerine hizmet etmek. Bu nedenle, tarayıcınızdaki adrese giderseniz http://localhost:1234/, metin içeren bir sayfa görüntüleyecektir Docker-Compose is magic!.

Faydalı Komutlar

Docker Compose ile çalışırken faydalı bulabileceğiniz bazı komutlara bakalım.

Bu komut, komut tarafından oluşturulan kapsayıcıları ve diğer kaynakları durdurmanıza ve silmenize olanak tanır docker-compose up:

$ docker-compose down

Bu komut hizmet günlüklerini yazdırır:

$ docker-compose logs -f [service name]

Örneğin projemizde şu şekilde kullanılabilir: $ docker-compose logs -f [service name].

Bu komutu kullanarak konteynerlerin bir listesini görüntüleyebilirsiniz:

$ docker-compose ps

Bu komut, çalışan bir kapsayıcıda bir komut yürütmenize olanak tanır:

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

Örneğin, şöyle görünebilir: docker-compose exec server ls.

Bu komut, görüntülerin bir listesini görüntülemenizi sağlar:

$ docker-compose images

sonuçlar

Bilgisi bu teknolojiyi kullanmanıza ve istenirse daha derinlemesine çalışmaya başlamanıza olanak tanıyan Docker Compose teknolojisiyle çalışmanın temellerine baktık. Burada burada baktığımız projenin kodunu içeren bir depo.

Sevgili okuyucular! Projelerinizde Docker Compose kullanıyor musunuz?

Yeni Başlayanlar İçin Docker Compose Kılavuzu

Kaynak: habr.com

Yorum ekle