Docker與Kubernetes系列(五): Docker的原理1_Linux Namespace
阿新 • • 發佈:2019-01-27
šLinux Namespace 有如下種類,官方文件在這裡《Namespace in Operation》
分類 | 系統呼叫引數 | 相關核心版本 |
---|---|---|
Mount namespaces | CLONE_NEWNS | |
šUTS namespaces | CLONE_NEWUTS | |
IPC namespaces | CLONE_NEWIPC | |
PID namespaces | CLONE_NEWPID |
- UTS: hostname
- IPC: 程序間通訊
- PID: "chroot"程序樹
- NS: 掛載點,首次登陸Linux
- NET: 網路訪問,包括介面
- USER: 將本地的虛擬user-id對映到真實的user-id
主要是š三個系統呼叫
- šclone() – 實現執行緒的系統呼叫,用來建立一個新的程序,並可以通過設計上述引數達到隔離。
- šunshare() – 使某程序脫離某個namespace
- šsetns() – 把某程序加入到某個namespace
二、幾種Namespace
clone()系統呼叫
首先,我們來看一下一個最簡單的clone()系統呼叫的示例,(後面,我們的程式都會基於這個程式做修改):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#define
_GNU_SOURCE
#include
<sys/types.h>
#include
<sys/wait.h>
#include
<stdio.h>
#include
<sched.h>
#include
<signal.h>
#include
<unistd.h>
/*
定義一個給 clone 用的棧,棧大小1M */
#define
STACK_SIZE (1024 * 1024)
staticcharcontainer_stack[STACK_SIZE]; |