利用docker多階段構建映象的機制,可以使構建出來的最終映象體積大大減小,從而方便傳輸
比如我們使用go語言構建程式,在編譯環境需要安裝go等一些依賴,而構建出來的二進位制檔案只需要在乙個很小的linux容器中即可執行
centos linux release 7.9.2009 (core)
go version go1.15.5 linux/amd64
docker version 18.09.9, build 039a7df9ba
#1 安裝docker
#2 安裝go
1目標
2書寫**
}3編譯
go build hello.go
3執行
./hello
4訪問
[root@192_168_31_100 ~]# curl localhost:8180/***
hello, you requested: /***
[root@192_168_31_100 ~]# curl localhost:8180/hello
hello, you requested: /hello
[root@192_168_31_100 ~]# curl localhost:8180/world
hello, you requested: /world
5檢視輸出的日誌
2021/02/09 15:26:39 received request for path: /world6結束程式
ctrl + c
參考位址
1書寫 dockerfile
cat dockerfile
from golang:1-alpine as build
# golang:1-alpine 這個標籤的含義是 最新1.x版本,基礎映象是 alpine linux
#--from=build 這裡即用到第一階段的映象
expose 8180
entrypoint ["./hello"]
2構建映象
#處在dockerfile所在目錄下
docker build -t hello-go:v1 .
3執行容器
docker run -d --name hello-go --rm -p 8180:8180 hello-go:v1
4訪問容器
curl localhost:8180/hello-world
5相關輸出資訊
5.1 映象大小對比
********************
# docker images | egrep "hello|golang"
hello-go v1 abe1c3a706e0 about a minute ago 12.1mb
golang 1-alpine 1463476d8605 7 weeks ago 299mb
可以看到,節省了不少磁碟空間,如果go程式有大量依賴,效果更明顯
5.2 容器執行資訊和訪問資訊
********************
[root@192_168_31_100 /data/gitee-dld/hello-go]# docker ps -a
container id image command created status ports names
e964f390ac91 hello-go:v1 "./hello" 2 seconds ago up 1 second 0.0.0.0:8180->8180/tcp hello-go
[root@192_168_31_100 /data/gitee-dld/hello-go]# curl localhost:8180/hello-world
hello, you requested: /hello-world
參考位址 docker 映象多階段構建
下面是 go 語言 hello world package main import fmt func main 接著用 alpine 1 的 go 語言 image 來編譯出可執行檔案。from golang alpine接著執行如下編譯指令 build stage from golang alpi...
Docker多階段構建
在 docker 17.05 版本之前,我們構建 docker 映象時,通常會採用兩種方式 一種方式是將所有的構建過程編包含在乙個 dockerfile 中,包括專案及其依賴庫的編譯 測試 打包等流程,這裡可能會帶來的一些問題 package main import fmt func main 編寫...
docker 多階段構建
構建映象最具挑戰性的一點是使映象大小盡可能的小。dockerfile中的每條指令都為影象新增了乙個圖層,您需要記住在移動到下一層之前清理任何不需要的工件。對於多階段構建,您可以在dockerfile中使用多個from語句。每個from指令可以使用不同的基礎,並且每個指令都開始乙個新的構建。您可以選擇...