Bagaimana mengubah skrip Python menjadi program "nyata" dengan Docker

Tidak ada yang peduli jika Anda tahu cara memperluas daftar tertaut - semua orang ingin dapat dengan mudah menjalankan program Anda di komputer mereka . Ini dimungkinkan oleh Docker.





Untuk siapa artikel ini?



Pernahkah Anda diberikan kode atau program yang pohon ketergantungannya terlihat seperti papan sirkuit yang kusut?





Seperti apa manajemen ketergantungan itu



Tidak masalah, saya yakin pengembang telah dengan baik hati memberi Anda skrip instalasi untuk membuat semuanya berfungsi. Jadi, Anda menjalankan skripnya, dan segera Anda melihat banyak pesan log kesalahan di shell. β€œSemuanya bekerja di mesin saya,” - begitulah biasanya jawaban pengembang saat Anda meminta bantuannya.



Docker memecahkan masalah ini dengan menyediakan portabilitas yang hampir sepele untuk aplikasi docker. Pada artikel ini, saya akan menunjukkan cara cepat melakukan docker pada aplikasi Python Anda sehingga dapat dengan mudah dibagikan dengan siapa saja yang memiliki Docker.



Secara khusus, kita akan melihat skrip yang perlu dijalankan sebagai proses latar belakang.



Repositori Github dan Docker



Jika visibilitas lebih nyaman bagi Anda, pelajari repositori Github dan Docker tempat kode ini akan dihosting.



Tapi ... kenapa Docker?



Penampung dapat dibandingkan dengan menempatkan perangkat lunak Anda dalam wadah pengiriman yang menyediakan antarmuka standar bagi perusahaan pelayaran (atau komputer induk lainnya) untuk berinteraksi dengan perangkat lunak.



Penampung aplikasi sebenarnya adalah standar emas untuk portabilitas.





Umum Docker / Containerization Framework



Containerization (terutama dengan buruh pelabuhan ) membuka kemungkinan yang luar biasa untuk aplikasi perangkat lunak Anda. Aplikasi yang dimasukkan ke dalam container dengan benar (misalnya, docker) dapat diterapkan dengan skalabel melalui Kubernetes atau Scale Sets dari penyedia cloud mana pun. Dan ya, kami juga akan membicarakannya di artikel berikutnya.



Aplikasi kami



Tidak akan ada yang terlalu rumit di dalamnya - kami kembali bekerja dengan skrip sederhana yang memantau perubahan dalam direktori (karena saya bekerja di Linux, ini adalah /tmp



). Log akan didorong ke stdout, yang penting jika kita ingin mereka muncul di log buruh pelabuhan (lebih lanjut tentang itu nanti).





main.py: Aplikasi pemantauan file sederhana



Program ini akan berjalan tanpa batas.



Seperti biasa, kami memiliki file requirements.txt



dengan dependensi, kali ini hanya dengan satu:





persyaratan.txt



Buat Dockerfile



Di artikel saya sebelumnya, kami membuat skrip untuk proses instalasi di Makefile, yang membuatnya sangat mudah untuk dibagikan. Kali ini kami akan melakukan sesuatu yang serupa, tetapi di Docker.





Dockerfile



Kita tidak perlu masuk ke detil struktur dan pengoperasian Dockerfile, ada tutorial yang lebih detil tentang ini .



Ringkasan Dockerfile - kita mulai dengan gambar dasar yang berisi interpreter Python lengkap dan paketnya, lalu instal dependensi (baris 6), buat gambar minimalis baru (baris 9), salin dependensi dan kode ke dalam gambar baru (baris 13- 14; ini disebut build multi-tahap, dalam kasus kami ini mengurangi ukuran gambar jadi dari 1 GB menjadi 200 MB), kami menetapkan variabel lingkungan (baris 17) dan perintah eksekusi (baris 20), yang mana adalah dimana kita berakhir.



Merakit gambar



Setelah selesai dengan Dockerfile, kita cukup menjalankan perintah berikut dari direktori proyek kita:



sudo docker build -t directory-monitor .









Menyatukan gambar



Menjalankan gambar



Setelah menyelesaikan perakitan, Anda dapat mulai membuat sihir.



Salah satu hal hebat tentang Docker adalah ia menyediakan antarmuka standar. Jadi, jika Anda merancang program Anda dengan benar, lalu mentransfernya ke orang lain, cukup untuk mengatakan bahwa Anda perlu belajar buruh pelabuhan (jika orang tersebut belum mengetahuinya), dan tidak mengajari dia seluk-beluk perangkat program Anda.



Ingin tahu maksud saya?



Perintah untuk menjalankan program terlihat seperti ini:





Ada banyak hal yang harus dijelaskan di sini, jadi mari kita pecahkan menjadi beberapa bagian:



-d



- meluncurkan gambar dalam mode terpisah, bukan dalam mode latar depan



--restart=always



- jika penampung buruh pelabuhan macet, itu akan dimulai ulang. Kita bisa pulih dari kecelakaan, hore!



--e DIRECTORY='/tmp/test'



- kami melewati direktori untuk dipantau menggunakan variabel lingkungan. (Kami juga dapat mendesain program python kami untuk membaca argumen, dan meneruskan direktori yang dilacak dengan cara itu.)



-v /tmp/:/tmp/



- pasang direktori /tmp



ke direktori /tmp



kontainer Docker. Ini penting: direktori apa pun yang ingin kita lacak HARUS terlihat oleh proses kita di kontainer buruh pelabuhan, dan beginilah cara penerapannya.



directory-monitor



- nama gambar yang akan diluncurkan



Setelah meluncurkan gambar, statusnya dapat diperiksa menggunakan perintah docker ps



:





Output



Docker ps Docker menghasilkan nama gila untuk menjalankan kontainer karena orang tidak mengingat nilai hash dengan baik. Dalam hal ini, nama crazy_wozniak mengacu pada penampung kami.



Sekarang, karena kami melacak /tmp/test



di komputer lokal saya, jika saya membuat file baru di direktori ini, ini akan terlihat di log penampung:





Log Docker mendemonstrasikan bahwa aplikasi tersebut bekerja dengan benar.



Itu saja, sekarang program Anda di-docker dan berjalan di komputer Anda. Selanjutnya, kita perlu menyelesaikan masalah mentransfer program ke orang lain.



Bagikan programnya



Program docker Anda dapat bermanfaat bagi kolega, teman, Anda di masa mendatang, dan siapa pun di dunia, jadi kami perlu mempermudah pendistribusian. Solusi ideal untuk ini adalah hub Docker .



Jika Anda belum memiliki akun, daftar lalu login dari cli:





Masuk ke Dockerhub



Selanjutnya, tandai dan dorong gambar yang baru dibuat ke akun Anda.





Tambahkan label dan dorong gambar





Sekarang gambar ada di akun hub buruh pelabuhan Anda.Untuk



memastikan semuanya berfungsi, mari coba tarik gambar ini dan gunakan dalam pengujian ujung ke ujung dari semua pekerjaan yang telah kita lakukan:





Menguji citra buruh pelabuhan kami secara



menyeluruh . Seluruh proses ini hanya membutuhkan waktu 30 detik.



Apa berikutnya?



Mudah-mudahan saya bisa meyakinkan Anda tentang kepraktisan penampung yang luar biasa. Docker akan bertahan lama bersama kami, dan semakin cepat Anda menguasainya, semakin banyak keuntungan yang akan Anda dapatkan.



Docker adalah tentang mengurangi kompleksitas. Dalam contoh kami, itu adalah skrip Python sederhana, tetapi Anda dapat menggunakan tutorial ini untuk membuat gambar dengan kompleksitas sewenang-wenang dengan pohon ketergantungan yang menyerupai spaghetti, tetapi kesulitan ini tidak akan memengaruhi pengguna akhir .



Sumber dari










Periklanan



Vdsina menawarkan server virtual di Linux atau Windows. Kami menggunakan peralatan bermerek eksklusif , panel kontrol server berpemilik terbaik dari jenisnya, dan salah satu pusat data terbaik di Rusia dan UE. Cepat pesan!






All Articles