golang鏡像,golang csdn

本文目錄一覽:

docker聯合文件系統

(Union filesystem)聯合文件系統允許我們把多個文件系統邏輯上合併成一個文件系統,組成Union filesystem的文件系統不必相同(它們可以是ext2/3/4,vfat,ntfs,jffs…)。overlay是聯合文件系統的一種(aufs…),overlay文件系統構建於其他文件系統之上,overlay其實更像是個掛載系統(mount system),功能是把不同的文件系統掛載到統一的路徑。

overlay是個分層的文件系統,底層文件系統通常叫 lower ,頂層文件系統系統通常叫 upper ,兩者通常合併掛載到 merged 目錄,最終用戶看到的就是 merged 中的文件。

lower 文件系統是readonly,對 merged 中所有的修改都只對 upper 操作,記住這點很重要。下面我們在linux上創建一個overlay文件系統,用以說明overlay文件系統掛載,文件讀寫,文件新增和刪除。

創建 lower upper merged work 目錄,把 lower和upper 掛載到 merged , work 是空目錄,必須和 merged 的文件系統類型一樣。

掛載: sudo mount -t overlay overlay -o lowerdir=./lower,upperdir=./upper,workdir=./work merged/ ,掛載後 merged 目錄結構如下:

可以看到 lower 和 upper 中的文件合併到了 merged 中,當 lower 和 upper 有相同路徑的文件時, merged 中只顯示 upper 中的。也就是說 upper 會遮住 lower 中同名的文件(同路徑下)。

overlay提供了對只讀文件系統的讀寫功能,適合用在需要維持一個只讀鏡像,又需要提供讀寫功能的系統中,比如openwrt和docker,下面我們介紹docker中overlay的應用。

docker的基礎鏡像其實就是個readonly的根文件系統,從基礎鏡像構建的鏡像其實都只是把修改部分和基礎鏡像合併重新打包,我們從ubuntu鏡像構建一個具有golang環境的鏡像,用來說明overlay在docker中的應用。

Dockerfile 如下:

構建鏡像

啟動容器

查看容器

查看GraphDriver

從上面可以看到docker採用的是overlay2文件系統,LowerDir有多層。

/var/lib/docker/overlay2/1d65e86e54373a5b01afe28d0878a953fa2e9eb7cd14552a17d4a8628b476978/diff

/var/lib/docker/overlay2/b56e1dd54abdf8300b2f9726e3e92d3b32b78c8bf5b5cd807e27be78c671af40/diff

/var/lib/docker/overlay2/44c045232b8f3510d28965fbebcaad458263855785cc38e1a784a6731df7433d/diff

為什麼會有這麼多層,其實很好理解,查看Dockerfile中寫了哪些規則:

現在我們核對下最地城鏡像是否是ubuntu的鏡像文件:

ubuntu是基礎鏡像,沒有LowerDir, UpperDir就是我新建ubuntu:golang鏡像LowerDir的最底層文件系統

Go語言安裝與鏡像配置

安裝網址

國內鏡像

Go 1.13 及以上(推薦

打開你的終端並執行

macOS 或 Linux

如果是zsh

請這樣設置

Windows

打開PowerShell 並執行

或者

然後你就可以

Golang項目部署3,容器部署

容器部署即使用 docker 化部署 golang 應用程序,這是在雲服務時代最流行的部署方式,也是最推薦的部署方式。

跨平台交叉編譯是 golang 的特點之一,可以非常方便地編譯出我們需要的目標伺服器平台的版本,而且是靜態編譯,非常容易地解決了運行依賴問題。

使用以下指令可以靜態編譯 Linux 平台 amd64 架構的可執行文件:

生成的 main 便是我們靜態編譯的,可部署於 Linux amd64 上的可執行文件。

我們需要將該可執行文件 main 編譯生成 docker 鏡像,以便於分發及部署。 Golang 的運行環境推薦使用 alpine 基礎系統鏡像,編譯出的容器鏡像約為 20MB 左右。

一個參考的 Dockerfile 文件如下:

其中,我們的基礎鏡像使用了 loads/alpine:3.8 ,中國國內的用戶推薦使用該基礎鏡像,基礎鏡像的 Dockerfile 地址: ,倉庫地址:

隨後使用 ” docker build -t main . ” 指令編譯生成名為 main 的 docker 鏡像。

需要注意的是,在某些項目的架構設計中, 靜態文件 和 配置文件 可能不會隨著鏡像進行編譯發布,而是分開進行管理和發布。

例如,使用 MVVM 模式的項目中(例如使用 vue 框架),往往是前後端非常獨立的,因此在鏡像中往往並不會包含 public 目錄。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的項目中,也往往並不需要 config 目錄。

因此對於以上示例的 Dockerfile 的使用,僅作參考,根據實際情況請進行必要的調整。

使用以下指令可直接運行剛才編譯成的鏡像:

容器的分發可以使用 docker 官方的平台: ,國內也可以考慮使用阿里云: 。

在企業級生產環境中, docker 容器往往需要結合 kubernetes 或者 docker swarm 容器編排工具一起使用。

容器編排涉及到的內容比較多,感興趣的同學可以參考以下資料:

golang編寫的項目,使用alpine製作鏡像遇到的一個問題解決

GraphicsMagick,一款高性能的圖片處理工具,由於項目需要,用到它,自然而然用到了關於gm的第三方庫 這個庫按照作者的提示,要安裝GraphicsMagick-devel依賴。

項目寫完了,接下來用alpine做為基礎鏡像,準備製作項目的鏡像。

golang項目,是在ubuntu下編寫的,編譯成二進位文件了,只要把二進位文件放進鏡像里即可,遇到的問題有2個

1 容器跑起來,一直報二進位文件no found

我認認真真的確認了文件,以及它的路徑,確實是存在的,怎麼會報文件找不到呢?!

原來是musl和glibc是兼容的問題,在Dockerfile里要加以下兩步

2 Error loading shared library libGraphicsMagickWand-Q16.so.2: No such file or directory

明明按要求安裝GraphicsMagick-devel依賴,為啥還報這種錯

於是想到了,是不是也要ln做一下軟鏈接呢?於是學著上面的樣子在Dockerfile里補上

再跑,問題依舊,莫非是軟連接的地址寫錯了!回到開發的電腦上用ldd命令查看一下

果然,編譯後的二進位文件依賴路徑是/lib,而不是/lib64

於是,修改Dockerfile里的寫法

問題解決,開心:)

參考資料:

原創文章,作者:EIGA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133716.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EIGA的頭像EIGA
上一篇 2024-10-04 00:01
下一篇 2024-10-04 00:01

相關推薦

  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 現在鏡像站不行了,怎麼辦?

    現在鏡像站不行了是很常見的問題,本文將從多個方面對此問題進行詳細闡述,為大家提供解決方案。 一、檢查網路環境 鏡像站不通常見的原因之一是網路問題,可能是個人網路不穩定,也可能是IS…

    編程 2025-04-29
  • 使用Golang調用Python

    在現代軟體開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • 如何在Python中配置國內鏡像源

    如果你使用Python進行開發,那麼肯定會遇到下載模塊或庫速度慢的情況。這時,我們就可以配置國內鏡像源來解決這一問題。本文將會從多個方面來介紹如何配置國內鏡像源。 一、pip配置國…

    編程 2025-04-27
  • Docker鏡像管理

    一、查看所有鏡像 使用docker命令可以很輕鬆地查看所有已經構建好的鏡像,命令如下: docker images 該命令將列出所有本地docker主機上所有的鏡像: REPOSI…

    編程 2025-04-25
  • Maven配置阿里雲鏡像詳解

    Maven是一個基於項目對象模型(POM)的構建工具,用於管理Java項目的構建、依賴和發布。在使用Maven下載依賴庫時,原始倉庫伺服器可能因為網路原因導致下載速度緩慢或者失敗。…

    編程 2025-04-25
  • 深入理解Docker容器和鏡像的關係

    一、Docker容器和鏡像的基本概念 Docker是一種虛擬化容器技術,它可以劃分出多個隔離環境,讓不同的應用程序在同一台機器上運行,而不會相互影響。Docker主要包含兩個基本概…

    編程 2025-04-24
  • 阿里鏡像庫:解決開發和運維中的痛點

    阿里鏡像庫是一種鏡像服務,旨在解決開發和運維中的痛點,提供了穩定高效的鏡像服務。它是由阿里雲推出的,為用戶提供了一個全面的基礎設施和應用部署工具。 一、方便快捷的鏡像服務 阿里鏡像…

    編程 2025-04-24
  • Linux鏡像下載

    一、下載流程 1、打開瀏覽器,輸入Linux鏡像下載地址; wgethttps://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.…

    編程 2025-04-24

發表回復

登錄後才能評論