當前位置:
首頁 > 最新 > 【開源容器】Docker-slim介紹

【開源容器】Docker-slim介紹

如果擔心Docker鏡像的大小,docker-slim將會解決您的擔憂。該工具使用靜態和動態分析將大鏡像轉變為縮略的鏡像。

1.功能介紹

靜態分析:主要是獲取鏡像歷史信息,追蹤到生成鏡像的dockerfile文件,以及設置的port、cmd、enterpoint等數據。

動態分析:主要是通過內核工具ptrace(跟蹤系統調用)、pevent(跟蹤文件或目錄的變化)、fanotify(跟蹤進程)解析出鏡像中必要的文件和文件依賴,將對應文件組織成新鏡像。

2.環境安裝

要使用docker-slim,您必須從Github下載其二進位文件。二進位文件可用於Linux和Mac。下載二進位文件後,將其添加到環境變數PATH中。

[root@tfg-104 bin]# ll /usr/bin/docker-slim*

-rwxrw-rw- 1 root root 9397945 Oct 9 2016 /usr/bin/docker-slim

-rwxrw-rw- 1 root root 4258571 Oct 9 2016 /usr/bin/docker-slim-sensor

[root@tfg-104 bin]#

3.使用說明

Docker-slim主要提供的功能就是製作瘦身鏡像

[root@tfg-104 bin]# docker-slim --help

COMMANDS:

info, i Collects fat image information and reverse engineers its Dockerfile

build, b Collects fat image information and builds a slim image from it

profile, p Collects fat image information and generates a fat container report

info 收集原鏡像信息,並組織其dockerfile生成文件;

build 收集原鏡像信息,生成slim鏡像,一般以鏡像名.slim命令;

Profile 收集原鏡像信息,並生成對原鏡像的分析報告,包含syscall控制和process控制。

4.使用舉例

使用在DockerHub中的ubuntu鏡像,下面所看到的鏡像的大小是130MB。

[root@tfg-104 bin]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

ubuntu latest 0ef2e08ed3fa 4 months ago 130 MB

讓我們用docker-slim來看看它可以去除多少多餘的東西。

[root@tfg-104 bin]# docker-slim build --http-probe ubuntu

docker-slim實用程序將執行一系列步驟 -檢查、分析較大的鏡像,最終創建一個縮略版本的鏡像。

[root@tfg-104 bin]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

ubuntu.slim latest db837f1d9f13 23 hours ago 3.48 MB

ubuntu latest 0ef2e08ed3fa 4 months ago 130 MB

5.syscall與process控制

5.1、docker&seccomp

我們需要對容器當中能夠運行的具體負載進行控制。這時就需要依靠seccomp了。所謂seccomp,其實就是安全計算模式的縮寫。它允許對系統調用進行篩選,這樣我們就能夠為應用程序定義其需要的系統調用,並拒絕其它一切不必要的調用行為。

seccomp profile包含3個部分

1)默認操作(default Action)

2)系統調用所支持的Linux架構(architectures)

3)系統調用具體規則(syscalls)

在seccomp profile規則中,可定義以下5種行為對進程的系統調用行為做出響應

1) SCMP_ACT_KILL. 當進程調用某系統調用,內核會發出SIGSYS信息終止該進程,該進程不會接收到這個信號

2) SCMP_ACT_TRAP. 當進程調用某系統調用,該進程會接收到SIGSYS信號,並根據該信號改變自身的行為

3) SCMP_ACT_ERRNO. 當進程調用某系統調用,系統調用失敗,進程會接收到返回值,該返回值與Linux內核的errno對應

4) SCMP_ACT_TRACE. 當進程調用某系統調用,進程會被追蹤

5) SCMP_ACT_ALLOW. 進程系統調用會被允許

使用seccomp profile

默認情況下,Docker運行容器時會使用默認的seccomp profile,可將unconfined傳入docker run的security-opt seccomp選項,禁用默認的seccomp profile

# docker run --rm -it --security-opt seccomp:unconfined busybox

如果使用特定的seccomp profile,執行以下命令

# docker run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json busybox

實例使用

下面例舉一個簡短的socket.json實 例:

{

"defaultAction": "SCMP_ACT_ALLOW",

"syscalls": [

{

"name": "socket",

"action": "SCMP_ACT_ERRNO"

}]

}

其運行結果將如下所示:

# docker run -ti --rm --security-opt seccomp:tcpsocket.json Ubuntu bash

容器內運行nc -l 555,結果為nc: Operation not permitted,表明socket訪問失敗。

5.2、docker&AppArmor

通過使用AppArmor實現強制性的訪問控制(MAC)一套有限的系統資源的限制進程,如果先前已經安裝和配置過SELinux,那麼它可以使用setenforce 1在容器中被激活。Docker程序的SELinux支持是默認無效的,並且需要使用—selinux功能來被激活。通過使用新增的—security- opt來載入SELinux或者AppArmor的策略對容器的標籤限制進行配置。該配置文件可以被用於運行Docker容器,且採用與之前相同的語法:

#docker run -d --security-opt=」apparmor:name_of_profile」 -p 80:80 ngnix

作者簡介

馮聖琴,中興通訊軟體開發工程師,對openstack開源項目、虛擬化和容器技術等感興趣。

中興通訊

雲開源

為您打開雲開源世界的大門!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲開源 的精彩文章:

TAG:雲開源 |