圖文版
如何使用docker來完成go的安裝。這篇文章會示範純粹安裝golang docker然後執行本地端定義的module
大綱
- 創建基本的docker file,創建golang image(optional)
- 將當前資料夾掛載進container下的app/ folder
- 執行go init 將go.mod 路徑設為/app
- 新增module package
- main.go import
- 執行
Create image
首先先創建基本的docker file
FROM golang:latest #拉取golang docker
WORKDIR /app
EXPOSE 3000
Create container & mount your local folder
可以創建bat檔(windows)來快速執行。第一行創建完image後就沒用了因此可以註記掉。第二可以選擇自己正在工作的資料夾,將他移入docker 的/app底下(-v 為mount,mout進去後本機端跟docker端的資料會同步)。
假設目前的資夾叫做golen,將go len掛載到container下的/app
docker build -t judd/golan .
docker run -it -d -v D:\perProject\golen:/app --name goMoxa judd/golan
Enter container
創建好之後可以進入docker中
如果是linux 可以輸入attach 查看
如果windows直接點選圖形介面
之後點選Exec進入command line。個人習慣會輸入"/bin/bash"。這樣可以快速的使用所有bash快捷,例如上鍵可以快速存取上一個輸入的指令。
set go.mod
進入container後輸入以下指令,因為我在container中的workspace 是在/app底下,因此init選在/app
go mod init /app
go mod init必須要是你的working base非常重要(在此docker 中就是之前設定的/app),不然當docker進行編譯的時候會去找container 中go 的資料夾
而 go.mod內的內容,代表當go 編譯的時候會去/app底下撈module
以下是go.mod內容。module路徑被設為/app底下
//go.mod
module app
go 1.22.0
Add new module
接著開始創建module,我將module都放入src資料夾中並創建名為"hello"的module。
(也可以不用放在src內,只需要以app/作為root dir import package即可,Ex. 若此module是放在main.go同層級,在main.go import hello package只需要將import "app/src/hello"改成import "app/hello"即可)
此時資料結構如下
-app/
- go.mod
- src/
- hello/
- hello.go
hello.go的內容
package hello
import "fmt"
func PrintHello() {
fmt.Println("hello world")
}
main.go import package
創建要執行的主程式main.go,使用名為"hello"的package。以下是main.go內容
//main.go
package main
import (
"app/src/hello" // 引入本地的 hello package
)
func main() {
// 調用 hello 模組中的 PrintHello 函式
hello.PrintHello()
}
此時的docker內資料夾結構
-app/
- main.go
- go.mod
- src/
- hello/
- hello.go
Run
接著在docker 內cd 到app/底下執行
go run main.go
Top comments (0)