关于构建镜像最具挑战性的事情之一是保持镜像体积小巧。 Dockerfile 中的每条指令都会在镜像中增加一层,并且在移动到下一层之前,需要记住清除不需要的构件。要编写一个非常高效的 Dockerfile,你通常需要使用 shell 技巧和其它方式来尽可能地减少层数,并确保每一层都具有上一层所需的构件,而其它任何东西都不需要。
Docker是轻量化的,当我们在制作镜像的时候就应该尽量使得应用镜像轻量些,减少镜像的体积。例如一个简单的golang服务,如何构建一个最小的镜像:
package main
import (
"fmt"
"net/http"
"strings"
)
func getNameLen(name string) int {
return len(name)
}
func sayHello(w http.ResponseWriter, r *http.Request) {
message := r.URL.Path
message = strings.TrimPrefix(message, "/")
message = "Hello " + message + " : " + fmt.Sprintf("%d", getNameLen(message))
w.Write([]byte(message))
}
func main() {
http.HandleFunc("/", sayHello)
if err := http.ListenAndServe(":8088",