docker多階段構建映象

2021-10-19 08:02:12 字數 3041 閱讀 1050

利用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指令可以使用不同的基礎,並且每個指令都開始乙個新的構建。您可以選擇...