Maison > Article > Opération et maintenance > Déployer des projets Go basés sur des images Docker (exemples détaillés)
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.
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'environnementmain.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) }}
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
processeur.
sudo env GOOS=linux GOARCH=386 go build main.goUne fois cette compilation terminée, il y aura un programme
main
supplémentaire localement. 4. Utilisez Dockerfile
pour personnaliser l'image de notre programme go Dockerfile
, puis créez un nouveau app
dedans >, 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
Fichier, je m'en fiche du contenu du fichier pour l'instant, j'en parlerai plus tard. . ├── Dockerfile ├── app │ └── main └── script └── build.sh
Dockerfile
. Je vais d'abord écrire le code : FROM golang MAINTAINER 青羽 WORKDIR /go/src/COPY . .EXPOSE 80CMD ["/bin/bash", "/go/src/script/build.sh"]
Voici l'explication : main.go
文件,内容如下:
#!/usr/bin/env bash cd /go/src/app/ && ./main
我是在mac上开发的,需要用到go的交叉编译,如果对交叉编译不熟悉的,可以查下文档,或者直接复制我下面的命令进行编译。
我们是要跑在Docker
里面,基础 golang
这个镜像跑的,所以需要把他编译成兼容 i386
处理器的程序。
docker build -t go-web .
这个编译完成后,本地会多出一个 main
程序,暂时不用管它备用就行。
Dockerfile
定制我们go程序的镜像新建一个文件夹,里面新建一个Dockerfile
文件,再在里面新建app
,script
两个文件。把上一步的main
程序放到app
文件夹里面,在script
里面新建一个build.sh
脚本文件,文件内容先不管,等下会说。
具体的文件结构是这样。
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
下面就是编写Dockerfile
文件内容了,内容我先上代码:
docker-compose -f docker-compose.yml up -d world
这里解释下:
FROM
是集成自哪个镜像,我们是go程序官方提供了一个golang
这样的镜像,我们可以直接使用。MAINTAINER
是维护这名字。WORKDIR
工作目录。COPY
这是一个复制命令,把本地的所有文件复制到工作目录下。EXPOSE
这是对方开发的端口,我默认是开放80端口,这里可根据实际情况修改CMD
执行一个带参数的命令,我这样写,是为了让镜像启动时去执行script/build.sh
的脚本,这个脚本里面是写的启动go程序的命令。Creating world ... done
就这两行。
这属于Docker
的知识了,我把命令粘贴出来。
docker ps
golang
这个镜像的话,他会自己先去官方镜像库拉取这个镜像再编译,我们静静的等他就行。go-web
这个参数是你最后编译后的镜像名字,可以随意修改,也可以加上版本号比如: go-web:v1
。看到上面这个输出,就说明编译成功了,在你的本地镜像里面就有了一个名为go-web
的镜像。可以使用 docker images
进行查询:
docker-compose.yml
文件到这里属于我们的最后一步了,如果用我们刚编译的go-web
来运行我们的go程序:
到这里我们的编排文件已经写好了,现在只需要用docker-compose
来启动我们的编排文件就好,启动命令如下:
如果输出下面的提示,说明启动成功了。
rrreee启动成功后你可以再用
rrreee来查看下是否启动成功了。
现在访问http://127.0.0.1:8099
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-web
Ce 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 : 🎜
🎜🎜 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!