Docker Compose: saka pangembangan nganti produksi

Terjemahan transkripsi podcast sing disiapake kanggo nunggu wiwitan kursus "Linux Administrator"

Docker Compose: saka pangembangan nganti produksi

Docker Compose minangka alat sing luar biasa kanggo nggawe karya
lingkungan kanggo tumpukan sing digunakake ing aplikasi sampeyan. Iku ngijini sampeyan kanggo nemtokake
saben komponen aplikasi sampeyan, kanthi sintaks sing jelas lan prasaja ing YAML-
berkas
.

Kanthi tekane saka docker nulis v3 file YAML iki bisa digunakake langsung ing lingkungan produksi nalika nggarap
kluster Grombolan Docker.

Nanging iki tegese sampeyan bisa nggunakake file docker-compose sing padha
proses pangembangan lan ing lingkungan produksi? Utawa nggunakake file sing padha kanggo
pementasan? Inggih, ing umum, ya, nanging kanggo fungsi iki kita kudu ing ngisor iki:

  • Interpolasi variabel: nggunakake variabel lingkungan kanggo sawetara
    nilai sing diganti ing saben lingkungan.
  • Konfigurasi override: kemampuan kanggo nemtokake detik (utawa sembarang
    file docker-nyipta liyane sing bakal ngganti soko babagan
    pisanan, lan docker compose bakal ngurus nggabungake loro file kasebut.

Bedane antarane file pangembangan lan produksi

Sajrone pangembangan, sampeyan bakal pengin mriksa owah-owahan kode
wektu nyata. Kanggo nindakake iki, biasane volume karo kode sumber dipasang ing
wadhah sing ngemot runtime kanggo aplikasi sampeyan. Nanging kanggo lingkungan produksi
Cara iki ora cocok.

Ing produksi, sampeyan duwe kluster kanthi akeh kelenjar, lan volume lokal
relatif kanggo simpul sing wadhah (utawa layanan) mlaku, supaya sampeyan ora
sampeyan bisa Gunung kode sumber tanpa operasi Komplek sing kalebu
sinkronisasi kode, sinyal, lsp.

Nanging, biasane kita pengin nggawe gambar kanthi versi tartamtu saka kode sampeyan.
Biasane kanggo menehi tandha kanthi tag sing cocog (sampeyan bisa nggunakake semantic
versioning utawa sistem liyane ing discretion sampeyan).

Konfigurasi Override

Amarga bedane lan dependensi sampeyan bisa uga beda-beda ing skenario
pembangunan lan produksi, iku cetha sing kita kudu file konfigurasi beda.

Docker compose ndhukung nggabungake file compose sing beda-beda
entuk konfigurasi pungkasan. Cara kerjane bisa dideleng ing 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

Kaya sing dikandhakake, docker compose ndhukung nggabungake macem-macem komposisi -
file, iki ngijini sampeyan kanggo override macem-macem paramèter ing file kapindho. Tuladhane:

$ 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

Sintaks iki ora trep banget sak pembangunan, nalika printah
kudu ditindakake kaping pirang-pirang.

Untunge, docker nulis kanthi otomatis golek file khusus sing diarani
docker-compose.override.yml kanggo nimpa nilai docker-compose.yml. Yen
ganti jeneng file kapindho, sampeyan entuk asil sing padha, mung nggunakake printah asli:

$ 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

Oke, sing luwih gampang kanggo ngelingi.

Interpolasi Variabel

Dhukungan file konfigurasi interpolasi
variabel
lan nilai gawan. Sing, sampeyan bisa nindakake ing ngisor iki:

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

Lan yen sampeyan nindakake mbangun docker-compose (utawa push) tanpa variabel lingkungan
$MY_SERVICE_VERSION, Nilai bakal digunakake paling anyarnanging yen sampeyan nyetel
Nilai saka variabel lingkungan sadurunge mbangun, iku bakal digunakake nalika mbangun utawa meksa nindakake perkara
menyang ndhaftar private.registry.mine.

Prinsipku

Pendekatan sing bisa kanggo kula uga bisa kanggo sampeyan. Aku ngetutake iki
aturan prasaja:

  • Kabeh tumpukan sandi kanggo produksi, pembangunan (utawa lingkungan liyane) ditetepake liwat
    file docker-nyipta
  • File konfigurasi dibutuhake kanggo nutupi kabeh lingkunganku, sabisane
    nyegah duplikasi.
  • Aku butuh siji printah prasaja kanggo bisa ing saben lingkungan.
  • Konfigurasi utama ditetepake ing file docker-compose.yml.
  • Variabel lingkungan digunakake kanggo nemtokake tag gambar utawa liyane
    variabel sing beda-beda saka lingkungan menyang lingkungan (pementasan, integrasi,
    produksi).
  • Nilai variabel produksi digunakake minangka nilai kanggo
    kanthi gawan, iki nyilikake resiko yen tumpukan dibukak ing produksi tanpa
    nyetel variabel lingkungan.
  • Kanggo miwiti layanan ing lingkungan produksi, gunakake perintah kasebut docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • Lingkungan kerja diwiwiti nggunakake printah docker-compose up -d.

Ayo goleki conto sing prasaja.

# 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
...

Aku bisa nggunakake docker-compose (docker-compose up)kanggo mbukak tumpukan ing
mode pembangunan karo kode sumber dipasang ing /proyek/src.

Aku bisa nggunakake file sing padha ing produksi! Lan aku mesthi bisa nggunakake
file padha docker-compose.yml kanggo pementasan. Kanggo nggedhekake iki kanggo
produksi, Aku mung kudu mbangun lan ngirim gambar karo tag wis disetel
ing tahap CI:

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

Ing produksi, iki bisa ditindakake kanthi nggunakake perintah ing ngisor iki:

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

Lan yen sampeyan pengin nindakake ing panggung, sampeyan mung kudu nemtokake
variabel lingkungan sing dibutuhake kanggo nggarap 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

AkibatΓ©, kita nggunakake rong file docker-compose sing beda, sing tanpa
Konfigurasi duplikat bisa digunakake kanggo lingkungan apa wae sing sampeyan duwe!

Sinau luwih lengkap babagan kursus kasebut "Linux Administrator"

Source: www.habr.com

Add a comment