Docker Compose: dari pengembangan hingga produksi

Terjemahan transkripsi podcast disiapkan untuk mengantisipasi dimulainya kursus "Pengelola Linux"

Docker Compose: dari pengembangan hingga produksi

Docker Compose adalah alat luar biasa untuk membuat sebuah karya
lingkungan untuk tumpukan yang digunakan dalam aplikasi Anda. Ini memungkinkan Anda untuk mendefinisikan
setiap komponen aplikasi Anda, mengikuti sintaks yang jelas dan sederhana YAML-
file
.

Dengan munculnya buruh pelabuhan menulis v3 file YAML ini dapat digunakan langsung di lingkungan produksi saat bekerja dengannya
gugus Kawanan Docker.

Tetapi apakah ini berarti Anda dapat menggunakan file penulisan buruh pelabuhan yang sama di
proses pengembangan dan dalam lingkungan produksi? Atau gunakan file yang sama untuk
memanggungkan? Secara umum, ya, tetapi untuk fungsi ini kita memerlukan yang berikut:

  • Interpolasi variabel: menggunakan variabel lingkungan untuk beberapa hal
    nilai-nilai yang berubah di setiap lingkungan.
  • Pengabaian konfigurasi: kemampuan untuk menentukan detik (atau apa pun
    berikutnya lainnya) file penulisan buruh pelabuhan yang akan mengubah sesuatu
    pertama, dan docker composer akan mengurus penggabungan kedua file.

Perbedaan antara file pengembangan dan produksi

Selama pengembangan, kemungkinan besar Anda ingin memeriksa perubahan kode
waktu sebenarnya. Untuk melakukan ini, biasanya volume dengan kode sumber sudah terpasang
wadah yang berisi runtime untuk aplikasi Anda. Tapi untuk lingkungan produksi
Metode ini tidak cocok.

Dalam produksi, Anda memiliki klaster dengan banyak node, dan volumenya bersifat lokal
relatif terhadap node tempat kontainer (atau layanan) Anda berjalan, jadi Anda tidak melakukannya
Anda dapat memasang kode sumber tanpa operasi rumit yang disertakan
sinkronisasi kode, sinyal, dll.

Sebaliknya, kami biasanya ingin membuat gambar dengan versi kode Anda yang spesifik.
Merupakan kebiasaan untuk menandainya dengan tag yang sesuai (Anda dapat menggunakan semantik
versi atau sistem lain sesuai kebijaksanaan Anda).

Penggantian Konfigurasi

Mengingat perbedaannya dan ketergantungan Anda mungkin berbeda dalam skenario
pengembangan dan produksi, jelas kita memerlukan file konfigurasi yang berbeda.

Penulisan Docker mendukung penggabungan file penulisan yang berbeda
mendapatkan konfigurasi akhir. Cara kerjanya dapat dilihat pada contoh:

$ 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

Seperti yang dikatakan, penulisan buruh pelabuhan mendukung penggabungan beberapa penulisan -
file, ini memungkinkan Anda untuk mengganti berbagai parameter di file kedua. Misalnya:

$ 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 ini sangat tidak nyaman selama pengembangan, ketika perintah
perlu dilakukan berkali-kali.

Untungnya, penulisan buruh pelabuhan secara otomatis mencari file khusus bernama
buruh pelabuhan-compose.override.yml untuk mengesampingkan nilai docker-compose.yml. Jika
ganti nama file kedua, Anda mendapatkan hasil yang sama, hanya menggunakan perintah 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, itu lebih mudah diingat.

Interpolasi Variabel

Dukungan file konfigurasi interpolasi
variabel
dan nilai default. Artinya, Anda dapat melakukan hal berikut:

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

Dan jika Anda melakukannya build komposisi buruh pelabuhan (atau Push) tanpa variabel lingkungan
$MY_SERVICE_VERSION, nilainya akan digunakan Terbarutetapi jika Anda mengaturnya
nilai variabel lingkungan sebelum build, akan digunakan saat membangun atau mendorong
ke daftar swasta.registry.mine.

Prinsip saya

Pendekatan yang berhasil untuk saya mungkin juga berhasil untuk Anda. Saya mengikuti ini
aturan sederhana:

  • Semua tumpukan saya untuk produksi, pengembangan (atau lingkungan lain) ditentukan melalui
    file pembuat buruh pelabuhan
  • File konfigurasi diperlukan untuk mencakup seluruh lingkungan saya, sebanyak mungkin
    menghindari duplikasi.
  • Saya memerlukan satu perintah sederhana untuk bekerja di setiap lingkungan.
  • Konfigurasi utama ditentukan dalam file docker-compose.yml.
  • Variabel lingkungan digunakan untuk mendefinisikan tag gambar atau lainnya
    variabel yang mungkin berbeda dari satu lingkungan ke lingkungan lainnya (pementasan, integrasi,
    produksi).
  • Nilai-nilai variabel produksi digunakan sebagai nilai
    secara default, ini meminimalkan risiko jika tumpukan diluncurkan ke produksi tanpa
    mengatur variabel lingkungan.
  • Untuk memulai layanan di lingkungan produksi, gunakan perintah penyebaran tumpukan buruh pelabuhan - menulis file docker-compose.yml -dengan-registry-auth nama-tumpukan-saya.
  • Lingkungan kerja dimulai menggunakan perintah docker-compose up -d.

Mari kita lihat contoh sederhana.

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

saya bisa menggunakan komposisi buruh pelabuhan (penyusunan buruh pelabuhan)untuk menjalankan tumpukan
mode pengembangan dengan kode sumber terpasang /proyek/src.

Saya dapat menggunakan file yang sama dalam produksi! Dan saya pasti bisa menggunakannya
berkas yang sama docker-compose.yml untuk pementasan. Untuk memperluas ini menjadi
produksi, saya hanya perlu membuat dan mengirim gambar dengan tag yang telah ditentukan sebelumnya
pada tahap CI:

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

Dalam produksi, ini dapat dijalankan menggunakan perintah berikut:

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

Dan jika Anda ingin melakukan hal yang sama di atas panggung, Anda hanya perlu mendefinisikannya
variabel lingkungan yang diperlukan untuk bekerja 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

Hasilnya, kami menggunakan dua file pembuat buruh pelabuhan yang berbeda, yang tanpanya
Konfigurasi duplikat dapat digunakan untuk lingkungan apa pun yang Anda miliki!

Pelajari lebih lanjut tentang kursus ini "Pengelola Linux"

Sumber: www.habr.com

Tambah komentar