GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Bagaimana dan Mengapa Menggunakan Host Docker Jarak Jauh

docker Program CLI tidak bergantung pada daemon Docker yang menjalankan container Anda. Meskipun kedua komponen biasanya berjalan di mesin lokal Anda, Anda dapat menjalankan docker perintah terhadap host Docker jarak jauh.

Menggunakan host jarak jauh dapat membantu dalam beberapa skenario. Anda dapat menyiapkan instalasi Docker Engine bersama untuk tim pengembangan kecil. Setiap pengembang kemudian dapat terhubung ke wadah jarak jauh dengan docker exec lokal mereka perintah.

Host jarak jauh lebih sering berharga ketika Anda memiliki server yang kuat yang tidak digunakan. Jika laptop Anda lambat atau kehabisan penyimpanan, menggunakan host Docker khusus di jaringan Anda dapat sangat meningkatkan kinerja. Anda masih mendapatkan semua kemudahan docker lokal CLI di terminal Anda.

Menyiapkan Host Jarak Jauh

Pastikan Anda telah menginstal Docker pada sistem yang akan menjadi host jarak jauh Anda. Anda hanya memerlukan docker-cli paket di mesin lokal Anda, karena Anda tidak akan menjalankan Mesin Docker.

Instalasi Docker baru menyediakan soket Unix secara default. Akses jarak jauh membutuhkan soket TCP. Jalankan dockerd (daemon Docker dapat dieksekusi) dengan -H tandai untuk menentukan soket yang ingin Anda ikat.

sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Perintah ini akan mengikat Docker ke soket Unix default dan port 2375 pada alamat loopback mesin Anda. Anda dapat mengikat ke soket dan alamat IP tambahan dengan mengulangi -H bendera.

Bendera harus diteruskan setiap kali Anda menjalankan dockerd . Jika Anda ingin mereka tetap ada setelah reboot, buat alias shell atau ubah definisi layanan Docker. Inilah cara Anda dapat mencapai yang terakhir dengan systemd , yang digunakan sebagian besar distribusi Linux untuk manajemen layanan.

Edit /etc/systemd/system/docker.service.d/options.conf (atau buat jika tidak ada). Temukan [Service] bagian dan ubah ExecStart baris:

[Service]
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Muat ulang systemd . Anda konfigurasi untuk menerapkan perubahan:

sudo systemctl daemon-reload

Jika Docker sudah berjalan, gunakan sudo systemctl restart docker untuk memulai kembali layanan. Daemon Docker sekarang akan mengikat ke port TCP 2375 setiap kali dimulai. Pastikan lalu lintas ke port diizinkan oleh konfigurasi firewall Anda. Jika Anda menggunakan ufw, jalankan ufw allow 2375 untuk membuka port.

Menghubungkan ke Host Jarak Jauh

CLI Docker menggunakan DOCKER_HOST variabel lingkungan untuk menentukan host yang akan dihubungkan. Soket Unix daemon lokal akan digunakan saat variabel tidak disetel.

Anda dapat menggunakan host jarak jauh untuk satu docker perintah dengan menambahkan DOCKER_HOST variabel:

DOCKER_HOST=tcp://192.168.0.1:2375 docker run httpd:latest -d

Ini akan memulai wadah baru dari httpd:latest gambar menggunakan mesin Docker di 192.168.0.1:2375 .

Jika Anda akan menjalankan beberapa perintah dalam satu sesi, ekspor DOCKER_HOST variabel ke dalam shell Anda:

export DOCKER_HOST=tcp://192.168.0.1:2375

docker run httpd:latest -d --name httpd
docker ps
docker rm httpd --force

Anda dapat membuat docker selalu gunakan host jarak jauh dengan menyetel DOCKER_HOST secara global di file konfigurasi shell Anda. Inilah cara Anda melakukannya di Bash:

echo "export DOCKER_HOST=tcp://192.168.0.1:2375" >> ~/.bashrc

Sekarang DOCKER_HOST variabel lingkungan akan disetel setiap kali shell Anda dimulai.

Meningkatkan Keamanan

Soket TCP dasar tidak terlindungi. Siapa pun yang dapat menjangkau mesin Anda melalui jaringan dapat menggunakan soket Docker untuk mengontrol container Anda.

Docker mendukung SSH alih-alih TCP. Ini biasanya merupakan pilihan yang lebih baik jika host memiliki server SSH yang tersedia. Ini mencegah pengguna yang tidak diautentikasi untuk mendapatkan akses. Menggunakan SSH tidak memerlukan konfigurasi tambahan. DOCKER_HOST memungkinkan Anda memasukkan string koneksi SSH:

DOCKER_HOST=ssh://user@hostname docker run -d --name httpd

Atau, Anda dapat menggunakan binding SSH untuk secara langsung mengikat soket Docker Unix host jarak jauh ke mesin lokal Anda:

ssh -L /var/run/docker.sock:/var/run/docker.sock

Sekarang Anda tidak perlu menggunakan DOCKER_HOST sama sekali. docker.sock jarak jauh akan terikat pada mitra lokalnya. Docker akan otomatis mendeteksi ini sebagai soket Unix standarnya.

Menggunakan salah satu solusi berbasis SSH adalah cara yang lebih disukai untuk mendekati keamanan daemon Docker. Docker juga mendukung TLS jika Anda memberikan otoritas sertifikat dan kunci server dan klien:

dockerd --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=0.0.0.0:2375

Sekarang klien akan dapat terhubung pada port 2375 jika mereka menunjukkan sertifikat SSL yang valid yang dipercaya oleh otoritas sertifikat ca.pem .

TERKAIT: Apa itu File PEM dan Bagaimana Cara Menggunakannya?

Membuat Konteks

Docker memungkinkan Anda mengatur beberapa "konteks" untuk menghubungkan ke host yang berbeda. Konteks dapat digunakan sebagai pengganti DOCKER_HOST variabel lingkungan. Mereka membuatnya lebih mudah untuk beralih di antara beberapa host jarak jauh.

docker context create --docker host=tcp://192.168.0.1:2375 --description remote
docker context create --docker host=unix:///var/run/docker.sock --description local

Perintah ini membuat dua konteks berbeda – satu untuk docker.sock lokal Anda dan satu untuk koneksi jarak jauh.

Anda dapat beralih di antara konteks menggunakan docker context use perintah:

docker context use remote

# Container is started on "remote"
docker run httpd:-latest -d

docker context use local

# Lists containers running on "local"
docker ps

Konteks berguna saat Anda bekerja dengan beberapa host Docker. Mereka tidak repot daripada terus-menerus menyetel ulang DOCKER_HOST variabel saat Anda berpindah antar host.

Kelemahan Host Jarak Jauh

Kami mencatat sebelumnya bahwa host jarak jauh dapat meningkatkan kinerja build. Pernyataan ini hanya benar jika mesin yang menjalankan Docker Engine lebih cepat daripada perangkat keras lokal Anda. Kelemahan terbesar dari host jarak jauh adalah biaya tambahan untuk berinteraksi melalui jaringan. Anda juga menjadi tergantung pada jaringan – jika kehilangan konektivitas, Anda tidak akan dapat mengelola container Anda.

Anda harus memiliki koneksi jaringan berkecepatan tinggi yang andal jika Anda akan menggunakan host jarak jauh sebagai server build utama Anda. docker build pertama stage mengirimkan konten konteks build gambar Anda (biasanya direktori kerja Anda) ke Docker Engine. Ini cepat ketika Docker berjalan secara lokal tetapi mungkin membutuhkan waktu lebih lama untuk mengunggah ke mesin jarak jauh.

Mengekspos instance daemon Docker melalui jaringan adalah risiko keamanan. Anda perlu memastikan akses dibatasi untuk pengguna dan perangkat yang berwenang. Pemaparan yang tidak disengaja dari soket daemon Docker dapat memberi penyerang akses tanpa batas ke host. Docker biasanya berjalan sebagai root jadi sangat penting bahwa hanya individu tepercaya yang dapat memulai container.

Kesimpulan

Menyiapkan host Docker jarak jauh memungkinkan Anda memisahkan instance container dari mesin pengembangan lokal Anda. Server build Docker khusus dapat menawarkan peningkatan kinerja dan ruang penyimpanan gambar yang lebih besar.

Anda harus berhati-hati untuk mengaudit keamanan implementasi Anda. Soket TCP biasa mungkin aman di jaringan pribadi tetapi tidak boleh digunakan di lingkungan sensitif apa pun. Menggunakan SSH membantu mengurangi risiko jika Anda mempraktikkan kebersihan keamanan SSH yang baik, seperti autentikasi berbasis kunci wajib.


Docker
  1. Cara menginstal dan menghosting server OpenVPN dengan Docker

  2. Cara Menginstal dan Menggunakan Docker di Ubuntu 20.04

  3. Kapan dan Mengapa Menggunakan Docker

  1. Cara Mengatur dan Menggunakan Registri Docker Pribadi

  2. Cara Menginstal dan Menggunakan Docker di Ubuntu 20.04

  3. Cara Menginstal dan Menggunakan Docker Compose di CentOS

  1. Cara Menginstal dan Menggunakan Docker di Ubuntu 18.04

  2. Cara Menginstal dan Menggunakan Docker Compose di Ubuntu 18.04

  3. Cara Menginstal dan Menggunakan Docker di CentOS 7