---
# System prepended metadata

title: 使用Docker 執行 GoLang 程式
tags: [GoLang, Docker]

---

# 使用Docker 執行 GoLang 程式
###### tags: `GoLang` `Docker`

## 學習目標
可透過docker產生Golang的image並執行。

## 目錄
[TOC]

# 實作步驟

## 專案建立
專案這部分可以使用我在[GitHub](https://github.com/franksu129/play-go/tree/main/GoAPI)上面的測試專案即可，此專案是用GoLang寫RestfulAPI針對資料進行CRUD的操作。

## DockerImage 建立
為了要產生Docker Image這邊需要建立dockerfile來操作，這邊直接附上腳本：
```dockerfile=
FROM        golang
RUN         mkdir -p /app
WORKDIR     /app
COPY        . .
RUN         go mod download && go build -o app
ENTRYPOINT  ["./app"]
```
大約簡單說明一下dockerfile相關參數
* FROM : Base Image 可以想成當作基底執行程式的映象檔
* RUN : 可執**命令**或者**執行檔**
* WORKDIR : 指定工作目錄
* COPY : 將程式複製到容器內
* ENTRYPOINT : 與RUN概念相同，可執**命令**或者**執行檔**

有興趣了解dockerfile的其它參數的可參考[官網](https://docs.docker.com/engine/reference/builder/#usage)

腳本完成後直接在該目錄下使用指令建立image
```shell=
docker build -t golangapi .
```

完成之後使用指令
```shell=
dokcer images
```
可以看到產出映像檔結果
![](https://i.imgur.com/0xC3UZu.png)

# 運行程式
變成DockerImage之後要運行程式就變成了十分容易，直接透過指令運行即可
```shell=
docker run --rm -d -p 8080:8080 golangapi
```

透過相關指令可以查看運行狀況
```shell=
docker ps
docker logs <CONTAINER ID>
```

![](https://i.imgur.com/Vfje9bv.png)



# 測試服務
完成後如果是使用提供專案的程式碼可以呼叫
**http://localhost:8080/todos**
即可取得執行結果
![](https://i.imgur.com/SSnHKBn.png)


<br/>

---

相關參考來源：
[Day 25 | 使用 Docker 封裝與運行 Go 程式（一）](https://ithelp.ithome.com.tw/articles/10240352)



<style>
    .red{color: red;}
</style>