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.