首先,了解到建立docker鏡像有兩種常用的方法,分别是通過已有容器進行修改建立新的鏡像并push,另一種是編寫dockerFile使用dockerBuild直接将自己的系統與項目建立鏡像。當然,dockerFile在後者是必須的,盡管有其他将本地檔案添加到容器中的方式,使用dockerFile無疑能夠更為友善,并且還能夠完成對環境,插件的各種配置。
嘗試使用Node.js作為基礎環境,在dockerHub的Node.js的官方網頁上找到一個合适的鏡像并push到Linux虛拟機上
選擇一個版本,使用指令(我這裡選擇的是14.1.0-buster版本):
sudo docker pull node:14.1.0-buster
使用
對本地的鏡像進行檢視
之後,我們希望在這個環境的基礎上建立一個vue項目,通過dockerfile,我們可以指定這個項目位于本機的何處,docker容器的工作目錄,添加插件等等:
FROM node:14.1.0-buster
ADD ./src /app
WORKDIR /app
ENV DEBCONFIG_NOWARNINGS yes
RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y \
build-essential -y \
curl \
nmap \
openvas \
git \
nano \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g @vue/[email protected]
含義為:我選擇使用的基礎鏡像名為node:14.1.0-buster;
将虛拟機下 ./src 檔案夾加入到鏡像中的app檔案家中;
将鏡像中的app檔案夾設為工作環境;
DEBUG設定:沒有WARNING提示;
在建立新鏡像時運作RUN後的代碼:
安裝更新更新一下插件:curl,nmap,openvas,git,nano。
這裡因為作業要求,安裝nmap和openvas兩個掃描器。之後删除lists檔案下不需要的插件,最後安裝某一個版本的vue(可以使用latest安裝最新的)
建立dockerFile後,使用以下指令建立一個新的鏡像
之後使用容器運作:
docker container run -it --name myweb -v pwd/src:/app -p 8080:8080 -d library/vuetest
設定容器名稱為myweb,設定端口映射為8080,設定鏡像來源是 vuetest
運作後,使用
docker exec -it myweb /bin/bash
進入容器指令行
在目前工作目錄(已經設定好了,就是app檔案夾)建立一個vue項目:并運作
vue create myweb
cd myweb
npm run serve
結果如下:
我們在虛拟機的浏覽器上打開網址:
可以看到安裝成功。
同時,在本地也自動建立了一個檔案目錄src,這個src檔案夾建立與終端打開的位置有關,内部包含了本項目的檔案,修改其中内容可以對項目進行修改。
為了測試可行性,我對其中的一個Hello.vue進行了修改,并在src下,myweb項目外編寫了一個測試行腳本test.sh。
下面,在目前src目錄外建立一個新的Dockerfile用于建立新鏡像
FROM vuetest:latest
ADD ./src /app
WORKDIR /app
ENV DEBCONFIG_NOWARNINGS yes
RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y \
build-essential -y \
curl \
nmap \
openvas \
git \
nano \
&& rm -rf /var/lib/apt/lists/*
這裡含義和上方的類似,首先基礎鏡像選擇已經安裝好vue的vuetest鏡像
(之後就可以在這次新建立的景象基礎上更改版本進行push)
将和dockerfile同目錄下的src檔案夾加入到鏡像中的app檔案夾下,進行插件的下載下傳更新等
和上方相比,除去了vue的下載下傳安裝
然後,在work目錄下(含有src檔案夾和dockerFile)打開終端,使用指令行:
$ docker image build -t whereissalm0n/vue_sh:v2 .
這裡v1是版本号,可以更換,便于管理
最後注意 "." 意思是該目錄下建立,忘記寫的話shell會提示缺少一個URL參數
之後使用
檢視是否成功
如有必要,為新鏡像建立tag(如果未建立tag或者是tag錯誤,将不予推送):
docker tag vue_sh whereissalm0n/vue_sh:v2
之後将鏡像上傳至dockerHub
docker image push whereissalm0n/vue_sh:v2
下面嘗試在Windows上啟動容器并運作:
進入docker Desktop for Windows,并登入,在Images—Remote Repositories中檢視
可以看到下方vue_sh:v2已經成功push
下面運作并且設定容器名與映射端口
成功後進入終端:
嘗試檢視并運作腳本:
掃描成功。
測試vue項目:
至此在docker鏡像上建立一個vue項目并新增檔案夾就完成了。在這個過程中最重要的就是dockerFile的使用,正确的dockerFile編寫能夠讓鏡像的建立事半功倍。當然在沒有意識到這一問題之前,屢次出現未添加檔案,因為dockerFile指令寫錯添加錯誤檔案的情況。
事實上,也是必然的,這一項目和腳本自然而然也被存儲在了本機上,在Linux檔案夾中(由于使用了WSL2,windows規定了docker鏡像存儲的位置)我們可以找到項目檔案與編寫的腳本檔案:
這也就意味着,我們可以在本機或虛拟機沒有某個特定開發環境的情況下,在docker容器上部署相應環境,在本機對檔案項目進行編輯修改,同樣也可以達到開發的目的。
項目的下一步,就是編寫合适的web程式以及腳本将若幹掃描器整合,并将整個web項目添加到到鏡像中并上傳。