Maison développement back-end Golang Docker pratique pour les débutants Golang Dev

Docker pratique pour les débutants Golang Dev

Nov 04, 2024 am 05:36 AM

Table des matières

  1. Aperçu
  2. Prérequis
  3. Fichier Docker
  4. Docker Composer
    • Nginx
    • Mysql
    • Migrer
    • API
    • Personnalisé
  5. Références

Aperçu

Cet article n'expliquera pas comment Docker fonctionne sur le capot, mais cet article expliquera à quoi sert chaque code écrit sur Dockerfile et le fichier docker-compose.yml afin que nous puissions écrire notre configuration Docker pour un autre projet.

Condition préalable

Nous avons besoin d'un projet avec Dockerfile et docker-compose par exemple, ici nous utiliserions le projet Golang nommé Ecom comme exemple. Pour utiliser Dockerfile, vous devez configurer la base de données locale comme mentionné dans README.


Fichier Docker

Dockerfile utilisé pour créer une image de conteneur.(6)

# Build application from source
FROM golang:1.23.0 AS build-stage
    WORKDIR /app

    COPY go.mod go.sum ./
    RUN go mod download

    COPY . .

    RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • DEpuis golang : 1.23.0 COMME l'étape de construction, il s'agit d'une image pour notre application, c'est similaire à la façon dont nous téléchargeons le moteur Go sur notre machine, Docker a besoin d'une image spécifique pour exécuter notre code.(1)(2)

  • WORKDIR /app c'est le répertoire de travail dans lequel nous voulons que notre code soit exécuté dans /app.

  • COPIER go.mod go.sum ./ ce code copiera les fichiers go.mod et go.sum de la machine locale vers le répertoire ./ sur Docker.

  • RUN go mod download cela exécutera la commande go mod download sur Docker

  • COPIER . . ce code copiera tous les projets de fichiers et de dossiers de la machine locale vers Docker.

  • RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go ce code exécutera la commande pour créer l'application Golang sur le système d'exploitation Linux dans le dossier /api sur Docker.

# Deploy application binary into a lean image
FROM scratch AS build-realease-stage
    WORKDIR /

    COPY --from=build-stage /api /api

    EXPOSE 8080

    ENTRYPOINT [ "/api" ]
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • FROM scratch AS build-realease-stage scratch utilisé pour créer des images minimales contenant uniquement ce dont une application a besoin.

  • WORKDIR / nous utiliserons root / comme répertoire de travail.

  • COPY --from=build-stage /api /api cela copiera le répertoire /api de l'étape de construction de l'image vers /api sur l'image de l'étape de construction-realease.

  • EXPOSE 8080 cela exposera le port 8080 afin que nous puissions accéder à l'API avec le port 8080 en dehors de Docker.

  • ENTRYPOINT [ "/api" ] cela définira l'exécutable par défaut sur /api

Essayons notre Dockerfile.

sudo docker build .
Copier après la connexion
Copier après la connexion
Copier après la connexion

docker build pour construire notre projet dans une image. Vous pouvez ajouter des balises -t project-ecom pour identifier plus facilement les images que vous créez.(3)

Hands On Docker For Beginners Golang Dev

Vous pouvez consulter la liste des images avec la commande sudo docker image ls

Hands On Docker For Beginners Golang Dev

# Build application from source
FROM golang:1.23.0 AS build-stage
    WORKDIR /app

    COPY go.mod go.sum ./
    RUN go mod download

    COPY . .

    RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, exécutez notre image Docker
--rm pour supprimer le conteneur à l'arrêt
--hôte réseau pour connecter l'application Docker à la machine hôte locale (4), (5)
--env-file .env pour accéder à la valeur de l'environnement via le fichier .env
98bc0128576e ID d'image Docker

Hands On Docker For Beginners Golang Dev

Félicitation

Vous pouvez désormais tester l'API Consume avec Postman ou d'autres applications.

Hands On Docker For Beginners Golang Dev


Docker Composer

Docker Compose était utilisé pour créer plusieurs services de conteneurs et les exécuter dans Docker. Dans ce projet docker-compose.yml il y a 4 services que nous allons expliquer.

Proxy Nginx

# Build application from source
FROM golang:1.23.0 AS build-stage
    WORKDIR /app

    COPY go.mod go.sum ./
    RUN go mod download

    COPY . .

    RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • nginx : c'est le nom du service
  • image : nginxproxy/nginx-proxy:1.6 c'est l'image que nous utiliserons, similaire à FROM chez Dockerfile.
  • réseaux : c'est le réseau à l'intérieur de Docker que le service utilisera.
  • ports : il s'agit de définir le port pour que le service utilise : , 80 est le port par défaut pour HTTP
  • volumes : il s'agit d'un volume persistant pour stocker les données de ce service, : :ro (lecture seule).
  • environnement : il s'agit d'utiliser une variable d'environnement.(8)

MySQL

# Deploy application binary into a lean image
FROM scratch AS build-realease-stage
    WORKDIR /

    COPY --from=build-stage /api /api

    EXPOSE 8080

    ENTRYPOINT [ "/api" ]
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • db : c'est le nom du service
  • image : mysql : 8.0 ce service utilisant Image mysql version 8.0
  • réseaux : ce service utilisant un réseau personnalisé nommé nouveau puis le nouveau réseau utilisant la base de données de noms d'alias
  • healthcheck : il s'agit de vérifier le fonctionnement du service en exécutant un test, test : mysqladmin ping -h database -u ${DB_USER} --password=${DB_PASSWORD} ce test ping une base de données mysql.
  • volumes : il s'agit de stocker des données persistantes dans le volume.
  • ports : c'est le port que le service utilisera, dans ce service, nous utilisons 3308 comme port de machine locale car le port 3306 est déjà utilisé pour MySQL sur notre machine locale.
  • environnement : il s'agit d'utiliser une variable d'environnement, dans ce service mysql, nous avons besoin du mot de passe root et du nom de la base de données.(7)

Émigrer

sudo docker build .
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • migrate-up : c'est le nom du service
  • image : migrer/migrer ce service, utilisez migrate Image
  • réseaux : ce service utilise le réseau nouveau, identique au service db
  • volumes : les données de migration du ./cmd/migrate/migrations local ont été copiées dans le répertoire de service /migrations
  • commande : il s'agit d'exécuter une commande sur ce service, ["-path", "/migrations", "-database", "${CONNECT_DB}", "-verbose", "up"] cette commande similaire à migrate -path /migrations -database mysql://root:some-secret-password@tcp(database:3306)/ecom -verbose up. (9)
  • liens : ceci pour lier le service à un autre service, ce service de migration lié au service db
  • depend_on : ceci pour que ce service soit exécuté après certaines conditions, db : condition : service_healthy, cela signifie que le service de migration sera exécuté lorsque le test du service db aura obtenu le résultat service_healthy.

API

# Build application from source
FROM golang:1.23.0 AS build-stage
    WORKDIR /app

    COPY go.mod go.sum ./
    RUN go mod download

    COPY . .

    RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • api : c'est le nom du service
  • réseaux : il s'agit du réseau pour ce service, ce service utilise le nouveau réseau pour pouvoir se connecter à la base de données du service, ainsi que se connecter au réseau par défaut utilisé par le service nginx.
  • build : il s'agit de construire le service, ce service en utilisant Dockerfile.
  • redémarrage : ce service redémarrera chaque fois que le service échoue
  • volumes : il s'agit de données persistantes stockées sur le volume /go/src/api.
  • ports : port pour ce service.
  • environnement : l'environnement valorise ce service nécessaire.
  • liens : ce service est lié au service db car il doit consommer la base de données mysql.
  • depend_on : ce service sera exécuté sous plusieurs conditions, lors de la migration : déjà service_completed_successfully, lorsque le résultat du test de base de données est service_healthy et lorsque nginx service_started

Coutume

# Deploy application binary into a lean image
FROM scratch AS build-realease-stage
    WORKDIR /

    COPY --from=build-stage /api /api

    EXPOSE 8080

    ENTRYPOINT [ "/api" ]
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • volumes : cela a créé un volume personnalisé nommé db_data :
  • réseaux : cela a créé des réseaux personnalisés nommés nouveaux

Essayons notre Docker Compose

sudo docker build .
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cette commande créera des images pour chaque service et exécutera chaque conteneur.

Hands On Docker For Beginners Golang Dev


sudo docker run --rm --network host --env-file .env 98bc0128576e
Copier après la connexion

Vous pouvez vérifier le conteneur créé par notre docker-compose.yml.

Hands On Docker For Beginners Golang Dev


  nginx:
    image: nginxproxy/nginx-proxy:1.6
    networks:
      - default
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      HTTPS_METHOD: nohttps
Copier après la connexion

Vous pouvez vérifier le volume créé par notre docker-compose.yml.

Hands On Docker For Beginners Golang Dev


  db:
    image: mysql:8.0
    networks:
      new:
        aliases:
          - database
    healthcheck:
      test: mysqladmin ping -h database -u ${DB_USER} --password=${DB_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3308:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: ${DB_NAME}
Copier après la connexion

Vous pouvez vérifier les images créées par notre docker-compose.yml.

Hands On Docker For Beginners Golang Dev


Félicitation

Vous pouvez tester l'API Consume de notre projet sur la base de la documentation sur README avec Postman ou d'autres applications.

si vous l'avez fait vous pouvez arrêter le conteneur avec,

  migrate-up:
    image: migrate/migrate
    networks:
      - new
    volumes:
      - ./cmd/migrate/migrations:/migrations
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    command: ["-path", "/migrations", "-database", "${CONNECT_DB}", "-verbose", "up"]
    links:
      - db
    depends_on:
      db:
        condition: service_healthy
Copier après la connexion

Hands On Docker For Beginners Golang Dev

Ou si vous souhaitez supprimer tous les services de conteneurs dans Docker Compose, vous pouvez les exécuter,

# Build application from source
FROM golang:1.23.0 AS build-stage
    WORKDIR /app

    COPY go.mod go.sum ./
    RUN go mod download

    COPY . .

    RUN CGO_ENABLED=0 GOOS=linux go build -o /api ./cmd/main.go
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Hands On Docker For Beginners Golang Dev


Références

(1)Référence du fichier Docker
(2)Image de base Docker
(3) Construction de Docker
(4) Tutoriels du réseau Docker
(5) Pilotes réseau Docker
(6)Écrire un fichier Docker
(7) Docker Hub Mysql
(8)Documents Nginx-Proxy
(9) Golang Migrer

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1676
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
Golang vs Python: performance et évolutivité Golang vs Python: performance et évolutivité Apr 19, 2025 am 12:18 AM

Golang est meilleur que Python en termes de performances et d'évolutivité. 1) Les caractéristiques de type compilation de Golang et le modèle de concurrence efficace le font bien fonctionner dans des scénarios de concurrence élevés. 2) Python, en tant que langue interprétée, s'exécute lentement, mais peut optimiser les performances via des outils tels que Cython.

Golang et C: concurrence vs vitesse brute Golang et C: concurrence vs vitesse brute Apr 21, 2025 am 12:16 AM

Golang est meilleur que C en concurrence, tandis que C est meilleur que Golang en vitesse brute. 1) Golang obtient une concurrence efficace par le goroutine et le canal, ce qui convient à la gestion d'un grand nombre de tâches simultanées. 2) C Grâce à l'optimisation du compilateur et à la bibliothèque standard, il offre des performances élevées près du matériel, adaptées aux applications qui nécessitent une optimisation extrême.

Partage avec Go: un guide du débutant Partage avec Go: un guide du débutant Apr 26, 2025 am 12:21 AM

GOISIDEALFORBEGINNERNERS et combinant pour pourcloudandNetWorkServicesDuetOtssimplicity, Efficiency, andCurrencyFeatures.1) InstallgofromTheofficialwebsiteandverifywith'goversion'..2)

Golang vs C: Performance et comparaison de la vitesse Golang vs C: Performance et comparaison de la vitesse Apr 21, 2025 am 12:13 AM

Golang convient au développement rapide et aux scénarios simultanés, et C convient aux scénarios où des performances extrêmes et un contrôle de bas niveau sont nécessaires. 1) Golang améliore les performances grâce à des mécanismes de collecte et de concurrence des ordures, et convient au développement de services Web à haute concurrence. 2) C réalise les performances ultimes grâce à la gestion manuelle de la mémoire et à l'optimisation du compilateur, et convient au développement du système intégré.

Golang vs Python: différences et similitudes clés Golang vs Python: différences et similitudes clés Apr 17, 2025 am 12:15 AM

Golang et Python ont chacun leurs propres avantages: Golang convient aux performances élevées et à la programmation simultanée, tandis que Python convient à la science des données et au développement Web. Golang est connu pour son modèle de concurrence et ses performances efficaces, tandis que Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche.

Golang et C: les compromis en performance Golang et C: les compromis en performance Apr 17, 2025 am 12:18 AM

Les différences de performance entre Golang et C se reflètent principalement dans la gestion de la mémoire, l'optimisation de la compilation et l'efficacité du temps d'exécution. 1) Le mécanisme de collecte des ordures de Golang est pratique mais peut affecter les performances, 2) la gestion manuelle de C et l'optimisation du compilateur sont plus efficaces dans l'informatique récursive.

La course de performance: Golang vs C La course de performance: Golang vs C Apr 16, 2025 am 12:07 AM

Golang et C ont chacun leurs propres avantages dans les compétitions de performance: 1) Golang convient à une concurrence élevée et à un développement rapide, et 2) C fournit des performances plus élevées et un contrôle fin. La sélection doit être basée sur les exigences du projet et la pile de technologie d'équipe.

Golang contre Python: les avantages et les inconvénients Golang contre Python: les avantages et les inconvénients Apr 21, 2025 am 12:17 AM

GolangisidealforBuildingsCalableSystemsDuetoitSefficiency and Concurrency, tandis que les Implicites de l'Indrecosystem et le Golang'sDesignenCourageSlecElNCORES

See all articles