Saya telah melihat banyak orang bingung antara file Dockerfile dan Compose. Ini terutama karena keduanya digunakan untuk memodifikasi gambar Docker dengan cara tertentu, meskipun secara teknis tidak benar.
Kedua istilah tersebut mudah membingungkan, tetapi Anda juga perlu memahami perbedaannya saat melakukan percakapan dengan rekan kerja atau (calon) atasan Anda.
Dockerfile digunakan untuk membuat image container, dan file Compose digunakan untuk men-deploy instance image tersebut sebagai container.
Biarkan saya menjelaskan sedikit detail agar Anda memahami dengan benar perbedaan antara Docker Compose dan Dockerfile.
Apa itu Dockerfile?
Saya suka menyebut Dockerfile sebagai pendahulu dari gambar kontainer. Anda membuat gambar dari Dockerfile. Dockerfile tipikal berisi instruksi build khusus, perintah seperti RUN
, ADD
, COPY
, ENTRYPOINT
, dll.
Ambil contoh di bawah ini:
FROM alpine:latest
RUN apk add --no-cache fortune
ENTRYPOINT ["fortune"]
Setiap baris dimulai dengan instruksi untuk komponen build. Instruksi ini tidak harus ditulis dengan huruf kapital. Berikut ini sama validnya dengan yang sebelumnya.
from alpine:latest
run apk add --no-cache fortune
entrypoint ["fortune"]
Dari Dockerfile ini, Anda sekarang dapat membuat image container (atau image buruh pelabuhan). Sebuah gambar hanyalah sebuah template untuk container yang sedang berjalan, yang terdiri dari beberapa lapisan read-only. Karena ini bukan artikel tentang gambar kontainer, saya akan menahan diri untuk tidak menjelaskan topik itu secara berlebihan.
Untuk membuat image dari Dockerfile ini, menggunakan docker CLI, jalankan perintah berikut
docker build -t fortune:alpine .
Ini akan membuat gambar dengan tag fortune:alpine
. Saya belum akan membuat wadah dari gambar ini, itu untuk bagian selanjutnya.
Apa itu file Tulis?
File penulisan digunakan dalam dua jenis penerapan:dalam penerapan non-cluster dengan docker-compose
dan penyebaran cluster dengan docker swarm
.
Untuk membedakan kedua jenis tersebut, saya akan membahas file penulisan yang bertanggung jawab untuk penyebaran cluster sebagai file tumpukan. Saya akan berbicara tentang tumpukan file sebentar lagi.
File penulisan adalah bagian dari alat yang disebut docker-compose
. Ini adalah aplikasi klien ke server daemon buruh pelabuhan, seperti docker
klien CLI, tetapi alih-alih mengetik seluruh run
perintah setiap saat, dengan docker-compose
Anda dapat menggunakan kembali file YAML yang sama berulang kali, dan menyebarkan wadah yang sama dengan konfigurasi yang sama seperti yang Anda lakukan pertama kali.
Ini lebih mudah dibaca, lebih mudah dipelihara, lebih intuitif. Satu file penulisan dapat berisi beberapa konfigurasi penerapan container.
Dukungan penulisan file akan menjadi bagian dari klien buruh pelabuhan default yang ditulis dalam Go, sebagai argumen baris perintah, "pembuatan buruh pelabuhan". Perhatikan tanda hubung yang hilang di sana. Ini masih eksperimental, jadi dalam produksi menggunakan versi Python, yaitu docker-compose masih disarankan.Mari kita ambil gambar sebelumnya, dan terapkan sebuah instance menggunakan file penulisan.
version: "3.3"
services:
fortune:
image: "fortune:alpine"
Simpan file sebagai docker-compose.yml
. Sekarang jalankan di direktori yang sama dengan perintah berikut
docker-compose up
Anda tidak harus simpan file sebagai docker-compose.yml
, Anda dapat menyimpannya sesuka Anda, tetapi jika bukan docker-compose.yml
atau docker-compose.yaml
, pastikan Anda menggunakan -f [FILENAME]
pilihan.
docker-compose -f docker-compose.yml up
Tunggu dan lihat apa yang terjadi.
Untuk mengetahui apa itu fortune
adalah, baca artikel ini tentang perintah Linux yang lucu.
Apa itu file tumpukan?
File tumpukan identik dengan file penulisan dengan sintaks serupa dan sebagian besar opsi internal, dengan beberapa pengecualian. File tumpukan digunakan untuk menerapkan tumpukan layanan di swarm cluster.
Anda dapat menggunakan kembali file penulisan sebelumnya secara langsung sebagai file tumpukan.
Pertama, inisialisasi cluster.
docker swarm init
Kemudian jalankan perintah seperti berikut
docker stack deploy -c docker-compose.yml fortune
Jika di-deploy seperti ini, Anda perlu memeriksa output dengan melihat log layanan menggunakan docker service logs ...
.
Menutup
File Docker dan Compose memiliki tujuan yang berbeda. Jika saya bisa membuat timeline, itu akan terlihat seperti ini
Dockerfile -> Docker Image -> Compose File -> Running Containers
Ada alasan lain mengapa pemula bingung dengan kedua file ini. Dockerfile dapat diarahkan melalui file Compose, dan kemudian Anda dapat menggunakan docker-compose
untuk membangun citra.
Misalnya, Anda dapat menulis ulang file penulisan sebelumnya sehingga
version: "3.3"
services:
fortune:
build:
context: '.'
dockerfile: "./Dockerfile"
image: "fortune:alpine"
Sekarang Anda dapat menjalankan docker-compose build
untuk membangun citra. Atau Anda juga dapat menjalankan docker-compose up --build
untuk membangun dan menjalankan container sekaligus.
Di sini, Dockerfile dilewatkan melalui file penulisan, dan dari tampilan pertama, sepertinya file penulisan yang bertanggung jawab untuk membangun gambar, tetapi tidak.
Docker Run vs Start vs Create:Perbedaan Dijelaskan Untuk pemula docker, istilah seperti docker start, docker run, dan docker create bisa membingungkan. Artikel ini menjelaskan perbedaannya dengan contoh. Buku Pegangan LinuxAbhishek PrakashSaya harap artikel ini menjelaskan perbedaan antara file Dockerfile dan Compose. Jika Anda memiliki pertanyaan, beri tahu saya di bagian komentar di bawah.