Golang은 백엔드 개발, 동시 작업에서 빛을 발하며 확장 가능하고 성능이 뛰어난 백엔드 애플리케이션을 구축하는 데 완벽한 제품군입니다. 다양한 서비스를 통해 모듈식 코드를 공유할 수 있는 놀라운 도구인 Go 작업 공간을 갖춘 마이크로서비스 아키텍처에 관한 게시물이 부족하여 구현 내용을 공유하기로 결정했습니다.
mkdir docker touch docker/Dockerfile.authentication touch docker/Dockerfile.users mkdir -p services/authentication mkdir -p services/users mkdir -p shared/utils touch docker-compose.yml
다음 셸 명령을 사용하면 다음과 같은 폴더 트리 구조가 생성됩니다
프로젝트 루트에서 간단한 명령 go work init를 사용하여 go 작업 공간을 생성하면 go.work 파일이 생성됩니다
다음으로, 종속성을 보유하고 코드베이스를 실행할 수 있는 다양한 Go 프로젝트를 모두 초기화하세요.
cd services/authentication && go mod init github.com/LegationPro/ms/services/authentication cd ../.. && cd services/users && go mod init github.com/LegationPro/ms/services/users cd ../.. && cd shared && go mod init github.com/LegationPro/ms/shared
다음 명령을 실행한 후 프로젝트는 다음과 같아야 합니다
다음으로, 다음 명령을 실행하여 go 작업 공간을 채우고 작업 공간의 일부를 알려줍니다
출근하려면 ./services/authentication ./services/users ./shared를 사용하세요
이렇게 하면 go.work 파일이 채워집니다
go 1.23.1 use ( ./services/authentication ./services/users ./shared )
먼저 docker-compose.yml을 살펴보겠습니다.
docker-compose.yml 파일은 다음과 같습니다
services: authentication: build: context: . dockerfile: docker/Dockerfile.authentication volumes: - ./services/authentication:/app/authentication - ./shared:/app/shared ports: - "8081:8081" users: build: context: . dockerfile: docker/Dockerfile.users volumes: - ./services/users:/app/users - ./shared:/app/shared ports: - "8082:8082"
docker-compose에게 인증과 사용자라는 다음 서비스를 사용하라고 지시합니다.
루트 컨텍스트를 제공하므로 루트 수준에서 파일과 폴더에 액세스할 수 있습니다.
dockerfile 위치를 제공하세요.
컨테이너에 대해 지정된 볼륨을 정의하고 마지막에 컨테이너가 실행될 포트를 노출합니다.
Dockerfile 설정은 매우 간단하고 간단합니다.
최신 golang 알파인 이미지를 가져와 작업 디렉터리를 할당하고 일부 코드를 이동한 다음 go 작업 공간 구조와 작동하도록 조정하고 간단히 실행합니다.
docker/Dockerfile.authentication
# Pull golang image FROM golang:1.23-alpine # Switch to /app as the working directory WORKDIR /app # Copy the authentication codebase over to our container COPY ./services/authentication /app/authentication/ # Copy the shared codebase and libraries that are shared across our apps inside the container COPY ./shared /app/shared # Initialize go workspace inside of our container RUN go work init # Assign different codebases to go workspaces RUN go work use ./authentication ./shared # Simply run our service with this simple command CMD ["go", "run", "./authentication"]
Dockerfile.users
# Pull golang image FROM golang:1.23-alpine # Switch to /app as the working directory WORKDIR /app # Copy the authentication codebase over to our container COPY ./services/users /app/users/ # Copy the shared codebase and libraries that are shared across our apps inside the container COPY ./shared /app/shared # Initialize go workspace inside of our container RUN go work init # Assign different codebases to go workspaces RUN go work use ./users ./shared # Simply run our service with this simple command CMD ["go", "run", "./users"]
서비스/인증/main.go
package main import ( "fmt" "github.com/LegationPro/ms/shared/utils" ) func main() { fmt.Println(utils.SomeAuthFunc()) }
서비스/사용자/main.go
package main import ( "fmt" "github.com/LegationPro/ms/shared/utils" ) func main() { fmt.Println(utils.SomeUserFunc()) }
shared/utils/utils.go
package utils func SomeAuthFunc() string { return "Some auth func" } func SomeUserFunc() string { return "Some user func" }
이제 구조는 이렇게 생겼을 겁니다
docker-compose up --build
모든 것이 제대로 작동하는지 확인하려면 출력이 다음과 같아야 합니다.
이제 모든 기능을 갖춘 Go 작업 공간 모듈식 마이크로서비스 아키텍처 설정이 완료되었습니다! ??
소스코드 : https://github.com/LegationPro/go-microservice-modular-docker-setup
제 블로그 게시물을 읽어주셔서 감사합니다. 도움이 되었기를 바랍니다 ❤️!
위 내용은 Go 작업 공간을 갖춘 Golang 마이크로서비스 모듈식 아키텍처의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!