docker-compose ada untuk membuat Anda harus menulis banyak perintah yang harus Anda lakukan dengan docker-cli.
docker-compose juga memudahkan untuk memulai beberapa wadah pada saat yang sama dan secara otomatis menghubungkannya bersama dengan beberapa bentuk jaringan.
Tujuan dari docker-compose adalah untuk berfungsi sebagai docker cli tetapi untuk mengeluarkan banyak perintah dengan lebih cepat.
Untuk menggunakan komposisi buruh pelabuhan, Anda harus menyandikan perintah yang Anda jalankan sebelum menjadi docker-compose.yml
file.
Anda tidak hanya akan menyalinnya ke file yaml, ada sintaks khusus.
Setelah dibuat, Anda harus mengumpankannya ke cli-compose docker dan tergantung pada cli untuk mengurai file dan membuat semua wadah berbeda dengan konfigurasi yang benar yang kami tentukan.
Jadi Anda akan memiliki wadah yang terpisah, katakanlah misalnya, satu adalah redis-server
dan yang kedua adalah node-app
dan Anda ingin yang dibuat menggunakan Dockerfile
di direktori Anda saat ini.
Selain itu, setelah membuat wadah itu, Anda akan memetakan beberapa port dari wadah ke mesin lokal untuk mengakses semua yang berjalan di dalamnya.
Jadi untuk docker-compose.yml
file Anda, Anda ingin memulai baris pertama seperti:
version: '3'
Itu memberi tahu Docker versi docker-compose
yang ingin Anda gunakan. Setelah itu Anda harus menambahkan:
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
Harap perhatikan indentasi, sangat penting. Juga, perhatikan untuk satu layanan saya mengambil gambar, tetapi untuk layanan lain saya mengatakan docker-compose
untuk melihat ke dalam direktori saat ini untuk membangun gambar yang akan digunakan untuk wadah kedua.
Kemudian Anda ingin menentukan semua port yang berbeda yang ingin Anda buka pada wadah ini.
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
-
Harap perhatikan tanda hubung, tanda hubung dalam file yaml adalah cara kami menentukan array. Dalam contoh ini saya memetakan 8081
pada mesin lokal saya ke 8081
wadah seperti:
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
- "8081:8081"
Jadi port pertama adalah mesin lokal Anda, dan yang lainnya adalah port pada wadah, Anda juga bisa membedakan keduanya untuk menghindari kebingungan seperti:
version: '3'
services:
redis-server:
image: 'redis'
node-app:
build: .
ports:
- "4001:8081"
Dengan mengembangkan docker-compose.yml
file Anda seperti ini, itu akan membuat wadah ini pada dasarnya jaringan yang sama dan mereka akan memiliki akses bebas untuk berkomunikasi satu sama lain dengan cara apa pun yang mereka suka dan bertukar informasi sebanyak yang mereka inginkan.
Ketika dua kontainer dibuat menggunakan docker-compose
kita tidak perlu deklarasi port.
Sekarang dalam contoh saya, kita perlu melakukan beberapa konfigurasi kode di aplikasi Nodejs yang terlihat seperti ini:
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
host: 'redis-server'
});
Saya menggunakan contoh ini di atas untuk membuat Anda sadar bahwa mungkin ada beberapa konfigurasi khusus yang harus Anda lakukan selain docker-compose.yml
file yang mungkin spesifik untuk proyek Anda.
Sekarang, jika Anda pernah menemukan diri Anda bekerja dengan aplikasi Nodejs dan redis Anda ingin memastikan Anda mengetahui port default yang digunakan Nodejs jadi saya akan menambahkan ini:
const express = require('express');
const redis = require('redis');
const app = express();
const client = redis.createClient({
host: 'redis-server',
port: 6379
});
Jadi Docker akan melihat bahwa aplikasi Node sedang mencari redis-server
dan mengarahkan kembali koneksi itu ke wadah yang sedang berjalan ini.
Sepanjang waktu, Dockerfile
hanya berisi ini:
FROM node:alpine
WORKDIR '/app'
COPY /package.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
Jadi, padahal sebelumnya Anda harus menjalankan docker run myimage
untuk membuat instance dari semua wadah atau layanan di dalam file yang dapat Anda jalankan, docker-compose up
dan Anda tidak harus menentukan gambar karena Docker akan mencari di direktori kerja saat ini dan mencari docker-compose.yml
File di dalam sana.
Sebelumnya docker-compose.yml
, kami harus berurusan dengan dua perintah terpisah dari docker build .
dan docker run myimage
, tetapi di docker-compose
dunia jika Anda ingin membangun kembali gambar yang Anda tulis docker-compose up --build
. Itu memberitahu Docker untuk memulai kembali wadah tetapi membangun kembali untuk mendapatkan perubahan terbaru.
Jadi docker-compose
membuatnya lebih mudah untuk bekerja dengan banyak wadah. Lain kali Anda harus memulai kelompok wadah ini di latar belakang yang dapat Anda lakukandocker-compose up -d
dan menghentikannya, Anda dapat melakukannya docker-compose down
.