Docker Compose: tina pamekaran ka produksi

Перевод транскрипции подкаста подготовлен в преддверии старта курса "Linux Administrator"

Docker Compose: tina pamekaran ka produksi

Docker Compose mangrupikeun alat anu luar biasa pikeun nyiptakeun padamelan
окружения для стека, используемого в вашем приложении. Он позволяет вам определять
unggal komponén aplikasi anjeun, nuturkeun sintaksis anu jelas sareng sederhana YAML-
файлах
.

Kalawan mecenghulna docker nyusun v3 file YAML ieu tiasa dianggo langsung di lingkungan produksi nalika damel sareng
klaster Docker ngagimbung.

Tapi naha ieu hartosna anjeun tiasa nganggo file docker-compose anu sami
prosés ngembangkeun sarta di lingkungan produksi? Atanapi nganggo file anu sami pikeun
стейджинга? Ну, в целом — да, но для такого функционала нам необходимо следующее:

  • Интерполяция переменных: использование переменных среды для некоторых
    nilai nu robah dina unggal lingkungan.
  • Konfigurasi override: kamampuhan pikeun nangtukeun hiji detik (atawa nu mana wae nu
    salajengna) docker-compose file anu bakal ngarobih hal ngeunaan
    kahiji, sarta docker nyusun bakal ngurus merging duanana file.

Beda antara pamekaran sareng file produksi

Salila pangwangunan, anjeun bakal paling dipikaresep hoyong pariksa parobahan kode dina
langsung. Jang ngalampahkeun ieu, biasana volume sareng kode sumber dipasang
wadahna nu ngandung runtime pikeun aplikasi Anjeun. Tapi pikeun lingkungan produksi
Metoda ieu teu cocog.

Dina produksi, anjeun gaduh klaster sareng seueur titik, sareng volumena lokal
relatif ka titik dimana wadahna anjeun (atanapi jasa) dijalankeun, janten anjeun henteu
Anjeun tiasa Gunung kodeu sumber tanpa operasi kompléks nu ngawengku
sinkronisasi kode, sinyal, jsb.

Gantina, urang biasana rék nyieun hiji gambar kalawan versi husus kode Anjeun.
Biasana pikeun nyirian éta kalayan tag anu pas (anjeun tiasa nganggo semantic
versioning atawa sistem sejen dina kawijaksanaan anjeun).

Konfigurasi Override

Dibikeun bédana sareng katergantungan anjeun tiasa bénten dina skénario
ngembangkeun sarta produksi, éta jelas yén urang bakal butuh file konfigurasi béda.

Docker compose ngadukung ngahijikeun file kompilasi anu béda
meunangkeun konfigurasi final. Kumaha ieu jalan tiasa ditingali dina conto:

$ cat docker-compose.yml
version: "3.2"

services:
  whale:
    image: docker/whalesay
    command: ["cowsay", "hello!"]
$ docker-compose up
Creating network "composeconfigs_default" with the default driver
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ________
whale_1  | < hello! >
whale_1  |  --------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Sakumaha ceuk, docker compose ngadukung ngagabungkeun sababaraha composes -
file, ieu ngidinan Anjeun pikeun override rupa parameter dina file kadua. Salaku conto:

$ cat docker-compose.second.yml
version: "3.2"
services:
  whale:
    command: ["cowsay", "bye!"]

$ docker-compose -f docker-compose.yml -f docker-compose.second.yml up
Creating composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ______
whale_1  | < bye! >
whale_1  |  ------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Sintaksis ieu henteu merenah pisan nalika pangwangunan, nalika paréntah
bakal perlu dipigawé sababaraha kali.

Kabeneran, docker nyusun otomatis milarian file khusus anu disebut
docker-compose.override.yml pikeun override nilai docker-compose.yml. Upami
переименовать второй файл, то получится тот же результат, только с помощью изначальной команды:

$ mv docker-compose.second.yml docker-compose.override.yml
$ docker-compose up
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ______
whale_1  | < bye! >
whale_1  |  ------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

Oké, éta leuwih gampang diinget.

Interpolasi Variabel

Pangrojong file konfigurasi interpolasi
variabel
jeung nilai standar. Maksudna, anjeun tiasa ngalakukeun ieu:

services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...

Tur upami Anjeun salah ngalakukeun docker-compose ngawangun (atanapi push) tanpa variabel lingkungan
$MY_SERVICE_VERSION, nilai bakal dipaké pangtungtungnatapi lamun diatur
nilai variabel lingkungan saméméh ngawangun, éta bakal dipaké nalika ngawangun atawa ngadorong
kana register private.registry.mine.

Мои принципы

Pendekatan anu dianggo pikeun kuring ogé tiasa dianggo pikeun anjeun. Kuring nuturkeun ieu
простым правилам:

  • Sadaya tumpukan kuring pikeun produksi, pamekaran (atanapi lingkungan anu sanés) diartikeun ngaliwatan
    файлы docker-compose.
  • Файлы конфигурации, необходимые для охвата всех моих сред, максимально
    nyingkahan duplikasi.
  • Abdi peryogi hiji paréntah basajan pikeun digawé di unggal lingkungan.
  • Konfigurasi utama ditetepkeun dina file docker-compose.yml.
  • Variabel lingkungan dipaké pikeun nangtukeun tag gambar atawa lianna
    variabel anu bisa rupa-rupa ti lingkungan ka lingkungan (pementasan, integrasi,
    produksi).
  • Nilai variabel produksi dianggo salaku nilai pikeun
    sacara standar, ieu ngaminimalkeun resiko lamun tumpukan dibuka dina produksi tanpa
    set variabel lingkungan.
  • Pikeun ngamimitian jasa dina lingkungan produksi, paké paréntah docker tumpukan nyebarkeun - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Lingkungan kerja dimimitian nganggo paréntah docker-nyusun up -d.

Hayu urang nempo conto basajan.

# docker-compose.yml
...
services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
    environment:
      API_ENDPOINT: ${API_ENDPOINT:-https://production.my-api.com}
...

И

# docker-compose.override.yml
...
services:
  my-service:
    ports: # This is needed for development!
      - 80:80
    environment:
      API_ENDPOINT: https://devel.my-api.com
    volumes:
      - ./:/project/src
...

Abdi tiasa nganggo docker-compose (docker-compose up)pikeun ngajalankeun tumpukan éta
modeu ngembangkeun kalawan kode sumber dipasang di /proyék/src.

Abdi tiasa nganggo file anu sami dina produksi! Sareng kuring pasti tiasa dianggo
file sarua docker-compose.yml pikeun pementasan. Pikeun dilegakeun ieu ka
продакшен, мне просто нужно собрать и отправить образ с предопределенным тегом
dina tahap CI:

export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push

Dina produksi, ieu tiasa dijalankeun nganggo paréntah di handap ieu:

export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

Tur upami Anjeun salah rék lakonan hal nu sarua di panggung, Anjeun ngan perlu nangtukeun
variabel lingkungan diperlukeun pikeun digawé di lingkungan pementasan:

export MY_SERVICE_VERSION=1.2.3
export API_ENDPOINT=http://staging.my-api.com
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

Hasilna, kami nganggo dua file docker-compose anu béda, anu tanpa
Konfigurasi duplikat tiasa dianggo pikeun lingkungan naon waé anu anjeun gaduh!

Diajar langkung seueur ngeunaan kursus "Linux Administrator"

sumber: www.habr.com

Tambahkeun komentar