Dieser Artikel vermittelt Ihnen relevantes Wissen über die Bereitstellung von Go-Projekten basierend auf Docker-Images, einschließlich Fragen im Zusammenhang mit dem Schreiben von GoLang-Webprogrammen und dem Kompilieren von Paketen unter Linux. Ich hoffe, dass er für alle hilfreich ist.
Natürlich können Sie diesen Schritt zum Bereitstellen befolgen, aber vielleicht Wenn es dazwischen ein kleines Problem gibt und Sie nicht wissen, wie Sie es lösen können, können Sie natürlich auch eine Nachricht hinterlassen.
Ich habe in einer Mac-Umgebung entwickelt und getestet. Wenn Sie Windows verwenden, gibt es möglicherweise einen kleinen Unterschied, aber es sollte kein großes Problem sein.
Ich werde hier das einfachste Hallo-Welt-Programm schreiben.
Erstellen Sie eine neue main.go
-Datei mit folgendem Inhalt: main.go
文件,内容如下:
package mainimport ( "fmt" "log" "net/http")func sayHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world")}func main() { http.HandleFunc("/", sayHello)//注册URI路径与相应的处理函数 log.Println("【默认项目】服务启动成功 监听端口 80") er := http.ListenAndServe("0.0.0.0:80", nil) if er != nil { log.Fatal("ListenAndServe: ", er) }}
我是在mac上开发的,需要用到go的交叉编译,如果对交叉编译不熟悉的,可以查下文档,或者直接复制我下面的命令进行编译。
我们是要跑在Docker
里面,基础 golang
这个镜像跑的,所以需要把他编译成兼容 i386
处理器的程序。
sudo env GOOS=linux GOARCH=386 go build main.go
这个编译完成后,本地会多出一个 main
程序,暂时不用管它备用就行。
Dockerfile
定制我们go程序的镜像新建一个文件夹,里面新建一个Dockerfile
文件,再在里面新建app
,script
两个文件。把上一步的main
程序放到app
文件夹里面,在script
里面新建一个build.sh
脚本文件,文件内容先不管,等下会说。
具体的文件结构是这样。
. ├── Dockerfile ├── app │ └── main └── script └── build.sh
下面就是编写Dockerfile
文件内容了,内容我先上代码:
FROM golang MAINTAINER 青羽 WORKDIR /go/src/COPY . .EXPOSE 80CMD ["/bin/bash", "/go/src/script/build.sh"]
这里解释下:
FROM
是集成自哪个镜像,我们是go程序官方提供了一个golang
这样的镜像,我们可以直接使用。MAINTAINER
是维护这名字。WORKDIR
工作目录。COPY
这是一个复制命令,把本地的所有文件复制到工作目录下。EXPOSE
这是对方开发的端口,我默认是开放80端口,这里可根据实际情况修改CMD
执行一个带参数的命令,我这样写,是为了让镜像启动时去执行script/build.sh
的脚本,这个脚本里面是写的启动go程序的命令。#!/usr/bin/env bash cd /go/src/app/ && ./main
就这两行。
这属于Docker
的知识了,我把命令粘贴出来。
docker build -t go-web .
golang
这个镜像的话,他会自己先去官方镜像库拉取这个镜像再编译,我们静静的等他就行。go-web
这个参数是你最后编译后的镜像名字,可以随意修改,也可以加上版本号比如: go-web:v1
。看到上面这个输出,就说明编译成功了,在你的本地镜像里面就有了一个名为go-web
的镜像。可以使用 docker images
进行查询:
docker-compose.yml
文件到这里属于我们的最后一步了,如果用我们刚编译的go-web
来运行我们的go程序:
version: '2'networks: basic:services: world: container_name: world image: go-web ports: - "8099:80" volumes: - ./app/go/world:/go/src/app:rw networks: - basic
到这里我们的编排文件已经写好了,现在只需要用docker-compose
来启动我们的编排文件就好,启动命令如下:
docker-compose -f docker-compose.yml up -d world
如果输出下面的提示,说明启动成功了。
Creating world ... done
启动成功后你可以再用
docker ps
来查看下是否启动成功了。
现在访问http://127.0.0.1:8099
rrreee
Ich habe sie auf einem Mac entwickelt und muss die Go-Cross-Kompilierung verwenden. Wenn dies der Fall ist Wenn Sie mit der Kreuzkompilierung nicht vertraut sind, können Sie die Dokumentation überprüfen oder meinen Befehl unten zum Kompilieren direkt kopieren. Wir möchten es in Docker
ausführen und das grundlegende golang
-Image wird ausgeführt, daher muss es in ein Programm kompiliert werden, das mit i386
kompatibel ist > Prozessor.
rrreee
Hauptprogramm
geben. Lassen Sie es einfach vorerst in Ruhe. 🎜🎜4. Verwenden Sie Dockerfile
, um das Image unseres Go-Programms anzupassen. 🎜🎜Erstellen Sie einen neuen Ordner, erstellen Sie darin eine neue Dockerfile
-Datei und erstellen Sie dann einen neuen app
darin >, script
zwei Dateien. Legen Sie das main
-Programm aus dem vorherigen Schritt in den Ordner app
und erstellen Sie ein neues build.sh
-Skript in script
Datei, der Inhalt der Datei ist mir im Moment egal, ich werde später darüber sprechen. 🎜 Die spezifische Dateistruktur ist wie folgt. 🎜rrreee🎜Das Folgende ist der Inhalt der Dockerfile
-Datei. Ich werde zuerst den Code schreiben: 🎜rrreee🎜Hier ist die Erklärung: 🎜🎜🎜Welcher Spiegel ist der FROM
integriert von? Wir sind Das go-Programm stellt offiziell ein Bild wie golang
zur Verfügung, das wir direkt verwenden können. 🎜🎜MAINTAINER
soll diesen Namen pflegen. 🎜🎜WORKDIR
Arbeitsverzeichnis. 🎜🎜COPY
Dies ist ein Kopierbefehl, der alle lokalen Dateien in das Arbeitsverzeichnis kopiert. 🎜🎜EXPOSE
Dies ist der von der anderen Partei entwickelte Port. Standardmäßig öffne ich Port 80. Dies kann entsprechend der tatsächlichen Situation geändert werden 🎜🎜CMD
Zur Ausführung Ein Befehl mit Parametern, den ich so schreibe, besteht darin, das Skript script/build.sh
auszuführen, wenn das Image startet. Dieses Skript enthält den Befehl zum Starten des Go-Programms. 🎜 Ich füge den Inhalt hier ein: 🎜🎜rrreee🎜 Nur diese beiden Zeilen. 🎜🎜5. Kompilieren Sie unser eigenes Image🎜🎜Dies gehört zum Wissen von Docker
, ich werde den Befehl einfügen. 🎜rrreee🎜🎜Dieser Befehl wird ausgeführt, wenn lokal kein golang
-Bild vorhanden ist, um das Bild abzurufen und es dann zu kompilieren. 🎜🎜go-web
Dieser Parameter ist der Name Ihres zuletzt kompilierten Bildes. Sie können ihn nach Belieben ändern oder eine Versionsnummer hinzufügen, wie zum Beispiel: go-web:v1
. 🎜🎜🎜🎜Siehe oben Die Ausgabe bedeutet, dass die Kompilierung erfolgreich war und in Ihrem lokalen Bild ein Bild mit dem Namen go-web
vorhanden ist. Sie können docker images
verwenden, um Folgendes abzufragen: 🎜
🎜🎜 6. Schreiben Sie die Datei docker-compose.yml
🎜🎜Dies ist unser letzter Schritt. Wenn wir das gerade kompilierte go-web, um unser Go-Programm auszuführen: 🎜rrreee🎜Unsere Orchestrierungsdatei wurde hier geschrieben. Jetzt müssen wir nur noch <code>docker-compose
verwenden, um unsere Orchestrierungsdatei zu starten:🎜 rrreee🎜Wenn die folgende Eingabeaufforderung ausgegeben wird, bedeutet dies, dass der Start erfolgreich war. 🎜rrreee🎜Nachdem der Start erfolgreich war, können Sie mit 🎜rrreee🎜 überprüfen, ob der Start erfolgreich war. 🎜🎜Besuchen Sie jetzt http://127.0.0.1:8099
, um auf unser Go-Programm zuzugreifen. 🎜🎜Empfohlenes Lernen: „🎜Docker-Video-Tutorial🎜“🎜🎜
Das obige ist der detaillierte Inhalt vonBereitstellen von Go-Projekten basierend auf Docker-Images (detaillierte Beispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!