Pengurusan Kontena Pakar dengan Docker Compose: Panduan Terbaik

  • Docker Compose menyelaraskan pengurusan dan penempatan berbilang bekas yang dirancang.
  • Membolehkan anda menentukan perhubungan, pembolehubah dan volum antara perkhidmatan dalam satu fail YAML.
  • Memudahkan replikasi persekitaran dan mempercepatkan penyepaduan dan penyahpepijatan berterusan.

Docker Compose

Dunia pembangunan dan penggunaan aplikasi telah mengalami revolusi sebenar dalam beberapa tahun kebelakangan ini dengan ketibaan kontena. Kemajuan ini telah membolehkan pasukan dari semua saiz melupakan "isu alam sekitar" klasik dan mencapai ketangkasan, skalabiliti dan kawalan yang lebih besar ke atas infrastruktur mereka. Dalam konteks ini, dua alat menonjol terutamanya: Docker dan, untuk pengurusan berbilang bekas yang diselaraskan, Docker Compose. Hari ini kita akan mendalami pengurusan kontena dengan alat ini, merangkumi bukan sahaja asas tetapi juga petua terperinci, kes kehidupan sebenar dan amalan terbaik untuk menguasai sepenuhnya teknologi ini.

Jika anda pernah kecewa cuba menyelaraskan versi alatan perisian anda antara pembangunan tempatan dan persekitaran pengeluaran anda, atau jika anda telah membuang masa memasang kebergantungan dan ketidakserasian penyelesaian masalah, perkara berikut amat menarik minat anda. Karang Docker telah mengubah sepenuhnya cara perkhidmatan kompleks digunakan, membolehkan anda menyediakan keseluruhan seni bina (web, API, pangkalan data, cache, dll.) dengan satu arahan dan memastikan ia berkelakuan sama di sini, di sana dan di mana-mana sahaja. Mari kita lihat bersama, secara terperinci, bagaimana memanfaatkan potensi sepenuhnya.

Apakah Docker Compose dan mengapa ia sangat relevan?

Sebelum kita menyelami arahan dan konfigurasi, anda perlu memahami dengan jelas tentang peranan Docker Compose dalam ekosistem kontena. Docker Compose ialah alat yang membolehkan kami mentakrif, mengkonfigurasi dan mengatur set bekas menggunakan fail YAML mudah (biasanya dipanggil docker-compose.yml). Sebab kewujudannya terletak pada keperluan untuk mengurus aplikasi yang terdiri daripada lebih daripada satu perkhidmatan – contohnya, tapak web, pangkalan data dan sistem caching, masing-masing dalam bekas yang berasingan tetapi berfungsi bersama.

Dengan Karang, Anda boleh memulakan semua perkhidmatan aplikasi dengan satu arahan., tentukan perhubungan mereka, pembolehubah persekitaran, volum berterusan, rangkaian kongsi dan banyak lagi. Tambahan pula, ia tidak boleh diganti dalam kedua-dua persekitaran pembangunan (disebabkan oleh kelajuan ia mewujudkan persekitaran yang boleh ditiru) dan dalam saluran paip penyepaduan dan penggunaan berterusan (CI/CD), serta dalam pra-pengeluaran dan juga pengeluaran untuk projek berskala kecil dan sederhana.

Faedah utama Docker Compose untuk pengurusan kontena

Di bawah kami menyenaraikan beberapa faedah utama Perkara yang dibawa oleh Docker Compose kepada pengurusan kontena:

  • Reka bentuk dan penggunaan yang dipermudahkan: Membolehkan anda mentakrifkan infrastruktur sebagai kod, menjadikan replikasi dan penggunaan automatik dan boleh dihasilkan semula.
  • Penyelarasan antara perkhidmatan: Mengurus kebergantungan, rangkaian dalaman dan pesanan permulaan kontena, memastikan perkhidmatan berinteraksi dengan betul dari mula.
  • Persekitaran terpencil dan konsisten: Semua ahli pasukan—dan juga mesin atau persekitaran yang berbeza—bekerja di bawah keadaan teknikal yang sama, yang meminimumkan mitos "ia berfungsi untuk saya."
  • Skala mudah: Anda boleh menambah atau mengurangkan bilangan replika untuk sebarang perkhidmatan dengan satu arahan, memudahkan ujian beban atau penggunaan yang lebih mantap.
  • Penyepaduan mudah ke dalam CI/CD: Ia sangat sesuai dengan saluran paip penyepaduan berterusan untuk membina, menguji dan menggunakan persekitaran secara automatik.
  • Uruskan kitaran hayat yang lengkap: Mengawal permulaan, penutupan, mulakan semula, pengelogan, pengemaskinian dan pemadaman semua bekas dalam tindanan adalah semudah menjalankan arahan Karang.

Had dan cabaran apabila menggunakan Docker Compose

Seperti mana-mana teknologi, Docker Compose juga mengemukakan beberapa cabaran dan pertimbangan:

  • Keluk pembelajaran awal: Anda harus biasa dengan sintaks YAML, arahan khusus Karang dan konsep rangkaian, jilid dan kebergantungan.
  • Kerumitan yang tidak perlu dalam projek mudahUntuk aplikasi perkhidmatan tunggal atau sangat mudah, Docker Compose mungkin berlebihan.
  • Tetapan lanjutan diperlukan: Menentukan rangkaian tersuai, kesihatan perkhidmatan atau strategi mulakan semula mungkin memerlukan beberapa kepakaran untuk memastikan penyelenggaraan mudah.
  • Skala terhad dalam infrastruktur besar: Untuk penggunaan yang sangat besar, disyorkan untuk menggunakan orkestra seperti Kubernetes, walaupun Compose masih sesuai untuk banyak situasi.

Menyediakan Persekitaran: Memasang Docker dan Docker Compose

Sebelum anda mula menentukan perkhidmatan, Adalah penting untuk memasang Docker dan Docker Compose. pada mesin anda. Pada sistem semasa, Docker Desktop untuk Windows dan Mac sudah menyertakan Karang di luar kotak. Dalam persekitaran Linux, anda boleh memasangnya dengan mudah menggunakan pengurus pakej (contoh berikut adalah untuk sistem berasaskan Debian/Ubuntu):

  • Untuk Docker:
    sudo apt install docker-ce (Ubuntu/Debian) atau sudo dnf install docker-ce (Fedora/CentOS)
  • Untuk Docker Compose:
    sudo apt install docker-compose

Dalam kebanyakan kes, sudah cukup untuk menambah pengguna anda ke kumpulan docker dengan sudo usermod -aG docker $(whoami) untuk dapat menjalankan arahan tanpa 'sudo'. Ingat untuk memulakan semula sesi anda untuk perubahan berkuat kuasa.

Fail docker-compose.yml: struktur dan kunci utama

Hati Docker Compose ialah fail docker-compose.yml. Struktur asasnya sangat intuitif, tetapi membolehkan fleksibiliti yang sangat besar:

  • versi: Menunjukkan versi sintaks Karang. Ia biasanya diletakkan sebagai elemen pertama.
  • perkhidmatan: Ini menyenaraikan semua perkhidmatan (bekas) yang akan membentuk aplikasi, masing-masing dengan konfigurasi khusus (imej, binaan, port, volum, pembolehubah persekitaran, arahan, kebergantungan, dll.).
  • jumlahnya: Mentakrifkan volum berterusan yang boleh dikongsi atau dikaitkan dengan perkhidmatan tertentu, memastikan data kekal dalam but semula atau pemadaman kontena.
  • rangkaian: Membolehkan anda menentukan rangkaian tersuai untuk mengasingkan dan menyambungkan perkhidmatan bersama-sama.

Contoh struktur minimum:

versi: perkhidmatan "3.8": web: imej: nginx:port terkini: - "8080:80" db: imej: postgres:13 persekitaran: - POSTGRES_PASSWORD=contoh volum: - pgdata:/var/lib/postgresql/data volum: pgdata:

Tutorial Hands-on: Menggunakan Aplikasi Berbilang Bekas

Untuk menggambarkan penggunaan Docker Compose, mari semak kajian kes penggunaan berdasarkan contoh yang dibincangkan:

Contoh 1: Web dalam Python + Redis untuk mengira

Katakan anda ingin melancarkan tapak web Flask Python mudah yang memaparkan kaunter lawatan, menggunakan Redis sebagai storan dalam memori. Anda tidak perlu memasang sama ada Python atau Redis secara tempatan—hanya tentukan cara ia harus disepadukan menggunakan Karang. Anda boleh belajar cara membuat imej tersuai untuk perkhidmatan anda di buat imej Dockerfile tersuai.

  • app.py: Kod web kelalang.
  • keperluan.txt: Senarai kebergantungan (contohnya, kelalang dan redis-py).
  • Dockerfile: Menunjukkan cara membina imej tersuai untuk perkhidmatan web.
  • docker-compose.yml: Mentakrifkan kedua-dua perkhidmatan web dan Redis, port, volum dan pembolehubahnya.

Ini adalah contoh fail docker-compose.yml untuk kes ini:

versi: perkhidmatan '3.8': web: bina: . port: - jilid "8000:5000": - .:/kod persekitaran: - FLASK_DEBUG=1 bergantung_pada: - redis redis: imej: redis:alpine

Kelebihan pendekatan ini? Anda boleh mengubah suai kod pada mesin anda dan melihat perubahan secara automatik ditunjukkan pada pelayan terima kasih kepada volum yang dipasang, tanpa perlu membina semula imej setiap kali (sesuai untuk pembangunan pesat).

Contoh 2: Persekitaran LAMP (Apache, PHP, MySQL)

Bagi mereka yang membangun dengan teknologi klasik seperti PHP dan MySQL, Karang juga penting. Fail konfigurasi biasa mungkin kelihatan seperti ini:

versi: perkhidmatan "3.8": mysql: imej: mysql:5.7 persekitaran: - MYSQL_DATABASE=midb - MYSQL_ROOT_PASSWORD=rahsia - MYSQL_USER=pengguna - MYSQL_PASSWORD=jumlah kunci: - ./data/mysql: - ./data/mysql: "3306:3306" php: imej: php:7-apache volum: - ./html:/var/www/html ports: - "80:80" depends_on: - mysql

Dengan ini, anda boleh menyediakan keseluruhan tapak web anda dalam beberapa saat, mengubah suai fail PHP dan memastikan semuanya berfungsi sama seperti dalam pengeluaran.

Contoh 3: Aplikasi Node.js dengan PostgreSQL

Timbunan yang digunakan secara meluas dalam pembangunan moden menggabungkan perkhidmatan Node.js dengan pangkalan data PostgreSQL. Karang juga membolehkan anda menentukan kegigihan data dan pembolehubah persekitaran yang diperlukan:

versi: perkhidmatan '3.8': app: imej: nod:14-alpine arahan: sh -c "npm install && npm run dev" volum: - .:/app ports: - 3000:3000 environment: - NODE_ENV=development depends_on: - db db: image: postgres:13 environment: - POSTGRES:5432 environment: - POSTGRES_STORD POSTGRES_DB=port apl: - 5432:XNUMX

Setelah semuanya dikonfigurasikan, jalankan docker-compose up dan anda akan mempunyai kedua-dua API dan pangkalan data sedia untuk berinteraksi.

Perintah Karang Docker yang Penting

Untuk pengurusan harian aplikasi berbilang bekas, Docker Compose menawarkan set arahan yang sangat jelas dan berkuasa:

  • docker-compose up: Membina dan memulakan semua perkhidmatan yang ditakrifkan dalam YAML. Dengan parameter -d melancarkannya di latar belakang.
  • docker-compose down: Menghentikan dan mengalih keluar semua bekas, rangkaian dan volum yang dikaitkan dengan timbunan, menghormati data berterusan jika ditakrifkan.
  • binaan docker-compose: Membina imej tersuai yang dinyatakan dalam fail.
  • docker-compose ps: Memaparkan keadaan semasa bekas tindanan.
  • log karang docker: Membolehkan anda melihat log untuk semua perkhidmatan atau perkhidmatan tertentu.
  • docker-compose berhenti/mula/mulakan semula: Uruskan kitaran hayat bekas secara berbutir.
  • docker-compose exec: Menjalankan arahan di dalam bekas yang telah dimulakan (contohnya, membuka bash atau menjalankan migrasi pangkalan data).

Aspek lanjutan: rangkaian, volum, pembolehubah dan kesihatan perkhidmatan

Apabila projek anda berkembang, Karang membolehkan anda memperhalusi tetapan anda:

Rangkaian tersuai

Anda boleh menentukan rangkaian yang berbeza dan mengasingkan perkhidmatan sensitif (cth., pangkalan data) untuk mengukuhkan keselamatan. Rangkaian ditakrifkan seperti berikut:

rangkaian: frontend: backend:

Setiap perkhidmatan boleh dikaitkan secara eksplisit dengan satu atau lebih rangkaian. Tambahan pula, dalam pengurusan lanjutan, kawalan ke atas rangkaian dalaman boleh menjadi penting untuk .

Jumlah yang berterusan

Mereka memastikan bahawa walaupun anda menghentikan atau memadam bekas, data penting (contohnya, pangkalan data atau konfigurasi) tidak hilang. Anda boleh menentukannya secara global atau berdasarkan setiap perkhidmatan.

Pembolehubah persekitaran dan fail .env

Untuk fleksibiliti dan mudah alih tambahan, pembolehubah boleh diisytiharkan dalam YAML itu sendiri atau dalam fail .env terletak dalam direktori yang sama. Ini membolehkan anda menukar tetapan kritikal (cth., bukti kelayakan) tanpa menyentuh fail Karang.

Pemeriksaan kesihatan dan kawalan pergantungan

Isu utama semasa mengatur berbilang perkhidmatan ialah memastikan perkhidmatan bergantung (cth., aplikasi anda) tidak cuba dimulakan sebelum perkhidmatan asas (seperti pangkalan data) sedia. Karang menawarkan pilihan bergantung_pada dan, dalam versi terkini, keadaan kesihatan boleh ditetapkan:

perkhidmatan: web: bergantung_pada: db: keadaan: perkhidmatan_sihat db: imej: postgres:13 pemeriksaan kesihatan: ujian: selang masa: tamat masa 10s: percubaan semula 5s: 5

Dengan cara ini, bahagian belakang anda tidak akan bermula sehingga pangkalan data mengesahkan ia berfungsi dan berjalan. Ia adalah ciri asas dalam saluran paip dan penggunaan automatik untuk mengelakkan ralat sambungan awal.

Docker Compose dalam penyepaduan dan penggunaan berterusan (CI/CD)

Karang sangat sesuai untuk menjadi sebahagian daripada aliran kerja moden. Terima kasih kepada format kodnya, ia membolehkan:

  • Uji aplikasi lengkap pada setiap permintaan tarik tanpa perlu mengkonfigurasi persekitaran secara manual.
  • Gunakan persekitaran fana untuk ujian atau demonstrasi, dengan mudah membuangnya selepas digunakan.
  • Automasi pengeluaran dalam projek kecil dan sederhana yang tidak dapat dilaksanakan untuk menubuhkan Kubernetes.

Alat boleh integrasi dan alternatif lain: Podman, Visual Studio, Azure dan banyak lagi

Selain Docker Compose, persekitaran kontena menawarkan utiliti dan penyepaduan lain yang berkaitan:

  • Podman dan podman-dockerPada sistem seperti SLE Micro atau lebih banyak pengedaran berorientasikan keselamatan, Podman menawarkan alternatif tanpa daemon kepada Docker. Alat itu podman-docker membolehkan anda menjalankan skrip Docker tanpa perubahan, menggantikannya secara automatik.
  • Visual Studio dan .NET: Pembangun .NET boleh mengatur perkhidmatan web dan API bersama-sama cache seperti Redis dari dalam Visual Studio, secara automatik menjana fail Karang dan menjadikannya lebih mudah untuk nyahpepijat dan memulakan perkhidmatan secara berurutan.
  • Perkhidmatan dan Awan Azure AIBanyak platform awan memudahkan untuk menggunakan tindanan kompleks menggunakan Compose, membolehkan anda mengurus berbilang perkhidmatan AI, pangkalan data atau sistem pemantauan (seperti Prometheus dan Grafana) secara kolaboratif.

Amalan dan petua terbaik untuk memanfaatkan sepenuhnya Docker Compose

  • Pecah dan perintah: Pastikan perkhidmatan diasingkan dengan baik dan tentukan hanya yang perlu, untuk mengelakkan kebergantungan tersembunyi dan memudahkan komposisi tindanan yang berbeza.
  • Gunakan imej rasmi apabila boleh: Mengurangkan masalah, menjamin sokongan dan memudahkan kemas kini.
  • Versi docker-compose.yml anda: Tambahkannya pada sistem kawalan versi anda (seperti Git) bersama-sama dengan seluruh projek untuk memastikan kebolehkesanan perubahan.
  • Jangan simpan data kritikal sahaja dalam bekas: Sentiasa gunakan volum luaran atau pangkalan data untuk mengelakkan kehilangan data jika anda perlu mengalih keluar atau mengemas kini perkhidmatan.
  • Optimumkan DockerfilesJika anda membina imej tersuai, pastikan ia ringan dan didokumenkan dengan baik untuk mengurangkan masa dan ralat binaan. Anda juga boleh belajar cara membuat imej tersuai dalam .
  • Berhati-hati dengan pelabuhan: Pastikan port yang anda dedahkan tidak diduduki pada mesin anda dan semak keselamatan pada dedahan awam.
  • Jauhkan pembolehubah dan rahsia daripada repositori: Gunakan fail .env atau pengurus rahsia untuk data sensitif.

Diagnosis dan pengurusan harian aplikasi berbilang bekas

Karang menjadikannya sangat mudah untuk memantau dan mendiagnosis kesihatan aplikasi. Beberapa cadangan untuk pentadbiran harian:

  • Semak log dengan docker-karang log -f untuk memantau tingkah laku setiap perkhidmatan dalam masa nyata.
  • Berhenti dan mulakan semula perkhidmatan tertentu jika anda perlu menjalankan ujian atau mengosongkan sumber buat sementara waktu.
  • Jeda dan sambung timbunan penuh jika anda perlu melaksanakan tugas penyelenggaraan.

Menggunakan aplikasi kompleks: contoh dan pengesyoran kehidupan sebenar

Banyak aplikasi dunia sebenar menggunakan Compose untuk menyelaraskan berbilang perkhidmatan. Kes biasa termasuk:

  • Timbunan web modenContohnya, aplikasi React pada bahagian hadapan, API dalam Node/Express dan pangkalan data MongoDB.
  • Perkhidmatan Mikro: Perkhidmatan khusus yang berbeza berkomunikasi antara satu sama lain melalui rangkaian dalaman, dengan kegigihan dalam pangkalan data yang berasingan.
  • Aplikasi perniagaan: Menyambung perkhidmatan seperti RabbitMQ (mesej), Redis (caching), Elasticsearch (enjin carian), dll., semuanya di bawah fail Karang yang sama.

Menyesuaikan Karang dengan keperluan khusus projek adalah penting, dengan mengambil kira pengasingan antara perkhidmatan, ketekunan data dan kebolehulangan persekitaran.

Cadangan tambahan untuk persekitaran pengeluaran

Walaupun Compose sesuai untuk pembangunan dan pra-pengeluaran, penggunaannya dalam pengeluaran mempunyai nuansa:

  • Gunakan pembolehubah persekitaran tertentu untuk mengasingkan konfigurasi pembangunan dan pengeluaran.
  • Periksa keselamatan bekas dan rangkaian: dedahkan hanya port yang diperlukan, gunakan imej yang dioptimumkan dan pastikan perisian dikemas kini.
  • Berhati-hati dengan jilid: Dalam pengeluaran, pertimbangkan untuk menggunakan storan berterusan luaran dan kerap membuat sandaran data kritikal.
  • Pantau status dan prestasi perkhidmatan dengan alatan seperti Prometheus dan Grafana.

Untuk projek yang lebih besar atau projek yang mempunyai keperluan ketersediaan dan kebolehskalaan yang tinggi, mungkin penting untuk menaik taraf kepada orkestra seperti Kubernetes, walaupun Docker Compose masih sesuai untuk pemula, MVP, pasukan kecil dan ujian pantas.

Menguruskan aplikasi berbilang bekas tidak pernah lebih mudah diakses dan berkuasa berbanding dengan Docker Compose. Dengan satu fail konfigurasi, anda boleh mentakrif dan mengawal keseluruhan infrastruktur, memastikan aplikasi anda menggunakan, menskala dan berprestasi sama rata dalam mana-mana persekitaran. Perkara utama ialah memanfaatkan kefleksibelannya, mengekalkan amalan yang baik dan, di atas semua, memahami sepenuhnya kemungkinan dan batasan yang ditawarkannya. Jika anda telah menguasai Karang, anda mempunyai alat penting untuk pembangunan dan pengurusan perisian moden.

Imej tersuai Dockerfile-4
artikel berkaitan:
Cara membuat imej Dockerfile tersuai langkah demi langkah

Tambah sebagai sumber pilihan