開發環境的搭建,是新人入職后的第一道檻,有時一個小小的問題就能阻塞半天。如果能提供一個工具在短時間內搞定開發環境,勢必提高新人對團隊的印象分!docker就是這樣一個工具。
鏡像&容器
docker有個重要的概念叫鏡像,官方概念比較拗口,這么解釋比較容易理解:docker倉庫有很多鏡像,包括node、nginx、redis等等,一個鏡像一般解決一個問題,鏡像沒有狀態,而且永遠不會改變。容器,是鏡像執行的地方。
體驗
第一步,安裝docker,接着在命令行執行以下命令:
docker run -d -p 80:80 docker/getting-started
以上命令創建了一個容器,執行的鏡像是docker/getting-started,docker會自動從docker倉庫下載這個鏡像。命令執行成功后,在瀏覽器打開http://localhost 即可訪問這個容器的服務。
如果要訪問自己的項目,需要把自己的項目做成鏡像。
Dockerfile
如何創建鏡像?打開前端項目根目錄,新建Dockerfile配置文件,配置如下(假設你的項目依賴nodejs)
FROM node:10.13.0
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "run", "dev"]
FROM node:10.13.0:指定依賴的基礎鏡像nodejs,版本為10.13.0
WORKDIR /app:指定工作目錄
COPY . .:拷貝當前目錄所有文件到/app
RUN npm install:在項目打包為鏡像時執行指定npm install
CMD ["npm", "run", "dev"]:鏡像在容器中啟動時執行的命令,這里假設為npm run dev
新建.dockerignore,忽略那些不需要打包到鏡像的文件(夾)
node_modules
創建鏡像
把當前文件夾內容打包為鏡像,注意最后有個點
docker build -t my-app .
創建容器
創建容器,注意,前端項目一般會開啟DevServer,host必須配置為0.0.0.0,否則在宿主機上無法訪問docker容器內部的開發環境。
創建名字為my-app-container的容器,執行的鏡像是my-app,假設DevServer配置的端口為8080,將容器內的8080映射到宿主機的8080端口,冒號前面的是宿主機端口,后面的是docker容器的端口。
docker run -dp 8080:8080 --name my-app-container my-app
容器會自動執行Dockerfile指定的CMD命令,稍后就可以在瀏覽器輸入http://localhost:8080 訪問容器內的開發環境了。
查看所有正在運行的docker容器
docker ps
文件映射
業務代碼都打包到鏡像里了,接下來,要怎么修改業務代碼呢?只需要在創建容器的時候,做文件映射。
在這之前,先停止並刪除當前運行的容器
//停止容器
docker kill my-app-container
//刪除容器
docker rm my-app-container
假設宿主機前端目錄是/project/app,用-v命令,映射到容器的/app
docker run -dp 8080:8080 -v /project/app:/app --name my-app-container my-app
之后,訪問http://localhost:8080 ,修改宿主機的代碼,代碼在容器中編譯,宿主機的瀏覽器也會實時刷新,如同本地開發一樣。