Cara menghemat uang untuk membeli laptop: Docker Remote API via TLS

Baru-baru ini, saya memutuskan untuk membeli laptop pribadi. Pengembangan proyek open-source ( aplikasi untuk Flipper ) dan pergantian tempat kerja memaksa saya untuk tidak lagi menggunakan laptop kerja saya untuk keperluan pribadi. Dan di sini, sangat disayangkan untuk memberikan biaya Hyndai Solaris yang didukung untuk laptop (di tempat kerja saya memiliki konfigurasi top-end 16 "MacBook). Oleh karena itu, diputuskan untuk memoderasi semangat saya dan mengambil MacBook Air 13" termurah nakal seharga 80 ribu rubel. Namun, di mac Docker memakan sumber daya yang sangat tinggi, jadi setelah pembelian saya harus memikirkan tentang cara mengatasi masalah ini. Ide segera datang untuk membawa Mesin Docker online. Tidak lebih cepat diucapkan daripada dilakukan.











Penyetelan Server



Menginstal Mesin Docker di server



Overhead Docker di Linux minimal. Docker di Mac berjalan di mesin virtual Linux, sedangkan di Linux secara langsung menggunakan kernel host. Anda dapat membaca lebih lanjut tentang ini di sini .



Karena ping kecil penting bagi kami, masuk akal untuk membeli hosting di Moskow, tetapi tidak banyak perbedaannya.



Total: Linux, Moskow, karakteristik tergantung pada kebutuhan Anda.

Hanya ada tarif siap pakai yang murah untuk ini di ruvds.com . Juga di ruvds.com dimungkinkan untuk memesan pengaturan segera dengan Docker CE di papan. Agak, tapi bagus.



Cari kata sandi dan login di antarmuka web hosting Anda dan hubungkan.







Selanjutnya, instal Docker. Ada instruksi yang sangat baik di sini , di bawah ini saya akan secara singkat memberikan perintah darinya (jika Anda tiba-tiba tidak memilikinya sudo, jangan lupa untuk menginstalnya apt-get install sudodari bawah su):



sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io


Mari kita periksa pekerjaan buruh pelabuhan:



docker run hello-world




Menghasilkan kunci



Pertama, Anda perlu membuat kunci SSL. Anda bisa mengikuti jalan yang mudah dan sulit. Untuk instruksi tentang jalur keras (kanonik), lihat dokumentasi Docker . Tetapi orang-orang yang baik memasukkan semuanya ke dalam wadah <10mb.



Mari buat folder untuk permulaan, tempat kita akan menyimpan semuanya. Folder bisa apa saja. Yang pertama ( /etc/docker/ssl) menyimpan kunci rahasia, yang kedua ( ~/.docker) adalah kunci untuk akses.



sudo mkdir -p /etc/docker/ssl
mkdir -p ~/.docker


Pertama, mari buat sertifikat klien dan CA di folder lokal



docker run --rm -v ~/.docker:/certs \
    paulczar/omgwtfssl


Mari buat sertifikat server menggunakan CA yang dibuat di atas. Tentukan di sana, dipisahkan dengan koma, IP yang akan Anda gunakan untuk mengakses server. Dalam kasus kami, jangan lupa untuk menentukan IP server Anda di sana!



sudo cp ~/.docker/ca.pem /etc/docker/ssl/ca.pem
chown -R $USER ~/.docker
docker run --rm -v /etc/docker/ssl:/server \
    -v ~/.docker:/certs \
    -e SSL_IP=127.0.0.1,172.17.8.101,YOUR_IP \
    -e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \
    -e SSL_CERT=/server/cert.pem paulczar/omgwtfssl


Konfigurasi daemon buruh pelabuhan



Tugas utama pada tahap ini adalah mendorong argumen baris perintah dengan parameter yang kita butuhkan saat memulai buruh pelabuhan. Bagaimana Anda melakukannya tidak penting, di Ubuntu Anda dapat melakukannya seperti ini:



1. Edit file dengan /etc/default/dockereditor favorit Anda



nano /etc/default/docker


Dan tambahkan variabel `DOCKER_OPTS` di akhir. Jangan lupa memasukkan IP eksternal Anda di sana




DOCKER_OPTS="-H=YOUR_IP:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/cert.pem --tlskey=/etc/docker/ssl/key.pem"


2. Tambahkan argumen untuk memulai layanan. Di Ubuntu, file parameter startup adalah /lib/systemd/system/docker.service. Tambahkan baris ke sub-bagian [Service]:



EnvironmentFile=/etc/default/docker


Dan kami mengubah perintah peluncuran secara berdampingan:



ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS


Ya, poin 1 adalah opsional, argumen perintah dapat disisipkan di sini, tetapi ada beberapa di antaranya dan tidak nyaman untuk memiliki perintah yang besar untuk dijalankan di file layanan.



3. Mulai ulang daemon



sudo systemctl daemon-reload
sudo systemctl restart docker


4. Periksa di log daemon apakah semuanya berfungsi:



journalctl -u docker.service -f




5. Mari kita coba terhubung melalui tls:



export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
docker info




Kerja!



Konfigurasi pada klien



Sebelum Anda mulai mengkonfigurasi klien, Anda perlu mengunduh folder sertifikat ke komputer Anda. Anda dapat melakukannya dengan cara apa pun yang nyaman. Misalnya, melalui `scp`:



Di mesin jarak jauh:



mkdir /tmp/cert-for-docker && cp -v ~/.docker/{ca,cert,key}.pem /tmp/cert-for-docker


Di mesin lokal:



scp -r root@YOUR_IP:/tmp/cert-for-docker ~/.docker


Selanjutnya, gunakan folder ini untuk mengkonfigurasi klien buruh pelabuhan Anda.



Mac OS CLI



Di sini pengaturannya turun pada fakta bahwa Anda perlu mendaftarkan variabel di lingkungan Anda dan semuanya akan berfungsi. Namun, muncul pertanyaan: “Di mana saya bisa mendapatkan klien tanpa busana? Kami tidak membutuhkan klien kelas berat 2GB resmi yang dikirimkan dengan Mesin Docker, bukan? "



Ada solusinya! Docker modern telah lama dibagi menjadi bagian klien dan server. Anda dapat mengunduh biner klien terpisah yang dikompilasi untuk macOS. Instruksi resminya ada di sini , tetapi saya akan memberikan ekstrak singkatnya di sini:



1. Unduh binari terbaru atau yang sesuai dengan server Anda (Anda dapat menariknya dengan perintah docker info) dari tautan dan membongkar

2. Salin binari ke folder /usr/local/bin/untuk bekerja secara global:

sudo cp docker/docker /usr/local/bin/


3. Kami mendaftar ~/.bashrcatau ~/.zshrcvariabel lingkungan yang diperlukan. Jangan lupa untuk memasukkan IP dan jalur Anda ke folder dengan sertifikat :

export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_CERT_PATH=PATH_TO_CERT
export DOCKER_TLS_VERIFY=1


4. Restart komputer (Schaub pasti), periksa:



docker info
docker run hello-world




Kecantikan!



Jetbrains IDE (PyCharm, IDEA, Android Studio, dll)



Studio Jetbrains mendukung buruh pelabuhan melalui tls di luar kotak. Pengaturan ini terletak di Preference->Build, Execution, Deployment->Docker->+. Anda perlu memilih TCP socketdan memasukkan detail Anda di sana. Namun, ada tangkapan.





Jika semuanya dilakukan seperti yang dimaksudkan, maka kesalahan akan muncul:

Respons kesalahan dari daemon: Klien mengirim permintaan HTTP ke server HTTPS.

kesalahan info pencetakan cantik
Atau

Tidak dapat terhubung: Status 400: Klien mengirim permintaan HTTP ke server HTTPS
Penting untuk secara eksplisit meresepkan ke studio kami protokol apa yang kami gunakan https:

ANDA_IP : 2376
Semuanya akan bekerja dengan baik setelahnya.



Bonus (Portainer)



Untuk melacak secara efektif container yang sedang berjalan dan sudah digunakan, saya menginstal Portainer di server ini. Itu harus ditempatkan dalam dua baris:



docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce


Setelah itu, YOUR_IP:9000antarmuka web yang indah akan bertahan dan Anda dapat melihat kontainer yang berjalan dan mati. Ingat bagaimana kita memulai hello-world? Itu ada di sini dan Anda dapat membersihkannya langsung dari antarmuka.





Portainer itu sendiri dapat dihubungkan ke mesin Docker apa pun dan mengelola kontainer buruh pelabuhan semua mesin Anda dari satu tempat. Metrik (Grafana + Prometheus + Alerts) dapat diatur dengan mudah dengan dua perintah (jangan lupa untuk menginstal gi dan docker-compose):



git clone https://github.com/stefanprodan/dockprom && cd dockprom
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d








Hanya untuk Storage Anda perlu perubahan sum(node_filesystem_free_bytes{fstype="aufs"})untuksum(node_filesystem_free_bytes{fstype="ext4"})







Kesimpulan



Ketika saya membeli laptop, saya tidak memanjakan diri dengan harapan akan cukup untuk saya untuk tugas apa pun, terutama karena itu akan cukup untuk saya untuk pengembangan Java / Android. Tapi saya sangat terkejut, sejauh ini semua proyek saya, pribadi dan hanya sumber terbuka, terbang di IDE. Namun, saya menyadari bahwa untuk semua kecintaan saya pada mesin tik ini, Docker tidak akan mati. Saya sangat senang telah mengonfigurasinya sekali di server buruh pelabuhan jarak jauh. Selama proses pengembangan, sangat tidak terlihat bahwa server bukan lokal. Saya tidak merasakan batasan apa pun, itu semua sama untuk menjalankan Docker tanpa internet sebelumnya tidak masuk akal. Secara umum, saya sangat puas. -1 alasan untuk membeli laptop yang kuat dan berat.



Selain itu, biaya overhead Docker untuk Linux minimal, sehingga Anda dapat menyewa mobil seharga 240 rubel per bulan dari RuVDS di Federasi Rusia (dan dengan diskon menggunakan kode promo HABR-10% dan bahkan kurang) dan tidak perlu khawatir tentang ping dan dampak aplikasi server pada UI. Ditambah ada IP eksternal (kemampuan untuk menunjukkan klien dan menyimpan pasir pengembang), VPN pribadi dan keandalan kelas atas. Secara keseluruhan, saya puas.



Sumber:












All Articles