Ini adalah cara Anda menggunakan buruh pelabuhan di Raspberry Pi Anda

Raspberry Pi sangat ideal untuk menginstal semua jenis program yang harus selalu dijalankan. Cara paling andal untuk melakukan ini adalah dengan Docker: setiap program berjalan terisolasi dalam sebuah wadah, sehingga mereka tidak dapat saling mengganggu. Kami menunjukkan kepada Anda cara menggunakan Docker di Raspberry Pi dan apa yang harus diingat.

Jika Anda sudah memiliki Raspberry Pi di rumah untuk sementara waktu, kemungkinan Anda akan terus menginstal lebih banyak perangkat lunak di dalamnya. Asisten Rumah, Zwave2Mqtt, Node-RED, Rhasspy ... Semua berjalan dengan baik, sampai Anda memperbarui semua perangkat lunak Anda ke versi baru, dan tiba-tiba salah satu program Anda berhenti bekerja dan memberikan pesan kesalahan yang tidak jelas.

Apa yang terjadi? Skenario yang umum adalah sebagai berikut. Software A dan B sama-sama menggunakan library C versi 1.0. Sementara itu, library C versi 2.0 dirilis, yang tidak kompatibel dengan C 1.0. Software A sedang ditulis ulang untuk menggunakan library C 2.0, sedangkan pengembang software B tidak secepat itu dan tetap menggunakan library C 1.0 untuk sementara waktu. Anda memperbarui perangkat lunak A dan perpustakaan C 2.0 diinstal. Tetapi Raspbian hanya dapat menginstal satu versi pustaka. Akibatnya, software B tiba-tiba tidak berfungsi lagi, karena tidak kompatibel dengan library C 2.0.

Dalam praktiknya, distribusi Linux melakukan semua yang mereka bisa untuk menghindari situasi seperti ini, tetapi itu terjadi. Terkadang dengan cara yang jauh lebih halus, sehingga tidak selalu jelas apa penyebab masalahnya.

01 Apa itu Docker?

Docker memudahkan pengembang untuk mendistribusikan aplikasi sehingga Anda dapat menjalankannya di sistem Linux apa pun. Aplikasi tersebut dapat ditemukan dalam bentuk image di Docker Hub. Gambar seperti itu pada dasarnya adalah templat untuk sistem Linux minimal, yang dapat Anda jalankan di atas Raspbian dalam bentuk wadah.

Setiap wadah benar-benar terisolasi dari wadah lain. Jadi aplikasi dalam penampung tidak melihat aplikasi di penampung lain. Dan dengan memasang dan memperbarui satu penampung, Anda dapat yakin bahwa versi baru itu tidak akan konflik dengan aplikasi di penampung lain. Jadi jika Anda ingin menjalankan lebih dari segelintir aplikasi di Raspberry Pi Anda, Docker akan membantu Anda melakukannya dengan andal. Berkat Docker, Anda juga dapat bereksperimen dengan perangkat lunak baru: jika Anda tidak menyukainya, Anda cukup menghapus penampungnya setelahnya.

02 Instal Docker

Kami menganggap Anda telah menginstal Raspbian, versi Lite sudah cukup. Kemudian masuk melalui ssh untuk menyelesaikan tugas di kursus dasar ini. Pertama instal Docker dengan perintah:

curl -sSL //get.docker.com | SH

Kemudian beri pengguna pi (Anda masuk dengan) akses ke Docker, jadi Anda tidak perlu menjalankan semua perintah Docker dengan perintah sudo :

sudo usermod pi -aG buruh pelabuhan

Keluar dengan keluar lalu masuk lagi. Sekarang pengguna pi milik grup buruh pelabuhan .

03 Halo dunia

Anda sekarang seharusnya dapat mem-boot container Docker pertama:

buruh pelabuhan lari --rm halo-dunia

Perintah ini akan menjalankan container Docker hello-world. Penampung ini menunjukkan dalam keluarannya apa yang terjadi: gambar tidak ditemukan di Raspberry Pi Anda dan kemudian diunduh oleh Docker dari Docker Hub. Kemudian Docker membuat kontainer berdasarkan gambar ini dan menjalankan program di dalamnya. Opsi -rm membersihkan container setelah program ditutup. Anda sekarang tahu bahwa Docker diinstal dan berfungsi dengan benar.

Hypriot

Kami hanya akan menginstal Docker di Raspbian dalam tutorial dasar ini, tetapi sistem operasi lain juga dimungkinkan jika Anda tertarik dengan Docker di Raspberry Pi. Ada Hypriot: sistem operasi untuk Raspberry Pi yang dioptimalkan untuk penggunaan Docker. Yang harus Anda lakukan adalah menginstal image ini pada kartu micro-SD Raspberry Pi Anda dan Anda dapat segera mulai menggunakan Docker. Hypriot sangat menarik jika Anda hanya menjalankan kontainer Docker di Raspberry Pi Anda dan tidak ada yang lain.

04 Membuat wadah

Dasar-dasar bekerja dengan kontainer Docker dilakukan dengan perintah buruh pelabuhan , seperti yang kami tunjukkan di langkah sebelumnya. Biasanya Anda tidak ingin menjalankan container dengan Docker dan segera menutupnya, tetapi membiarkannya berjalan. Jadi kami tidak menggunakan opsi - -rm . Selain itu, Anda ingin agar penampung itu tetap berjalan di latar belakang, tanpa melihat keluarannya di layar sepanjang waktu. Opsi -d digunakan untuk ini .

Jika Anda memulai container seperti ini, Docker akan memberinya nama acak, yang tidak berguna jika Anda memiliki lebih dari beberapa container. Oleh karena itu, dengan opsi --nama NAMA Anda memberi penampung nama tetap.

Kemudian Anda juga harus melihat koneksi jaringan. Karena setiap kontainer Docker diisolasi, Anda tidak dapat hanya mengakses, misalnya, server web yang berjalan pada port 80 dalam sebuah kontainer. Itulah mengapa Anda harus menginstruksikan Docker untuk meneruskan permintaan apa pun pada, katakanlah, port 8888 di Raspberry Pi ke port 80 dalam wadah tertentu. Anda melakukannya dengan opsi -p 8888: 80 . Jika Anda menggabungkan semua opsi ini untuk wadah sampel berisi / whoami, jalankan perintah berikut:

buruh pelabuhan run -d --name whoami -p 8888: 80 berisi / whoami

Jika semuanya berjalan dengan baik, setelah beberapa saat Anda akan melihat string digit hex yang panjang (seperti 5122c935ce5178751a59699d2c5605c607700bd04e5f57a6c18de434ae53956e ). Ini adalah ID penampung. Jika Anda sekarang berselancar di browser web Anda untuk // IP: 8888 dengan bukan IP alamat IP Anda Raspberry Pi, Anda akan melihat halaman web yang dihasilkan oleh server web dalam wadah.

05 Jaga wadah Anda

Setelah Anda memulai beberapa kontainer seperti ini, manajemen mulai menjadi penting. Pertama-tama, penting untuk melihat container mana yang sedang berjalan:

buruh pelabuhan ps

Anda kemudian akan melihat informasi tentang semua kontainer yang aktif (dengan opsi -a juga untuk kontainer yang telah dihentikan). Kolom pertama berisi ID unik untuk setiap penampung, di samping gambar tempat penampung dibuat. Kolom STATUS paling baik dilihat jika ada masalah. Misalnya, jika penampung Anda terus memulai ulang dengan masalah, Anda akan melihatnya di sini.

Di kolom PORTS Anda dapat melihat port yang digunakan. Misalnya, whoami wadah kami mengatakan 0.0.0.0:8888->80/tcp . Itu artinya tcp port 8888 di Raspberry Pi akan dialihkan ke tcp port 80 di container. Kolom terakhir menunjukkan nama container, yang dapat Anda gunakan di perintah Docker lebih lanjut.

Jika Anda menginginkan informasi lebih lanjut, perintah statistik buruh pelabuhan akan berguna. Anda kemudian akan melihat statistik untuk setiap penampung, seperti konsumsi prosesor, memori, dan jaringan. Jika Anda ingin semua informasi yang diketahui Docker tentang container tertentu, jalankan perintah ini dengan ID atau nama container:

buruh pelabuhan memeriksa CONTAINER

Dan terakhir, jika Anda ingin melihat log dari sebuah kontainer, jalankan salah satu dari dua perintah berikut:

buruh pelabuhan log CONTAINER

log buruh pelabuhan -f PENAMPUNG

Dengan opsi -f Anda dapat melacak log secara real time sementara container menghasilkannya.

06 Mengelola wadah dan gambar Anda

Jika Anda ingin menghentikan, memulai, atau memulai ulang container yang sedang berjalan, Anda dapat melakukannya dengan mudah menggunakan perintah berikut:

buruh pelabuhan berhenti CONTAINER

buruh pelabuhan mulai CONTAINER

buruh pelabuhan restart CONTAINER

Jika Anda ingin menghentikan sementara penampung (semua program di dalamnya kemudian 'dibekukan' untuk sementara), jalankan perintah ini:

buruh pelabuhan jeda CONTAINER

Setelah perintah ini, semua program di wadah akan berjalan kembali:

buruh pelabuhan batalkan jeda CONTAINER

Dengan gambar perintah docker Anda akan melihat daftar gambar yang telah diunduh Docker. Untuk wadah whoami kami Anda lihat di kolom repositori teks containous / whoami berdiri dan kolom TAG adalah terbaru . Nama lengkap gambar akan berisi / whoami: terbaru , tetapi yang terbaru adalah nilai default untuk tag, sehingga dapat dihilangkan. Itu sebabnya dalam tugas kami di bagian 4 dengan menjalankan buruh pelabuhan kami hanya menentukan berisi / whoami sebagai gambar.

Di kolom BUAT Anda dapat melihat sudah berapa lama gambar ini diunduh. Untuk memperbarui gambar ini, jalankan perintah berikut:

buruh pelabuhan tarikan berisi / whoami: terbaru

Docker kemudian akan mengunduh versi terbaru dari gambar atau memberi tahu Anda bahwa gambar tersebut sudah yang terbaru. Jika Anda kemudian menjalankan gambar buruh pelabuhan lagi , Anda akan melihat bahwa gambar telah ditambahkan.

Namun container whoami saat ini masih menggunakan image lama. Untuk memutakhirkan ini, keluar ( docker stop whoami ) dan hapus ( docker rm wohami ) penampung, lalu buat ulang penampung menggunakan perintah jalankan buruh pelabuhan dari bagian 4.

Membersihkan

Jika Anda memperbarui image Docker secara rutin untuk menjalankan versi terbaru di sebuah container, image lama akan tetap ada. Kartu micro SD dari Raspberry Pi Anda dengan kapasitas paling banyak beberapa lusin gigabyte dapat dengan cepat terisi, terutama jika Anda menjalankan kontainer besar. Misalnya, kontainer seperti yang berasal dari Home Assistant dan Rhasspy berukuran lebih dari satu gigabyte. Sekarang Docker bekerja dengan sistem sehingga pembaruan tidak mengunduh dan menyimpan gigabyte penuh itu lagi, tetapi setelah banyak pembaruan, penyimpanan yang diperlukan terus meningkat. The perintah buruh pelabuhan rmi image_id menghapus gambar berdasarkan ID yang ditemukan di output dari gambar buruh pelabuhan perintah . Docker juga menyertakan perintah pemangkasan gambar buruh pelabuhanyang menghapus semua gambar yang tidak digunakan oleh penampung. Dengan sistem buruh pelabuhan prune remove Anda menghentikan container, paling tidak jaringan yang digunakan oleh satu container dan file cache.

07 Volume

Penampung sampel kami whoami tidak menggunakan data atau data konfigurasi apa pun. Tetapi Anda dapat membagikan direktori di Raspberry Pi Anda dengan wadah Docker sehingga dapat mengakses data darinya. Docker menyebut direktori bersama seperti itu volume.

Jika Anda akan bekerja dengan banyak kontainer di Raspberry Pi Anda, disarankan agar Anda menggabungkan semua direktori. Buat direktori untuk itu, misalnya dengan:

mkdir -p / home / pi / containers / nginx / data

Kemudian letakkan di folder container / nginx / data sebuah file index.html dengan halaman html.

Kemudian Anda sekarang dapat memulai kontainer dengan nginx (server web) yang Anda gunakan untuk berbagi direktori ini:

docker run -d --name nginx -p 8080: 80 -v / home / pi / containers / nginx / data: / usr / share / nginx / html: ro nginx

Kemudian wadah dimulai dengan server web dan memasang direktori / home / pi / containers / nging / data pada Raspberry Pi Anda di dalam wadah di lokasi / usr / share / nginx / html , dengan hanya hak baca ( ro singkatan dari read-only). Jika Anda sekarang membuka IP: 8080 Anda akan melihat file html index.html .

08 Docker Compose

Sejauh ini kami telah memulai kontainer Docker secara manual dengan perintah jalankan buruh pelabuhan . Tetapi jika Anda menjalankan beberapa kontainer Docker dan ingin mengubah konfigurasinya secara teratur, pendekatan lain lebih baik: meletakkan semuanya dalam satu file konfigurasi. Itu berfungsi dengan Docker Compose.

Untuk melakukan ini, pertama-tama instal pip manajer paket Python dan kemudian Docker Compose (yang merupakan program Python) dengan perintah berikut:

sudo apt menginstal python3-pip

sudo pip3 menginstal docker-compose

Sekarang Anda dapat meletakkan konfigurasi beberapa kontainer Docker di file docker-compose.yml . Untuk melakukan ini, buat file Docker Compose dengan:

nano docker-compose.yml

Masukkan konfigurasi berikut untuk wadah contoh kami whoami dan nginx:

versi: '3.7'

jasa:

siapa saya:

gambar: mengandung / whoami

container_name: whoami

restart: selalu

port:

- 8888: 80

nginx:

gambar: nginx

container_name: nginx

restart: selalu

port:

- 8080: 80

volume:

- / home / pi / containers / nginx / data: / usr / share / nginx / html: ro

09 YAML

Simpan file dengan Ctrl + O dan tutup nano dengan Ctrl + X. Ini adalah file YAML (dengan ekstensi .yml). YAML (singkatan dari singkatan rekursif 'YAML Ain't Markup Language') adalah format file untuk mendefinisikan data konfigurasi dengan cara yang dapat dibaca. Info lebih lanjut dapat ditemukan di situs web resmi.

Anda dapat melihat di file ini bahwa kami mendefinisikan dua kontainer sebagai layanan. Untuk setiap penampung kami mendefinisikan gambar yang digunakan, nama penampung harus diberikan dan apakah penampung harus dimulai ulang secara otomatis jika terjadi masalah. Selain itu, kami juga menentukan port dan volume yang dialihkan.

Semua informasi ini juga dapat ditemukan di baris perintah dengan menjalankan buruh pelabuhan , tetapi dalam file Docker Compose ini sedikit lebih mudah .

10 Bekerja dengan Docker Compose

Setelah Anda memiliki file docker-compose.yml , Anda cukup membuat dan menjalankan kontainer yang ditentukan di dalamnya:

buruh pelabuhan-menulis up -d

Setelah itu Anda dapat mengelola kontainer tersebut dengan perintah buruh pelabuhan, tetapi buruh pelabuhan-compose sendiri juga memiliki banyak opsi khusus untuk mengelola wadah yang telah Anda buat dengan Docker Compose. Jadi Anda membersihkan semuanya dengan perintah berikut, semua kontainer yang ditentukan akan dihentikan dan dihapus:

buruh pelabuhan-menulis

Anda juga dapat memantau log semua kontainer dengan:

buruh pelabuhan-menulis log -f

Setiap penampung menampilkan pesan lognya dengan warna berbeda. Docker Compose juga memiliki lagu terkenal untuk menghentikan, memulai, dan memulai ulang semua container:

buruh pelabuhan-menulis berhenti

buruh pelabuhan-menulis dimulai

mulai ulang docker-compose

Memperbarui semua kontainer di file Docker Compose Anda dilakukan dengan dua perintah berikut:

tarikan buruh pelabuhan-menulis

mulai ulang docker-compose

Perintah pertama mengunduh gambar baru untuk semua penampung yang telah Anda tentukan dan perintah kedua mem-boot ulang semua penampung tersebut sehingga mereka menggunakan gambar baru. Kemudian Anda dapat menghapus gambar lama jika diinginkan dengan:

pangkas gambar buruh pelabuhan

11 Dan seterusnya

Anda dapat menemukan image Docker dari banyak aplikasi di Docker Hub. LinuxServer.io juga memiliki lusinan gambar Docker yang dikelola oleh sukarelawan. Gambar-gambar ini dipelihara dan didokumentasikan dengan baik, dan semuanya menggunakan pendekatan dan infrastruktur dasar yang serupa.

Cobalah untuk membatasi diri Anda pada gambar Docker 'resmi', yang disediakan oleh proyek itu sendiri, atau gambar dari pihak tepercaya seperti LinuxServer.io. Karena pada prinsipnya siapa pun dapat mempublikasikan image Docker di Docker Hub, tetapi image tersebut tidak selalu diperbarui.

Arsitektur prosesor yang tepat

Anda harus mengunduh image Docker untuk arsitektur prosesor yang benar. Raspberry Pi memiliki prosesor ARM, yang tidak kompatibel dengan prosesor Intel atau AMD yang ditemukan di PC. Banyak image Docker diterbitkan dengan cara yang secara otomatis mendownload versi yang benar untuk arsitektur prosesor Anda. Di Docker Hub, Anda akan menemukan arsitektur mana yang didukung di halaman tentang image Docker yang diinginkan. Untuk Raspbian yaitu arm32v7, arm / v7 atau armhf. Jika Anda mendapatkan kesalahan format exec saat meluncurkan kontainer Docker , Anda mungkin mengunduh gambar dari arsitektur prosesor yang salah. Jika itu terjadi, Anda perlu mendownload gambar dengan tag yang berbeda. Misalnya, proyek motionEye mendistribusikan image Docker resminya dengan dua tag yang memungkinkan: Anda menjalankanccrisan / motioneye: master-amd64 pada prosesor yang kompatibel dengan Intel dan ccrisan / motioneye: master-armhf pada Raspberry Pi.