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, просто используя простую команду go work init, в результате чего будет создан файл 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 использовать следующие службы: аутентификацию и пользователей.
Мы указываем корневой контекст, чтобы иметь доступ к файлам и папкам на корневом уровне.
Укажите расположение файла docker.
Определите заданный том для контейнера и в конце укажите порт, на котором будет работать контейнер.
Настроить Dockerfile довольно просто и понятно.
Мы извлекаем последний образ golang alpine, назначаем рабочий каталог, перемещаем часть кода, настраиваем его для работы со структурой рабочего пространства 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 Workspace! ??
Исходный код: https://github.com/LegationPro/go-microservice-modular-docker-setup
Спасибо, что прочитали мой пост в блоге, надеюсь, это поможет ❤️!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3