国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker-container詳解

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

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

進程(Processes)

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

## 啟動一個redis進程
?  ~ docker run -d --name=db redis:alpine

## 顯示容器運行的進程
?  ~ docker top db
PID                 USER                TIME                COMMAND
2288                999                 0:00                redis-server

## 查看系統(tǒng)是否存在redis-server進程
?  ~ 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的進程樹
?  ~ pstree -c -p -A $(pgrep dockerd)

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

## 設(shè)置DBPID變量,方便后續(xù)測試
?  ~ DBPID=$(pgrep redis-server)
?  ~ echo Redis is $DBPID
Redis is 6950
## 找到對應(yīng)的進程目錄文件,該容器相關(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)

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

有以下種類的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運行在"沙箱中"
?  ~ sudo unshare --fork --pid --mount-proc bash

## 打印進程信息
[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

## 打印進程信息
?  ~ 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)建一個隔離沙箱。使其中執(zhí)行的進程不共享父進程的Pid等namespace。

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

## 獲取容器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)建一個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能夠是容器進程擁有獨立的根目錄(root directory/),chroot --help能夠更改當前 運行的進程及其子進程的根目錄。 chroot不能夠起到隔離的作用,仍然可以通過相對路徑訪問新根以外的地址

Cgroups(Control Groups)

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

Secomp/AppArmor

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


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

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

相關(guān)文章

  • 圖表君聊Docker-Container

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

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

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

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

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<