爲了讓版本管理起來更方便,應用部署速度更快,在建立鏡像的過程當中,建議工程師們明確指定包含版本或者其餘輔助信息的tag。node
若是不指定鏡像tag,默認會使用latest。每次啓動應用實例時,都須要去鏡像倉庫檢查鏡像是否更新。這種方式不利於版本管理,對應用啓動速度也有必定影響。python
一、使用alpine版本的基礎鏡像,來減少鏡像體積,以保證部署和擴容速度。nginx
alpine是一個高度精簡又包含了基本工具的輕量級Linux發行版,自己的Docker鏡像只有4~5M大小。各開發語言和框架都有基於alpine製做的基礎鏡像,在開發本身應用的鏡像時,選擇這些鏡像做爲基礎鏡像,能夠大大減少鏡像的體積。 spring
各類語言對應的基礎鏡像以下:docker
Java(Spring Boot): - openjdk:8-jdk-alpine,openjdk:8-jre-alpine等npm
Java(Tomcat) - tomcat:8.5-alpine等後端
Nodejs - node:9-alpine, node:8-alpine等設計模式
Python - python:3-alpine, python:2-alpine等緩存
PHP - 基於php:7-fpm-alpine,php:5-fpm-alpine等鏡像添加nginx,參考https://hub.docker.com/r/trafex/alpine-nginx-php7/
Ruby:ruby:2-alpine等
Go/可執行文件 - 直接基於alpine鏡像,把編譯後的可執行文件打入鏡像。由於alpine不一樣於普通的Ubuntu/Centos等發行版,須要靜態編譯和連接應用代碼,例如Go須要關閉cgo:CGO_ENABLED=0 go build ...
靜態頁面 - nginx:1-alpine等
二、保證Dockerfile中的清理命令在同一行,也能夠減少鏡像體積。
(上面的語句形式能夠減少鏡像體積。)
unzip <path-to-app-jar>.jar -d app複製代碼
在應用的某個實例崩潰或者非正常退出時,不少進程管理程序並不退出,致使平臺沒法檢測到應用已經不可用,進而沒法重啓應用。因此要避免使用這類進程管理程序來啓動鏡像。
一、避免使用本地存儲。應用鏡像啓動後,文件系統是臨時的,崩潰後即被銷燬。持久化數據,文件等須要存儲到SDS,FDS等後端存儲服務中
二、應用日誌不能寫到本地文件,須要寫到標準輸出或者標準錯誤,平臺負責收集、彙總和後續的各類處理。
但願以上幾點建議可以幫助你們避免或解決實際使用中的問題。