「Docker」如何在蘋果電腦上構建簡單的Go云原生程序「MacOS」

介紹

使用Docker開發Golang云原生應用程序,使用Golang服務和Redis服務

 注:寫得很詳細 為方便我的朋友可以看懂 

環境部署

確保已經安裝Godocker等基礎配置
官網下載鏈接直達:Docker官網下載 ?? ??? ?Go官網下載

操作步驟

第一步 創建一個Go應用程序

  1. 創建新Go工程,編輯main.go文件內容如下:
package mainimport ("fmt""log""net/http""github.com/go-redis/redis/v8""context"
)var ctx = context.Background()func main() {// 設置Redis客戶端client := redis.NewClient(&redis.Options{Addr: "redis:6379", // 使用Docker服務名作為地址})// 確認Redis連接_, err := client.Ping(ctx).Result()if err != nil {log.Fatalf("Could not connect to Redis: %v", err)}// 設置HTTP服務器http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {// 嘗試從Redis獲取值val, err := client.Get(ctx, "counter").Result()if err == redis.Nil {val = "0"_, err := client.Set(ctx, "counter", "1", 0).Result()if err != nil {fmt.Fprintf(w, "Error setting value in Redis: %v", err)return}} else if err != nil {fmt.Fprintf(w, "Error getting value from Redis: %v", err)return} else {// 增加計數器newVal, err := client.Incr(ctx, "counter").Result()if err != nil {fmt.Fprintf(w, "Error incrementing value in Redis: %v", err)return}val = fmt.Sprintf("%d", newVal)}fmt.Fprintf(w, "Counter value is: %s", val)})// 啟動HTTP服務器log.Fatal(http.ListenAndServe(":8080", nil))
}

第二步 使用Docker編排Go應用程序和Redis服務

  1. 創建 Dockerfile文件(無文件后綴名)如圖:
    在這里插入圖片描述

  2. 然后編輯該文件:

FROM golang:1.16WORKDIR /appCOPY go.mod .
COPY go.sum .
RUN go mod downloadCOPY *.go .RUN go build -o /hello-redisEXPOSE 8080CMD [ "/hello-redis" ]

第三步 初始化Go模塊

繼續在Terminal編輯(確保還是在這個go程序的路徑):

go mod init hello-redis
go mod tidy

第四步 創建并編輯docker-compose.yml文件

在文件夾下創建文件,添加內容如下:

version: '3'
services:app:build: .ports:- "8080:8080"depends_on:- redisredis:image: "redis:alpine"

第五步 構建和運行應用程序

繼續在Terminal上輸入代碼:

docker-compose up --build

此時將會試圖構建Go應用程序和Redis服務,并啟動它們,在這個過程中需要等待Docker下載相應的依賴配置。

第六步 測試應用程序

使用curl訪問http://localhost:8082
輸入代碼:

curl http://localhost:8080

這個時候會打開瀏覽器并訪問http://localhost:8080,頁面上會顯示計數值

附錄

比較快一點的編輯文件的方法就是使用Terminal
具體的步驟如下:(一個小案例:創建Dockerfile文件并編輯)

1. 切換到工作目錄

在工作目錄上右擊打開Terminal

在這里插入圖片描述



或者直接打開Terminal 然后輸入代碼切換到工作目錄

cd Go應用程序的路徑

在這里插入圖片描述

忘記路徑的時候 如何查看Go應用程序的工作路徑

右擊go文件夾,點擊get info
在這里插入圖片描述
以下信息就是go文件夾的位置
在這里插入圖片描述

2. 創建文件

輸入代碼:

vim Dockerfile

3. 編輯文件,保存并退出

復制粘貼前文代碼
在這里插入圖片描述
復制粘貼好之后,直接輸入代碼,回車即可退出:
注意一定要是英文輸入法

:wq!

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160917.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 多線程之 DCL(Double-Checked Locking)

文章目錄 一、概述二、使用方法 一、概述 DCL(Double-Checked Locking)是一種用于在多線程環境下實現延遲初始化的技術。它結合了懶加載(Lazy Initialization)和線程安全性,用于在需要時創建單例對象或共享資源。它的…

什么是SEO?(初學者建議收藏)

前言 在這個充滿機遇和挑戰的時代,人們不斷追求著更好的生活和更高的成就。無論是個人還是企業,都需要不斷提升自己的競爭力,才能在激烈的市場競爭中獲得成功。因此,我們需要不斷學習和成長,學會適應變化和面對挑戰。…

汽車智能座艙/智能駕駛SOC -2

第二篇(筆記)。 未來智能汽車電子電氣將會是集中式架構(車載數據中心)虛擬化技術(提供車載數據中心靈活性和安全性)這個幾乎是毋庸置疑的了。國際大廠也否紛紛布局超算芯片和車載數據中心平臺。但是演進需…

日期格式轉化成星期幾部署到linux顯示英文

異常收集 原因:解決辦法仰天大笑出門去,我輩豈是蓬蒿人 傳入一個時間獲取這個時間對應的是星期幾,在開發環境(window系統)中顯示為星期幾,部署到服務器(linux系統)中會顯示英文的時間…

serverless開發實戰

.yml格式 YAML(YAML Ain’t Markup Language)是一種人類可讀的數據序列化格式,它使用簡潔的結構和縮進來表示數據。它被廣泛用于配置文件和數據交換的場景,具有易讀性和易寫性的特點。 serverless.yml配置 在項目的根目錄下增加…

Youtube新手運營——你需要的技巧與工具

對于有跨境意向的內容創作者或者品牌企業來說,YouTube是因其巨大的潛在受眾群和商業價值成為最值得投入變現與營銷計劃的平臺。 據統計,98% 的美國人每月訪問 YouTube,近三分之二的人每天訪問。但是,YouTube還遠未達到過度飽和的…

Leetcode—53.最大子數組和【中等】

2023每日刷題&#xff08;三十四&#xff09; Leetcode—53.最大子數組和 前綴和算法思想 參考靈茶山艾府 實現代碼 #define MAX(a, b) ((a > b) ? (a) : (b)) #define MIN(a, b) ((a < b) ? (a) : (b)) int maxSubArray(int* nums, int numsSize) {int ans INT_…

VMware 16 Pro 安裝以及下載

1、下載地址&#xff1a; https://www.aliyundrive.com/s/nj3PSD4TN9G 2、安裝文件 右擊打開 下一步 密鑰&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF 到此&#xff0c;安裝完畢

postgreSQL如何快速查詢大表數據量

文章目錄 場景方案結果 場景 我有一個非常大的表&#xff0c;估計幾百萬或者幾千萬。 我開始使用了 select count(*) from my_table_javapub 方式&#xff0c;查詢非常慢。 如何解決&#xff1f;&#xff1f;&#xff1f; 方案 如果你需要更快地獲取表中的行數&#xff0c…

93.STL-系統內置仿函數

目錄 算術仿函數 關系仿函數 邏輯仿函數 C 標準庫中提供了一些內置的函數對象&#xff0c;也稱為仿函數&#xff0c;它們通常位于 <functional> 頭文件中。以下是一些常見的系統內置仿函數&#xff1a; 算術仿函數 功能描述&#xff1a; 實現四則運算其中negate是一元…

Java游戲之飛翔的小鳥

前言 飛翔的小鳥 小游戲 可以作為 java入門階段的收尾作品 &#xff1b; 需要掌握 面向對象的使用以及了解 多線程&#xff0c;IO流&#xff0c;異常處理&#xff0c;一些java基礎等相關知識。一 、游戲分析 1. 分析游戲邏輯 &#xff08;1&#xff09;先讓窗口顯示出來&#x…

騰訊待辦導出的文件在哪找?支持打開ics文件的提醒待辦工具

您使用過騰訊待辦嗎&#xff1f;如果您在平常使用的提醒待辦工具為騰訊待辦&#xff0c;想必近期您打開這款提醒待辦工具時會看到提示您及時導出數據的提示。騰訊旗下的騰訊待辦應用&#xff0c;應業務發展方向調整將于2023年12月20日全面停止運營并下架該應用。 面對突如其來…

Redis的主從復制及哨兵模式

一、Redis的主從復制 1.1 Redis主從復制定義 主從復制是redis實現高可用的基礎&#xff0c;哨兵模式和集群都是在主從復制的基礎之上實現高可用&#xff1b; 主從復制實現數據的多級備份&#xff0c;以及讀寫分離(主服務器負責寫&#xff0c;從服務器只能讀) 1.2 主從復制流…

ChatGPT 也并非萬能,品牌如何搭上 AIGC「快班車」

內容即產品的時代&#xff0c;所見即所得&#xff0c;所得甚至超越所見。 無論是在公域的電商平臺、社交媒體&#xff0c;還是品牌私域的官網、社群、小程序&#xff0c;品牌如果想與用戶發生連接&#xff0c;內容永遠是最前置的第一要素。 01 當內容被消費過&#xff0c;就…

【python學習】基礎篇-常用模塊-os目錄操作

os模塊提供了許多與操作系統交互的函數&#xff0c;包括操作目錄的函數。 1、導入os模塊&#xff1a; import os2、獲取當前工作目錄&#xff1a;使用os模塊的getcwd()方法獲取當前工作目錄。 current_dir os.getcwd() print(current_dir)3、改變當前工作目錄&#xff1a;使…

2023全球數字貿易創新大賽7-8

目錄 2023全球數字貿易創新大賽 數據要素:數字經濟最核心的資源。(存儲,流通,使用)

C++虛析構和純虛析構解決delete堆區父類指針無法調用子類的構造函數

#include<iostream> #include<string>using namespace std;//虛析構和純虛析構 class Animal { public:Animal(){cout<<"執行Animal的構造函數"<<endl;}~Animal(){cout<<"執行Animal的析構函數"<<endl;}virtual void …

HTML新手入門筆記整理:HTML基本介紹

網頁 靜態頁面 僅可供用戶瀏覽&#xff0c;不具備與服務器交互的功能。 動態頁面 可供用戶瀏覽&#xff0c;具備與服務器交互的功能。 HTML HTML&#xff0c;全稱HyperText Markup Language&#xff08;超文本標記語言&#xff09;,是一種用于創建網頁的標準標記語言。用于…

HIS醫療項目

文章目錄 醫療項目簡介HIS項目介紹HIS架構解析HIS業務流程圖HIS項目架構圖 HIS組件解析——服務支撐 內存設置為4G或以上部署NGINX服務部署web安裝JDK部署Elasticsearch安裝ik中文分詞器 部署rabbitmq部署MySQL服務安裝MySQL服務建庫、授權用戶導入數據 部署Redis測試Redis 部署…