以安裝awvs的ubuntu鏡像為例
docker pull ubuntu // 獲取ubuntu鏡像
docker run -it --dns 223.5.5.5 -v /home/devsecops/devsecops/tools-share/:/opt/share/ ubuntu /bin/bash // 映射相關工具到容器中,配置容器后 通過 docker commit 生成新的鏡像 // 在容器中執行apt-get update ,可能會缺少庫的問題 apt-get update
庫還是不出意外的少了,一個個安裝上, 安裝庫后安裝awvs
emmm 安裝完之后,由於沒有配置端口映射,宿主機根本訪問不到,搜索很多資料均沒有相關的說明,那豈不是說... 我得重新來過?
同時確認了兩個個問題
問題1:(在容器中無法使用chattr),解決如下 (需要重新啟動容器,看來重新來過勢不可擋?):

問題2 : systemctl命令無法正常使用,報錯:

解決: su acunetix 到目錄下 sh start.sh
emm,為了不浪費之前已經進行的工作,決定先試試 docker commit 生成一個中間鏡像試試
docker commit -m "awvs test " -a "test" f75a77499f1b awvs-test:0.5
在生成的鏡像中,執行命令如下:
docker run --cap-add LINUX_IMMUTABLE -it -p 13443:13443 awvs-test:0.5 /bin/bash
再次docker commit 生成我們的最后的鏡像,順便看看服務啟動的問題,需不需要我們再次考慮
------> 結果在預計之內 不可能解決運行的問題。
可以看到所有的容器都有一個COMMAND屬性,代碼容器初始執行的命令

同時 docker diff 容器 可以查看容器與鏡像之間的文件差異, 所以我們可以推測,在生成鏡像的時候文件和執行容器時最后的命令會打包到鏡像中,其他的運行狀態並不會影響鏡像。
PS: 其實也可以寫個dockerfile注意一下 ENTRYPOINT, 填寫相應的bash腳本就行,生成一個鏡像
所以我們再次生成一個可運行的鏡像,啟動容器將需要執行命令帶入
docker run -i -p 13443:13443 -u acunetix awvs-test:0.7 /bin/bash -c "/bin/sh /home/acunetix/.acunetix_trial/start.sh" docker commit -m "awvs test " -a "test" 07edab69687a awvs-test:0.8
大功告成:


PS: 裝了一堆沒有用的庫,導致鏡像有點大,大於1G