Pekerja pelabuhan sumber mana yang diasingkan
Docker mengasingkan sumber: 1. Sistem fail 3. Komunikasi antara proses 4. Pengguna dan kumpulan pengguna untuk kebenaran 5. PID dan hos dalam proses PID; nama, dsb.
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, versi docker-1.13.1, komputer Dell G3.
Intipati bekas Docker
Intipati bekas docker ialah proses pada mesin hos.
Docker mencapai pengasingan sumber melalui ruang nama, pengehadan sumber melalui cgroup dan kecekapan tinggi melalui operasi fail *copy-on-write*.
Mekanisme ruang nama Linux
Mekanisme ruang nama menyediakan penyelesaian pengasingan sumber.
PID, IPC, Rangkaian dan sumber sistem lain tidak lagi global, tetapi tergolong dalam Ruang Nama tertentu.
Sumber di bawah setiap ruang nama berkaitan dengan sumber di bawah ruang nama lain yang Telus, tidak kelihatan .
Salah satu tujuan utama ruang nama melaksanakan kernel Linux adalah untuk melaksanakan perkhidmatan (bekas) ringan Proses dalam ruang nama yang sama boleh melihat perubahan satu sama lain dan tidak tahu apa-apa tentang proses luaran.
Apakah ruang nama yang boleh diasingkan
Agar bekas tidak mengganggu bekas lain, ia perlu dapat:
Sistem fail perlu diasingkan
Rangkaian juga perlu diasingkan
Antara-proses komunikasi juga perlu diasingkan
Pengguna dan kumpulan pengguna juga perlu diasingkan untuk mendapatkan kebenaran
PID dalam proses juga perlu diasingkan daripada PID dalam hos
Bekas juga mesti mempunyai nama hos mereka sendiri
Dengan pengasingan di atas, kami percaya bahawa bekas boleh diasingkan daripada perumah dan bekas lain.
Kebetulan ruang nama Linux boleh melakukan ini.
namespace | 隔离内容 | 系统调用参数 |
---|---|---|
UTS | 主机名与域名 | CLONE_NEWUTS |
IPC | 信号量、消息队列和共享内存 | CLONE_NEWIPC |
Network | 网络设备、网络栈、端口等 | CLONE_NEWNET |
PID | 进程编号 | CLONE_NEWPID |
Mount | 挂载点(文件系统) | CLONE_NEWNS |
User | 用户和用户组 | CLONE_NEWUSER |
Ruang nama UTS
Ruang nama UTS (Sistem perkongsian MASA UNIX) menyediakan pengasingan nama hos dan domain, supaya setiap bekas Docker boleh mempunyai nama hos dan nama domain bebas, dalam rangkaian boleh dilihat sebagai nod bebas dan bukannya proses pada mesin hos.
Dalam Docker, setiap imej pada asasnya dinamakan nama hos selepas nama perkhidmatan yang diberikannya dan tidak akan memberi kesan kepada hos.
Ruang nama IPC
Sumber IPC yang direka untuk Komunikasi Antara Proses (IPC) termasuk semafor biasa, baris gilir mesej dan memori dikongsi.
Apabila memohon sumber IPC, anda memohon ID 32-bit yang unik secara global.
Ruang nama IPC mengandungi pengecam IPC sistem dan sistem fail yang melaksanakan baris gilir mesej POSIX.
Proses dalam ruang nama IPC yang sama boleh dilihat antara satu sama lain, tetapi proses dalam ruang nama yang berbeza tidak kelihatan antara satu sama lain.
Ruang nama PID
Pengasingan ruang nama PID sangat praktikal, ia menomborkan semula proses PID, iaitu, dua proses di bawah ruang nama yang berbeza boleh mempunyai PID yang sama, setiap satu Ruang nama PID mempunyai prosedur pengiraan sendiri.
Kernel mengekalkan struktur pokok untuk semua ruang nama PID Yang paling atas dicipta apabila sistem dimulakan dan dipanggil ruang nama akar. Ruang nama PID yang baru dibuat dipanggil ruang nama kanak-kanak, dan ruang nama PID asal ialah ruang nama kanak-kanak bagi ruang nama PID yang baru dibuat, dan ruang nama PID asal ialah ruang nama induk bagi ruang nama PID yang baru dibuat.
Dengan cara ini, ruang nama PID yang berbeza akan membentuk sistem hierarki Nod induk yang dimilikinya boleh melihat proses dalam nod anak dan boleh menjejaskan proses dalam nod anak melalui isyarat dan kaedah lain. Walau bagaimanapun, nod anak tidak dapat melihat apa-apa dalam ruang nama PID nod induk.
ruang nama lekapkan
ruang nama lekapkan menyediakan sokongan untuk mengasingkan sistem fail melalui mata lekap sistem fail yang diasingkan.
Selepas pengasingan, perubahan dalam struktur fail dalam ruang nama pelekap yang berbeza tidak akan menjejaskan satu sama lain.
ruang nama rangkaian
Ruang nama rangkaian terutamanya menyediakan pengasingan sumber rangkaian, termasuk peralatan rangkaian, IPv4, timbunan protokol IPv6, jadual penghalaan IP, tembok api, /proc/ direktori bersih , /sys/class/net direktori, soket, dsb.
ruang nama pengguna
ruang nama pengguna mengasingkan pengecam dan atribut berkaitan pemasangan
operasi ruang nama
API ruang nama termasuk clone() setns() unshare() dan beberapa fail di bawah /proc
Untuk menentukan ruang nama yang diasingkan, anda perlu menentukan satu atau lebih daripada 6 parameter berikut yang diasingkan oleh | 6 parameter ialah CLONE_NEWUTS, CLONE_NEWIPC, CLONE_NEWPID, CLONE_NEWNET, CLONE_NEWUSER yang dinyatakan dalam jadual di atas Proses ialah pendekatan yang paling biasa dan cara paling asas untuk Docker menggunakan ruang nama.
clone() ialah pelaksanaan yang lebih umum bagi fork() panggilan sistem Linux Anda boleh mengawal bilangan fungsi yang digunakan melalui bendera. Terdapat lebih daripada 20 jenis bendera CLONE_*, yang mengawal semua aspek proses klon.
child_func diluluskan dalam fungsi utama program yang dijalankan oleh proses kanak-kanakint clone(int(*child_func)(void *),void *child_stack,int flags, void *arg);
child_stack diluluskan dalam ruang tindanan yang digunakan oleh proses kanak-kanak
- args digunakan untuk menghantar parameter pengguna
- /proc/[pid]/ns Pengguna boleh memasukkan /proc/[ pid ]/ns, anda boleh melihat fail yang menunjuk ke ruang nama yang berbeza.
Nombor ruang nama dalam kurungan segi empat sama
ls -l /proc/10/ns
Jika nombor ruang nama yang ditunjuk oleh dua proses adalah sama, maka ia berada dalam yang sama Tujuan menetapkan pautan dalam ruang nama
Memasang fail direktori /proc/[pid]/ns menggunakan kaedah --bind juga boleh berfungsi sebagai pautan
touch ~/utsmount --bind /proc/10/ns/uts ~/uts
Biasanya untuk tidak menjejaskan pemanggil proses dan untuk menjadikan ruang nama pid yang baru ditambah berkuat kuasa, proses itu akan ditambah dalam setns() Selepas fungsi dilaksanakan, gunakan clone() untuk mencipta proses anak untuk terus melaksanakan arahan dan biarkan proses asal tamat berjalan.
Untuk menggunakan ruang nama yang baru ditambah, adalah perlu untuk memperkenalkan siri execve() fungsi ini boleh melaksanakan perintah pengguna Yang paling biasa digunakan ialah memanggil /bin /bash dan terima parameter
nyahkongsi()
int setns(int fd, in nstype); #fd 表示要加入namespace的文件描述符。是一个指向/proc/[pid]/ns目录的文件描述符,打开目录链接可以获得 #nstype 调用者可以检查fd指向的namespace类型是否符合实际要求,该参数为0则不检查
Pengasingan ruang nama pada proses asal melalui nyahkongsi()
Nyahkongsi sangat serupa dengan Nyahkongsi tidak perlu untuk memulakan proses baru, ia boleh dilakukan pada proses asal untuk digunakan.docker tidak menggunakan
panggilan sistem fork()
fork bukan milik API ruang nama
Kumpulan alat kernel yang berkuasa
cgroup ialah mekanisme yang disediakan oleh kernel Linux Mekanisme ini boleh menyepadukan (atau memisahkan) satu siri tugasan sistem dan subtugasnya ke dalam sumber hierarki yang berbeza mengikut keperluan , dengan itu menyediakan rangka kerja bersatu untuk pengurusan sumber sistem.
cgroups ialah satu lagi alat kernel yang berkuasa dalam Linux Dengan cgroups, anda bukan sahaja boleh mengehadkan sumber yang diasingkan mengikut ruang nama, tetapi juga menetapkan pemberat untuk sumber, mengira penggunaan dan mengawal permulaan tugas (proses atau daerah). Berhenti dan tunggu. Secara terang-terangan: cgroups boleh mengehadkan dan merekodkan sumber fizikal (termasuk CPU, Memori, IO, dsb.) yang digunakan oleh kumpulan tugas Ia merupakan asas membina satu siri alatan pengurusan virtualisasi seperti Docker.
Peranan cgroup
cgroups menyediakan antara muka bersatu untuk pengurusan sumber pada peringkat pengguna yang berbeza, daripada kawalan sumber individu kepada peringkat sistem pengendalian Untuk virtualisasi, cgroups menyediakan empat fungsi utama.
- Penghadan Sumber
- kumpulan c boleh mengehadkan jumlah sumber yang digunakan oleh tugasan.
- Jika anda menetapkan had atas memori yang digunakan oleh aplikasi semasa berjalan, gesaan OOM akan dikeluarkan setelah kuota melebihi
- kumpulan c boleh mengehadkan jumlah sumber yang digunakan oleh tugasan.
- Peruntukan keutamaan
- Dengan memperuntukkan bilangan kepingan masa CPU dan lebar jalur IO cakera, ia sebenarnya bersamaan dengan mengawal keutamaan tugas berjalan
- Statistik sumber
- cgroup boleh mengira penggunaan Sumber sistem
- seperti masa penggunaan CPU, penggunaan memori, dll. Fungsi ini sangat sesuai untuk pengebilan
- cgroup boleh mengira penggunaan Sumber sistem
- kawalan tugas
- kumpulan boleh menggantung dan menyambung semula tugas
Pembelajaran yang disyorkan: "tutorial video buruh pelabuhan"
Atas ialah kandungan terperinci Pekerja pelabuhan sumber mana yang diasingkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Langkah -langkah untuk mengemas kini imej Docker adalah seperti berikut: Tarik tag imej terkini imej baru memadam imej lama untuk tag tertentu (pilihan) mulakan semula bekas (jika diperlukan)

Kaedah untuk menyalin fail ke tuan rumah luaran di Docker: Gunakan arahan CP Docker: Jalankan Docker CP [Options] & lt; Container Path & GT; & lt; PATH HOST & GT;. Menggunakan jumlah data: Buat direktori pada tuan rumah, dan gunakan parameter -V parameter untuk memasang direktori ke dalam bekas apabila membuat bekas untuk mencapai penyegerakan fail bidirectional.

Empat cara untuk keluar dari Docker Container: Gunakan Ctrl D di terminal kontena masukkan perintah keluar di terminal kontena Gunakan Docker Stop & lt; container_name & gt; Perintah Gunakan Docker Kill & lt; container_name & gt; Perintah di terminal tuan rumah (keluar kuasa)

Cara memulakan semula bekas Docker: Dapatkan ID Container (Docker PS); Hentikan bekas (Docker Stop & lt; container_id & gt;); Mulakan bekas (Docker Start & lt; container_id & gt;); Sahkan bahawa permulaan semula berjaya (Docker PS). Kaedah lain: Docker mengarang (Docker-Compose Restart) atau Docker API (lihat Dokumentasi Docker).

Anda boleh menanyakan nama kontena Docker dengan mengikuti langkah -langkah: Senaraikan semua bekas (Docker PS). Tapis senarai kontena (menggunakan arahan grep). Mendapat nama kontena (terletak di lajur "Nama").

Bagaimana cara menggunakan desktop Docker? Docktop Docktop adalah alat untuk menjalankan bekas Docker pada mesin tempatan. Langkah -langkah untuk digunakan termasuk: 1. Pasang desktop Docker; 2. Mulakan desktop Docker; 3. Buat imej Docker (menggunakan Dockerfile); 4. Membina imej Docker (menggunakan Docker Build); 5. Jalankan bekas Docker (menggunakan Docker Run).

Proses memulakan MySQL di Docker terdiri daripada langkah -langkah berikut: Tarik imej MySQL untuk membuat dan memulakan bekas, tetapkan kata laluan pengguna root, dan memetakan sambungan pengesahan port Buat pangkalan data dan pengguna memberikan semua kebenaran ke pangkalan data

Kaedah Melihat Proses Docker: 1. Docker CLI Command: Docker PS; 2. Systemd CLI Command: Sistem Status SistemCTL; 3. Docker mengarang arahan CLI: Docker-Compose PS; 4 Proses Explorer (Windows); 5. /Direktori Proc (Linux).
