參考:
- 知乎-isisiwish
- 博客園-波神
- Deepzz 有關於
Volume
的配置和docker-compose.yml
的編寫。
Dockerfile各參數說明
# ############ 主要用來構建鏡像
FROM # 指定鏡像(必須有)
MAINTAINER # 聲明維護者(可有可無;位置無所謂,放在FROM后比較合理)
USER # 設置容器運行的UID(可有可無)
ENV # 指定環境變量(后續命令可以直接引用“$envname”)
RUN # 執行shell命令,用於創建容器(一般地,每條RUN對應一條命令;也可以利用 `;\`來執行多條命令)
# ############ 主要是用於構建鏡像后的部署過程
COPY # 復制宿主機的文件到容器內
ADD # 添加宿主機的文件`或者URL`到容器內(和COPY基本相同,區別多了個下載網絡文件)
VOLUME # 將容器內的目錄映射到宿主機內(方便在宿主機內查看文件,比如日志,項目源碼等)
WORKDIR # 工作目錄,指明`CMD命令的運行目錄`
ENTRYPOINT # `只能有一個entrypoint存在,不可被docker run 命令的命令行參數覆蓋`
EXPOSE # 容器暴露的端口
CMD # 執行shell命令,`和RUN區別`:run用於部署,cmd用於部署后的運行,並且可以和entrypoint配合使用(一般不使用),可以`被命令行參數覆蓋`
Dockerfile部分參數可被命令行參數覆蓋
允許我們部署的時候動態輸入參數,覆蓋Dockefile的指定參數
具體示例建使用場景:2.
使用場景
1. 構建docker image提供給他人使用
常用命令: docker build -t image_name:iamge_tag -f path/Dockerfile --rm ./app
2. 其他人根據docker image部署項目
常用命令:docker run -d -e -v -u -w -p image_name
說明:-d:后台運行; -e:指定環境變量; -v: volume映射宿主機和容器內目錄;-u:指定運行容器的UID;-w:指定workdir; -p:指定端口
解釋
- dockerfile幾乎總是放在項目根目錄下;
- docker根據項目目錄下的項目文件和提供dockerfile提供的項目配置構建一個獨立的環境用來部署項目;
- 一般地,我們不需要保存
docker image
,因為Dockerfile
更加易於保存和傳遞,而且更加輕量級,易於編輯,環境一致; - 有時候為了更加快速的進行部署,
節省構建的時間
,可以保存docker鏡像文件,運行容器的時候只需通過命令行調整運行參數即可。
docker-compose.yml
docker-compose是官方提供的用來管理docker image的工具,更加方便;
實際項目中一個項目總是依賴於多個服務,這里用一個docker-compose.yml