Maison > Opération et maintenance > Docker > le corps du texte

Déployer des projets Go basés sur des images Docker (exemples détaillés)

WBOY
Libérer: 2022-06-08 20:52:32
avant
4836 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur le déploiement de projets Go basés sur des images Docker, y compris les problèmes liés à l'écriture de programmes Web GoLang et à la compilation de packages sous Linux. J'espère qu'il sera utile à tout le monde. Connaissances dépendantes s'il y a un petit problème au milieu et que vous ne savez pas comment le résoudre, vous pouvez bien sûr également laisser un message.

Déployer des projets Go basés sur des images Docker (exemples détaillés)J'ai développé et testé sur un environnement mac. Si vous êtes sous Windows, il peut y avoir une petite différence, mais il ne devrait pas y avoir de gros problème.

1. Dépend de l'environnement
  • Docker
  • 2 Écrivez un programme Web GoLang
  • J'écrirai ici le programme hello world le plus simple.
  • Créez un nouveau fichier main.go avec le contenu suivant :
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)
    }}
Copier après la connexion

3. Compilez-le dans un package de programme sous Linux

Je l'ai développé sur un mac et j'ai besoin d'utiliser la compilation croisée go. Si c'est le cas Si vous n'êtes pas familier avec la compilation croisée, vous pouvez consulter la documentation ou copier directement ma commande ci-dessous pour compiler. Nous voulons l'exécuter dans Docker, et l'image de base golang est en cours d'exécution, elle doit donc être compilée dans un programme compatible avec le i386</code > processeur. </strong><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">sudo env GOOS=linux GOARCH=386 go build main.go</pre><div class="contentsignin">Copier après la connexion</div></div></p>Une fois cette compilation terminée, il y aura un programme <code>main supplémentaire localement.

4. Utilisez Dockerfile pour personnaliser l'image de notre programme go
  • Créez un nouveau dossier, créez-y un nouveau fichier Dockerfile, puis créez un nouveau app</code dedans >, <code>script deux fichiers. Placez le programme main de l'étape précédente dans le dossier app et créez un nouveau script build.sh dans script</code > Fichier, je m'en fiche du contenu du fichier pour l'instant, j'en parlerai plus tard. </li> La structure spécifique du fichier est la suivante. </ul><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">. ├── Dockerfile ├── app │ └── main └── script └── build.sh</pre><div class="contentsignin">Copier après la connexion</div></div><h2>Voici le contenu du fichier <code>Dockerfile. Je vais d'abord écrire le code :
    FROM golang
    MAINTAINER  青羽
    WORKDIR /go/src/COPY . .EXPOSE 80CMD ["/bin/bash", "/go/src/script/build.sh"]
    Copier après la connexion

    Voici l'explication :
    main.go文件,内容如下:

    #!/usr/bin/env bash
    cd /go/src/app/ && ./main
    Copier après la connexion

    三、编译成linux下的程序包

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

    docker build -t go-web .
    Copier après la connexion

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

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

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

    version: &#39;2&#39;networks:
      basic:services:
      world:
        container_name: world
        image: go-web
        ports:
          - "8099:80"
        volumes:
          - ./app/go/world:/go/src/app:rw
        networks:
          - basic
    Copier après la connexion

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

    docker-compose -f docker-compose.yml up -d world
    Copier après la connexion

    这里解释下:

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

    就这两行。

    五、编译我们自己的镜像

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

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

    Déployer des projets Go basés sur des images Docker (exemples détaillés)

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

    Déployer des projets Go basés sur des images Docker (exemples détaillés)

    六、编写 docker-compose.yml 文件

    到这里属于我们的最后一步了,如果用我们刚编译的go-web来运行我们的go程序:

    rrreee

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

    rrreee

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

    rrreee

    启动成功后你可以再用

    rrreee

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

    现在访问http://127.0.0.1:8099

    Quel miroir est le FROM. intégré depuis ? Nous sommes Le programme go fournit officiellement une image telle que golang, que nous pouvons utiliser directement.

    MAINTAINER doit conserver ce nom.
    Répertoire de travail WORKDIR.

    🎜COPY Il s'agit d'une commande de copie qui copie tous les fichiers locaux dans le répertoire de travail. 🎜🎜EXPOSE C'est le port développé par l'autre partie. Par défaut, j'ouvre le port 80. Celui-ci peut être modifié en fonction de la situation réelle 🎜🎜CMD Pour exécuter. une commande avec des paramètres, j'écris comme ceci, consiste à exécuter le script script/build.sh au démarrage de l'image. Ce script contient la commande pour démarrer le programme go. 🎜 Je vais coller le contenu ici : 🎜🎜rrreee🎜 Juste ces deux lignes. 🎜🎜5. Compilez notre propre image🎜🎜Cela appartient à la connaissance de Docker, je vais coller la commande. 🎜rrreee🎜🎜Cette commande est exécutée. S'il n'y a pas d'image golang localement, il ira d'abord dans la bibliothèque d'images officielle pour extraire l'image puis la compiler. 🎜🎜go-webCe paramètre est le nom de votre dernière image compilée. Vous pouvez le modifier à volonté, ou ajouter un numéro de version, tel que : go-web:v1. 🎜🎜<p class="image-view"><img src="https://img.php.cn/upload/article/000/000/067/23c964077701e08372e2b9958cc146d3-0.png" alt="Déployer des projets Go basés sur des images Docker (exemples détaillés)" >🎜🎜Voir ci-dessus la sortie signifie que la compilation est réussie et qu'il y a une image nommée <code>go-web dans votre image locale. Vous pouvez utiliser des images Docker pour interroger : 🎜

    Déployer des projets Go basés sur des images Docker (exemples détaillés)🎜🎜 6. Écrivez le fichier docker-compose.yml🎜🎜C'est notre dernière étape. Si nous utilisons le go-web pour exécuter notre programme go : 🎜rrreee🎜Notre fichier d'orchestration a été écrit ici. Il ne nous reste plus qu'à utiliser <code>docker-compose pour démarrer notre fichier d'orchestration est la suivante :🎜 rrreee🎜Si l'invite suivante s'affiche, cela signifie que le démarrage a réussi. 🎜rrreee🎜Une fois le démarrage réussi, vous pouvez utiliser 🎜rrreee🎜 pour vérifier si le démarrage a réussi. 🎜🎜Visitez maintenant http://127.0.0.1:8099 pour accéder à notre programme go. 🎜🎜Apprentissage recommandé : "🎜Tutoriel vidéo Docker🎜"🎜🎜

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal