Saya telah membaca dan belajar tentang Docker , dan saya mencoba memilih dengan benar pengaturan Django untuk digunakan. Sejauh ini ada:
Docker Compose atau Dockerfile
Saya mengerti yang Dockerfiles
digunakan Docker Compose
, tapi saya tidak yakin apakah itu praktik yang baik untuk meletakkan semuanya dalam satu Dockerfile besar dengan beberapa FROM
perintah untuk gambar yang berbeda?
Saya ingin menggunakan beberapa gambar berbeda yang meliputi:
uwsgi
nginx
postgres
redis
rabbitmq
celery with cron
Mohon saran tentang apa praktik terbaik dalam mengatur jenis lingkungan ini menggunakan Docker .
Jika ini membantu, saya menggunakan Mac, jadi gunakan boot2docker .
Beberapa Masalah yang saya alami:
- Susun Docker tidak kompatibel dengan Python3
- Saya ingin menampung proyek saya, jadi jika satu Dockerfile besar tidak ideal, maka saya merasa saya perlu memecahnya menggunakan Docker Compose
- Saya ok untuk membuat proyek Py2 & Py3 kompatibel, jadi saya condong ke django-compose
docker
docker-compose
dockerfile
development-environment
boot2docker
Aaron Lelevier
sumber
sumber
Jawaban:
Jawabannya adalah tidak.
Docker Compose (di sini disebut sebagai compose) akan menggunakan Dockerfile jika Anda menambahkan perintah build ke proyek Anda
docker-compose.yml
.Alur kerja Docker Anda harus berupa bangunan yang cocok
Dockerfile
untuk setiap gambar yang ingin Anda buat, lalu gunakan menulis untuk merakit gambar menggunakanbuild
perintah.Anda dapat menentukan jalur ke Dockerfiles pribadi Anda menggunakan
build /path/to/dockerfiles/blah
di/path/to/dockerfiles/blah
mana blaDockerfile
tinggal.sumber
docker-compose
dalam produksi atau hanya dev? Terima kasih atas bantuan Anda.docker-compose.yml
hanya menggunakan gambar publik (menarik gambar dari hub internet / buruh pelabuhan), maka seseorang tidak memerlukan Dockerfile untuk menjalankan perintahdocker-compose up
.Dockerfile
Dockerfile adalah file teks sederhana yang berisi perintah yang bisa dipanggil pengguna untuk merakit gambar.
Contoh, Dockerfile
Susun Docker
Susun Docker
adalah alat untuk mendefinisikan dan menjalankan aplikasi Docker multi-kontainer.
mendefinisikan layanan yang membentuk aplikasi Anda
docker-compose.yml
sehingga mereka dapat dijalankan bersama di lingkungan yang terisolasi.menjalankan aplikasi dalam satu perintah dengan hanya menjalankan
docker-compose up
Contoh, docker-compose.yml
sumber
image: redis
tetapi apakah itu dari dockerhub? direktori lokal? dll ... ini membuatnya membingungkan bagi seorang pemula seperti saya untuk memahami apa yang sebenarnya terjadiTampaknya juga Compose dianggap aman untuk produksi sejak 1.11 , karena https://docs.docker.com/v1.11/compose/production/ tidak lagi memiliki peringatan untuk tidak menggunakannya dalam produksi seperti https: // docs .docker.com / v1.10 / compose / produksi / tidak.
sumber
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 adalahnode-app
dan Anda ingin yang dibuat menggunakanDockerfile
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: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.
Harap perhatikan tanda hubung, tanda hubung dalam file yaml adalah cara kami menentukan array. Dalam contoh ini saya memetakan
8081
pada mesin lokal saya ke8081
wadah seperti:Jadi port pertama adalah mesin lokal Anda, dan yang lainnya adalah port pada wadah, Anda juga bisa membedakan keduanya untuk menghindari kebingungan seperti:
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:
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:
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: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 mencaridocker-compose.yml
File di dalam sana.Sebelumnya
docker-compose.yml
, kami harus berurusan dengan dua perintah terpisah daridocker build .
dandocker run myimage
, tetapi didocker-compose
dunia jika Anda ingin membangun kembali gambar yang Anda tulisdocker-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 melakukannyadocker-compose down
.sumber
docker-compose up
jika hanya satu layanan dalam situasi saya? Kata lain, bandingkan dengandocker run xxx
, apakah ada manfaatnya jika saya gunakandocker-compose up
?docker-compose
wadah tunggal6379
merupakan port default Redis).Dalam alur kerja saya, saya menambahkan Dockerfile untuk setiap bagian dari sistem saya dan mengkonfigurasinya agar setiap bagian dapat berjalan secara individual. Lalu saya menambahkan buruh pelabuhan-compose.yml untuk menyatukan mereka dan menghubungkan mereka.
Keuntungan terbesar (menurut saya): saat menautkan wadah , Anda dapat menentukan nama dan ping wadah Anda dengan nama ini. Karena itu basis data Anda mungkin dapat diakses dengan nama
db
dan tidak lagi dengan IP-nya.sumber
"lebih baik" adalah relatif. Itu semua tergantung pada apa kebutuhan Anda. Tulisan Docker adalah untuk mengatur banyak wadah. Jika gambar-gambar ini sudah ada dalam register buruh pelabuhan, maka lebih baik untuk mendaftarkannya dalam file penulisan. Jika gambar-gambar ini atau beberapa gambar lain harus dibangun dari file di komputer Anda, maka Anda dapat menggambarkan proses membangun gambar-gambar itu di Dockerfile.
Menggunakan multiple FROM dalam satu dockerfile bukan ide yang sangat bagus karena ada proposal untuk menghapus fitur. 13026
Jika misalnya, Anda ingin melakukan dockerize aplikasi yang menggunakan database dan memiliki file aplikasi di komputer Anda, Anda dapat menggunakan file penulisan bersama dengan dockerfile sebagai berikut
docker-compose.yml
Dockerfile
sumber
Dockerfile dan Docker Compose adalah dua konsep berbeda di Dockerland. Ketika kita berbicara tentang Docker, hal pertama yang muncul di pikiran adalah orkestrasi, virtualisasi level OS, gambar, wadah, dll. Saya akan mencoba menjelaskan masing-masing sebagai berikut:
Gambar: Gambar adalah file yang tidak dapat diubah dan dapat dibagikan yang disimpan dalam registri yang dipercaya oleh Docker. Gambar Docker dibangun dari serangkaian lapisan hanya baca. Setiap layer mewakili instruksi yang diberikan di Dockerfile gambar. Sebuah gambar menahan semua binari yang diperlukan untuk dijalankan.
Wadah: Contoh dari sebuah gambar disebut wadah . Wadah hanyalah biner gambar yang dapat dieksekusi yang dijalankan oleh OS host. Gambar berjalan adalah sebuah wadah.
Dockerfile: Dockerfile adalah dokumen teks yang berisi semua perintah / instruksi pembangunan, pengguna dapat memanggil pada baris perintah untuk mengumpulkan gambar. Ini akan disimpan sebagai
Dockerfile
. (Perhatikan huruf kecil 'f'.)Docker-Compose: Compose adalah alat untuk mendefinisikan dan menjalankan aplikasi Docker multi-kontainer. Dengan Tulis, Anda menggunakan file YAML untuk mengonfigurasi layanan aplikasi Anda (wadah). Kemudian, dengan satu perintah, Anda membuat dan memulai semua layanan dari konfigurasi Anda. File Tulis akan disimpan sebagai
docker-compose.yml
.sumber
Bayangkan Anda adalah manajer perusahaan perangkat lunak dan Anda baru saja membeli server baru. Hanya perangkat kerasnya.
Anggap
Dockerfile
sebagai seperangkat instruksi yang Anda akan memberi tahu administrator sistem Anda apa yang harus diinstal pada server baru ini. Sebagai contoh:/var/www
)Sebaliknya, anggap
docker-compose.yml
sebagai seperangkat instruksi yang Anda akan memberitahu administrator sistem Anda bagaimana server dapat berinteraksi dengan seluruh dunia. Sebagai contoh,(Ini bukan penjelasan yang tepat tetapi cukup baik untuk memulai.)
sumber
Dockerfiles adalah untuk membangun gambar misalnya dari Ubuntu, Anda dapat menambahkan
mysql
dipanggilmySQL
pada satu gambar danmywordpress
pada gambar kedua disebutmywordpress
.Tulis file YAML adalah untuk mengambil gambar ini dan menjalankannya secara terpadu. misalnya jika Anda memiliki
docker-compose.yml
panggilan layanan dalam file Andadb
:dan layanan yang disebut worpress seperti:
kemudian di dalam wadah mywordpress Anda dapat menggunakan
db
untuk terhubung ke wadah mySQL Anda. Keajaiban ini dimungkinkan karena host buruh pelabuhan Anda membuat jembatan jaringan (hamparan jaringan).sumber
Dalam dunia Microservices (memiliki basis kode bersama yang umum), setiap Microservice akan memiliki
Dockerfile
sedangkan di tingkat root (umumnya di luar semua Microservices dan di mana POM orang tua Anda berada) Anda akan menentukandocker-compose.yml
untuk mengelompokkan semua Microservices ke dalam aplikasi full-blown.Dalam kasus Anda "Susunan Docker" lebih disukai daripada "Dockerfile". Pikirkan "App" Think "Compose".
sumber
Dockerfile adalah file yang berisi perintah teks untuk merakit gambar.
Tulisan Docker digunakan untuk menjalankan lingkungan multi-kontainer.
Dalam skenario spesifik Anda, jika Anda memiliki beberapa layanan untuk setiap teknologi yang Anda sebutkan (layanan 1 menggunakan reddis, layanan 2 menggunakan kelinci mq dll), maka Anda dapat memiliki Dockerfile untuk setiap layanan dan docker-compose.yml umum untuk menjalankan semua "Dockerfile" sebagai wadah.
Jika Anda ingin semuanya dalam satu layanan, komposisi buruh pelabuhan akan menjadi opsi yang layak.
sumber