亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Docker-container詳解

社區(qū)管理員 / 1020人閱讀

本文介紹docker中的contanier,基于操作系統(tǒng)介紹什么是container。

進(jìn)程(Processes)

Container是具有指定配置的Linux進(jìn)程(processes)。我們進(jìn)行如下操作:

## 啟動(dòng)一個(gè)redis進(jìn)程
?  ~ docker run -d --name=db redis:alpine

## 顯示容器運(yùn)行的進(jìn)程
?  ~ docker top db
PID                 USER                TIME                COMMAND
2288                999                 0:00                redis-server

## 查看系統(tǒng)是否存在redis-server進(jìn)程
?  ~ ps aux | grep redis-server
donggang         10761   0.0  0.0  4258876    200 s007  R+    6:57下午   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn redis-server

## 查看dockerd的進(jìn)程樹
?  ~ pstree -c -p -A $(pgrep dockerd)

在linux系統(tǒng)中,一個(gè)container對(duì)應(yīng)一個(gè)標(biāo)準(zhǔn)的進(jìn)程。所有的container進(jìn)程都是dockerd進(jìn)程生成的。Linux是基于文件系統(tǒng)的,進(jìn)程的信息都存儲(chǔ)在/proc目錄中。 每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)目錄,可以通過進(jìn)程ID獲得對(duì)應(yīng)的目錄位置。

## 設(shè)置DBPID變量,方便后續(xù)測試
?  ~ DBPID=$(pgrep redis-server)
?  ~ echo Redis is $DBPID
Redis is 6950
## 找到對(duì)應(yīng)的進(jìn)程目錄文件,該容器相關(guān)配置都保存在該目錄下
?  ~ ls /proc/$DBPID
attr        cmdline          environ  io         mem         ns             pagemap      sched      stack    task
autogroup   comm             exe      limits     mountinfo   numa_maps      patch_state  schedstat  stat     timers
auxv        coredump_filter  fd       loginuid   mounts      oom_adj        personality  sessionid  statm    uid_map
cgroup      cpuset           fdinfo   map_files  mountstats  oom_score      projid_map   setgroups  status   wchan
clear_refs  cwd              gid_map  maps       net         oom_score_adj  root         smaps      syscall

## 通過文件獲取容器db的目錄
?  ~ cat /proc/$DBPID/environ
HOSTNAME=a1f8a38c84d4SHLVL=2REDIS_DOWNLOAD_SHA=6624841267e142c5d5d5be292d705f8fb6070677687c5aad1645421a936d22b3HOME=/home/redisPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binREDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-5.0.6.tar.gzREDIS_VERSION=5.0.6PWD=/data#                                                                                     
## 通過docker api獲取,
?  ~ docker exec -it db env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=a1f8a38c84d4
TERM=xterm
REDIS_VERSION=5.0.6
REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-5.0.6.tar.gz
REDIS_DOWNLOAD_SHA=6624841267e142c5d5d5be292d705f8fb6070677687c5aad1645421a936d22b3
HOME=/root

命名空間(namespace)

容器的一個(gè)基礎(chǔ)部分就是namespace,namespace限制某個(gè)進(jìn)程只能獲取系統(tǒng)的某些部分,比如網(wǎng)絡(luò)接口或這進(jìn)程。 當(dāng)一個(gè)容器開始運(yùn)行時(shí),容器運(yùn)行時(shí)(container runtime)比如docker將會(huì)創(chuàng)建namespace,容器對(duì)應(yīng)的進(jìn)程將在這個(gè)namespace中運(yùn)行,

有以下種類的namespace: Mount(mnt)、Process ID(pid)、Network(net)、Interprocess Communication(ipc)、UTC(hostnames) 、UserId(user)、Control group(cgroup)。有關(guān)Linux的namspace介紹移步于https://en.wikipedia.org/wiki/Linux_namespaces

## bash運(yùn)行在"沙箱中"
?  ~ sudo unshare --fork --pid --mount-proc bash

## 打印進(jìn)程信息
[root@master ~]# ps
  PID TTY          TIME CMD
    1 pts/0    00:00:00 bash
   12 pts/0    00:00:00 ps
[root@master ~]# exit
## 退出沙箱
exit

## 打印進(jìn)程信息
?  ~ ps
  PID TTY          TIME CMD
 4673 pts/0    00:00:00 zsh
 9088 pts/0    00:00:00 ps
16860 pts/0    00:00:00 zsh
18119 pts/0    00:00:00 zsh

我們可以通過工具unshare創(chuàng)建一個(gè)隔離沙箱。使其中執(zhí)行的進(jìn)程不共享父進(jìn)程的Pid等namespace。

Namespace本質(zhì)上仍然是文件,它存儲(chǔ)在磁盤中,所以Namespace是可以共享的。工具nsenter可以在指定的namespace運(yùn)行一個(gè)程序。

## 獲取容器db的namespace資源
?  ~ ls -lha /proc/$DBPID/ns
總用量 0
dr-x--x--x 2 polkitd 1000 0 10月 30 19:17 .
dr-xr-xr-x 9 polkitd 1000 0 10月 30 19:17 ..
lrwxrwxrwx 1 polkitd 1000 0 10月 30 19:18 ipc -> ipc:[4026533033]
lrwxrwxrwx 1 polkitd 1000 0 10月 30 19:18 mnt -> mnt:[4026533031]
lrwxrwxrwx 1 polkitd 1000 0 10月 30 19:17 net -> net:[4026533036]
lrwxrwxrwx 1 polkitd 1000 0 10月 30 19:18 pid -> pid:[4026533034]
lrwxrwxrwx 1 polkitd 1000 0 10月 30 19:18 user -> user:[4026531837]
lrwxrwxrwx 1 polkitd 1000 0 10月 30 19:18 uts -> uts:[4026533032]

## 在container db中執(zhí)行ps程序
?  ns nsenter --target $DBPID  -m -u -i -p /bin/ps aux
PID   USER     TIME  COMMAND
    1 redis     1:03 redis-server
   37 root      0:00 /bin/ps aux

docker可以通過語法container:<container-name>共享namespace,下面的例子中我們創(chuàng)建一個(gè)web容器,該容器網(wǎng)絡(luò)共享db container的網(wǎng)絡(luò)namespace。

?  ns docker run -d --name=web --net=container:db nginx:alpine
Unable to find image 'nginx:alpine' locally
alpine: Pulling from library/nginx
89d9c30c1d48: Already exists
110ad692b782: Pull complete
Digest: sha256:085e84650dbe56f27ca3ed00063a12d5b486e40c3d16d83c4e6c2aad1e4045ab
Status: Downloaded newer image for nginx:alpine
4f982d745f346a7087c42c55e455448d21794641df7005c4d76299f781ba474f
?  ns WEBPID=$(pgrep nginx | tail -n1)
?  ns echo nginx is $WEBPID
nginx is 21499
?  ns ls -alh /proc/$WEBPID/ns | grep net
lrwxrwxrwx 1 101 101 0 10月 31 09:19 net -> net:[4026533036]
?  ns ls -alh /proc/$DBPID/ns | grep net
lrwxrwxrwx 1 polkitd 1000 0 10月 30 19:17 net -> net:[4026533036]

Chroot

Chroot能夠是容器進(jìn)程擁有獨(dú)立的根目錄(root directory/),chroot --help能夠更改當(dāng)前 運(yùn)行的進(jìn)程及其子進(jìn)程的根目錄。 chroot不能夠起到隔離的作用,仍然可以通過相對(duì)路徑訪問新根以外的地址

Cgroups(Control Groups)

CGroups技術(shù)限制進(jìn)程消耗資源,

Secomp/AppArmor

AppArmor描述了進(jìn)程可以訪問系統(tǒng)中哪些部分。Seccomp提供了限制可以進(jìn)行哪些系統(tǒng)調(diào)用,阻止安裝內(nèi)核模塊或更改文件權(quán)限等方面的功能。


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/127926.html

相關(guān)文章

  • 圖表君聊Docker-Container

    摘要:利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外層掛接一個(gè)寫讀寫層。容器的啟動(dòng)過程,對(duì)于理解容器至關(guān)重要,需要深入的理解。同時(shí),對(duì)于終止?fàn)顟B(tài)的容器,我們可以采用來啟動(dòng)。歡迎訂閱我的公眾號(hào),第一時(shí)間獲取圖表君的新文章。 上篇文章我們介紹了Docker三大概念中的Image,這篇我們來介紹Container,上篇文章中我們了解到了Image是運(yùn)行在Container中的,實(shí)際...

    paney129 評(píng)論0 收藏0
  • 阿里 2021 版最全 Java 并發(fā)編程筆記,看完我才懂了“內(nèi)卷”的真正意義

    摘要:純分享直接上干貨操作系統(tǒng)并發(fā)支持進(jìn)程管理內(nèi)存管理文件系統(tǒng)系統(tǒng)進(jìn)程間通信網(wǎng)絡(luò)通信阻塞隊(duì)列數(shù)組有界隊(duì)列鏈表無界隊(duì)列優(yōu)先級(jí)有限無界隊(duì)列延時(shí)無界隊(duì)列同步隊(duì)列隊(duì)列內(nèi)存模型線程通信機(jī)制內(nèi)存共享消息傳遞內(nèi)存模型順序一致性指令重排序原則內(nèi)存語義線程 純分享 , 直接上干貨! 操作系統(tǒng)并發(fā)支持 進(jìn)程管理內(nèi)存管...

    不知名網(wǎng)友 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<