Heim > Betrieb und Instandhaltung > Docker > Bereitstellen von Go-Projekten basierend auf Docker-Images (detaillierte Beispiele)

Bereitstellen von Go-Projekten basierend auf Docker-Images (detaillierte Beispiele)

WBOY
Freigeben: 2022-06-08 20:52:32
nach vorne
4874 Leute haben es durchsucht

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.

Bereitstellen von Go-Projekten basierend auf Docker-Images (detaillierte Beispiele)

Abhängige Kenntnisse

  • Go-Cross-Compilation-Grundlagen
  • Docker-Grundlagen
  • Dockerfile-Benutzerdefiniertes-Image-Grundlagen
  • Docker-Compose-Orchestrierungsdatei-Schreibgrundlagen

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.

1. Abhängig von der Umgebung

  • Docker

2. Schreiben Sie ein GoLang-Webprogramm

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)
    }}
Nach dem Login kopieren

三、编译成linux下的程序包

我是在mac上开发的,需要用到go的交叉编译,如果对交叉编译不熟悉的,可以查下文档,或者直接复制我下面的命令进行编译。
我们是要跑在Docker里面,基础 golang这个镜像跑的,所以需要把他编译成兼容 i386 处理器的程序。

sudo env GOOS=linux GOARCH=386 go build main.go
Nach dem Login kopieren

这个编译完成后,本地会多出一个 main 程序,暂时不用管它备用就行。

四、使用 Dockerfile 定制我们go程序的镜像

新建一个文件夹,里面新建一个Dockerfile文件,再在里面新建appscript两个文件。把上一步的main程序放到app文件夹里面,在script里面新建一个build.sh脚本文件,文件内容先不管,等下会说。
具体的文件结构是这样。

.
├── Dockerfile
├── app
│   └── main
└── script
    └── build.sh
Nach dem Login kopieren

下面就是编写Dockerfile文件内容了,内容我先上代码:

FROM golang
MAINTAINER  青羽
WORKDIR /go/src/COPY . .EXPOSE 80CMD ["/bin/bash", "/go/src/script/build.sh"]
Nach dem Login kopieren

这里解释下:

  • FROM 是集成自哪个镜像,我们是go程序官方提供了一个golang这样的镜像,我们可以直接使用。
  • MAINTAINER 是维护这名字。
  • WORKDIR 工作目录。
  • COPY 这是一个复制命令,把本地的所有文件复制到工作目录下。
  • EXPOSE 这是对方开发的端口,我默认是开放80端口,这里可根据实际情况修改
  • CMD 执行一个带参数的命令,我这样写,是为了让镜像启动时去执行script/build.sh的脚本,这个脚本里面是写的启动go程序的命令。
    这里我把内容粘贴出来:
#!/usr/bin/env bash
cd /go/src/app/ && ./main
Nach dem Login kopieren

就这两行。

五、编译我们自己的镜像

这属于Docker的知识了,我把命令粘贴出来。

docker build -t go-web .
Nach dem Login kopieren
  • 这个命令执行,如果本地没有 golang 这个镜像的话,他会自己先去官方镜像库拉取这个镜像再编译,我们静静的等他就行。
  • go-web这个参数是你最后编译后的镜像名字,可以随意修改,也可以加上版本号比如: go-web:v1

Bereitstellen von Go-Projekten basierend auf Docker-Images (detaillierte Beispiele)

看到上面这个输出,就说明编译成功了,在你的本地镜像里面就有了一个名为go-web的镜像。可以使用 docker images 进行查询:

Bereitstellen von Go-Projekten basierend auf Docker-Images (detaillierte Beispiele)

六、编写 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
Nach dem Login kopieren

到这里我们的编排文件已经写好了,现在只需要用docker-compose来启动我们的编排文件就好,启动命令如下:

docker-compose -f docker-compose.yml up -d world
Nach dem Login kopieren

如果输出下面的提示,说明启动成功了。

Creating world ... done
Nach dem Login kopieren

启动成功后你可以再用

docker ps
Nach dem Login kopieren

来查看下是否启动成功了。

现在访问http://127.0.0.1:8099rrreee

3. Kompilieren Sie sie in ein Programmpaket unter Linux.

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 i386kompatibel ist > Prozessor.
rrreee

Nachdem diese Kompilierung abgeschlossen ist, wird es lokal ein zusätzliches 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 appdarin >, 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-webDieser 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. 🎜🎜

Bereitstellen von Go-Projekten basierend auf Docker-Images (detaillierte Beispiele)🎜🎜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: 🎜

Bereitstellen von Go-Projekten basierend auf Docker-Images (detaillierte Beispiele)🎜🎜 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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage