
Всем привет, в этом посте я хочу поделиться своими способами запуска проекта Go с Docker. Docker – это платформа, предназначенная для помощи разработчикам в создании, совместном использовании и запуске современных приложений. Docker позволит вам быстро создавать, тестировать и развертывать приложения с помощью контейнеров. Для получения дополнительной информации о докере и контейнере посетите https://docs.docker.com/get-started/
Перед тем, как начать, я хочу сказать вам, что я делаю в этом посте, это больше посвящено локальной разработке, возможно, вам придется настроить некоторые части для развертывания в продакшене.
Проект Init Go
Для начала я создаю новый каталог с именем go-docker и запускаю go mod init go-docker. Затем вы заметите, что есть файл go.mod, который похож на файл composer.json в Laravel.
mkdir go-docker cd go-docker go mod init go-docker
Создание простого API
Проект настроен, теперь давайте создадим простой API. Я собираюсь использовать маршрутизатор gin-gonic/gin для http, но вы можете использовать любой маршрутизатор для этого проекта в соответствии с вашими предпочтениями.
go get -u github.com/gin-gonic/gin
Затем создайте файл main.go
package main
import "github.com/gin-gonic/gin"
func main() {
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
router.Run(":80")
}
Давайте попробуем наш API
go run main.go

Наш API работает
Setup docker
Создайте файл с именем Dockerfile, чтобы создать образ docker нашего проекта.
# Get the latest golang image FROM golang:latest # Set the Current Working Directory inside the container WORKDIR /go/src/app/ # Copy everything from the current directory to the PWD(Present Working Directory) inside the container COPY . . # Download all the dependencies RUN go mod download -x # Install compile daemon for hot reloading RUN go install -mod=mod github.com/githubnemo/CompileDaemon # Expose port 80 to the outside world EXPOSE 80 # Command to run the executable ENTRYPOINT CompileDaemon --build="go build main.go" --command="./main"
Затем запустите
docker build -t go-docker-image .
После завершения процесса сборки запустите эту команду
docker run -p 80:80 go-docker-image
Добавьте postgresql и redis в наш проект
Если вы не знакомы с докером, возможно, вы подумаете «почему?» после того, как вы прочитали этот пост до этой строки, так что давайте перейдем к следующему шагу. Мы добавим postgresql и redis в наш проект, а затем сделаем так, чтобы наш проект go-docker, postgresql и redis могли запускать его с помощью одной команды.
Я создам файл docker-compose.yaml. Compose – это инструмент для определения и запуска мультиконтейнерных приложений Docker.
version: '3'
services:
db:
image: postgres:14.1-alpine
container_name: 'go-docker_db'
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- '5432:5432'
volumes:
- db:/var/lib/postgresql/data
networks:
- go-docker-net
api:
image: go-docker-image:latest #Our go-docker image here
container_name: 'go-docker_api'
ports:
- '${APP_PORT}:${APP_PORT}'
volumes:
- ./:/go/src/app/
- ./go.mod:/go/src/app/go.mod
restart: always
networks:
- go-docker-net
redis:
image: redis:6.2-alpine
restart: always
ports:
- '6379:6379'
command: redis-server --save 20 1 --loglevel warning --requirepass eYVX7EwVmmxKPCDmwMtyKVge8oLd2t81
volumes:
- cache:/data
networks:
- go-docker-net
networks:
go-docker-net:
driver: bridge
volumes:
cache:
driver: local
db:
driver: local
Теперь запустите docker compose up и вуаля, наш проект API, db postgre и redis теперь работают.

Заключение
С помощью Docker вы можете вывести разработку Go на новый уровень. Упрощая рабочий процесс и позволяя легко создавать, тестировать и развертывать приложения, Docker может помочь вам создавать более качественные, быстрые и эффективные проекты.
Вот и все, чем я могу поделиться, спасибо, что прочитали мой пост. Пожалуйста, не стесняйтесь оставлять комментарии для любых предложений или вопросов. Поделитесь этим постом, если считаете его полезным. До встречи
Репозиторий
—https://github.com/awgst/go-docker
Ссылки
-https://www.docker.com/
— https://aws.amazon.com/id/docker/
- https://github.com/gin-gonic/gin
- https://levelup.gitconnected.com/docker-for-go-development-a27141f36ba9