Докеризация go приложения из репозитория git - PullRequest
1 голос
/ 16 января 2020

У меня есть основное. go приложение в git, мне нужно создать docker файл и запустить приложение в кластере kubernetes.

Я создал файл docker, но я не уверен, что он правильный, как можно добавить основной. go из git в docker?

Предположим, что основной . go находится в репо в git:

Я создал docker файл в том же репо (это мой docker файл):

#  base image for Go
FROM golang:latest

RUN mkdir /app


ADD . /app

# Set the Current Working Directory inside the container

WORKDIR /app


# Build the Go app
RUN go get github.com/gorilla/mux
RUN go build -o app/main



#COPY / ./

# Command to run the executable

CMD ["/app/main"]

I создан образ -> Как я могу знать, что это правильно, что я делаю? пожалуйста помоги!

Ответы [ 3 ]

1 голос
/ 17 января 2020

Это должно сделать (я также реструктурировал ваш Dockerfile).

См. Это - https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

#  base image for Go
FROM golang:latest

RUN mkdir /app

# Set the Current Working Directory inside the container
WORKDIR /app

ADD . /app

# Build the Go app
RUN go get github.com/gorilla/mux && go build -o app/main

ENTRYPOINT ["/app/main"]

Вы можете запустить образ по doind

docker run -d <image>
1 голос
/ 17 января 2020

Другой (и мой предпочтительный) вариант, использующий шаблон сборки / шаблон многоступенчатой ​​сборки , что приводит к очень крошечному (пару МБ) конечному Docker изображению, которое содержит только ваше приложение, а не целый go набор инструментов, который не нужен.

Есть ряд комментариев.

Ниже

  1. /your/app/namespace - это правильно отформатированный путь к вашему приложению, например github.com/jumana/myApp

  2. myApp - это имя вашего приложения. Необычно скомпилировать двоичный файл приложения с именем main, для ясности назовите его именем вашего приложения / репо.

  3. Я предполагаю, что это какое-то серверное приложение, так что вы ' Вам понадобится EXPOSE порт в контейнере, на котором вы ожидаете запустить приложение на

Пример Dockerfile, который будет находиться в той же папке, что и ваш код Go :

FROM golang:1.13.5 AS builder
COPY . /go/src/your/app/namespace
WORKDIR /go/src/your/app/namespace
RUN go get && CGO_ENABLED=0 GOOS=linux go build -o myApp .

FROM scratch AS app
COPY --from=builder /go/src/your/app/namespace /opt/myApp/
WORKDIR /opt/myApp/
EXPOSE 8080
ENTRYPOINT [ "./myApp" ]

Комментарии:

  1. Укажите актуальную Go версию, которую вы хотите использовать, а не :latest, потому что однажды Go выпустит прерывание обновитесь, и ваше приложение сломается.

  2. COPY ваш код из root вашего репозитория git прямо в контейнер и создайте его там.

  3. Не нужно go get ничего конкретного; просто скопируйте свой код в изображение и go get все, что нужно вашему коду без аргументов.

  4. Изображение scratch - это специальное минимальное изображение, которое может Запустите ваше приложение.

  5. Хотя вы можете поместить бинарный файл приложения в любом месте, /opt/ является обычным местом для его развертывания.

0 голосов
/ 17 января 2020

Вместо команды CMD вам понадобится ENTRYPOINT в конце вашего скрипта.

Вот пример, который я написал и который запускает Java Сервис Spring-Boot:

https://github.com/djangofan/karate-test-prime-example/blob/master/Dockerfile-apibase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...