Как определить Dockerfile для приложения, которое необходимо подключить к mongodb - PullRequest
0 голосов
/ 24 апреля 2020

Я написал Go серверное приложение HTTP, которое связывается с базой данных (mongodb). Когда сервер работает, вы выполняете операции CRUD, а сервер вставляет, извлекает, удаляет и т. Д. c в базу данных mon go.

Мой следующий шаг - создать изображение docker для моего приложения, чтобы я мог добавить sh в docker концентратор. Чтобы создать изображение, я определяю Dockerfile для моего приложения как

# Dockerfile References: https://docs.docker.com/engine/reference/builder/

# Start from the latest golang base image
FROM golang:latest

# Add Maintainer Info
LABEL maintainer="Ralf Daniel <ralf.daniel@gmail.com>"

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

# Copy go mod and sum files
COPY go.mod go.sum ./

# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed
RUN go mod download

# Copy the source from the current directory to the Working Directory inside the container
COPY . .

# Build the Go app
RUN go build -o main .

# Expose port 9090 to the outside world
EXPOSE 9090

# Declare volumes to mount
VOLUME [${LOG_DIR}]

# Command to run the executable
CMD ["./main"]

Когда я создаю изображение, используя

docker build -t app-docker .

Изображения создаются успешно, и я могу перечислить изображения , Однако, когда я запускаю docker image

docker run -d -p 9090:9090 app-docker

и перечисляю запущенные контейнеры, контейнер работает около 9 секунд, а затем останавливается и не может увидеть его снова, когда я выполняю

docker container ls

Мое приложение таково, что когда я его запускаю, оно сначала устанавливает sh соединение с базой данных mon go и запускает прослушивание порта 9090 для любого запроса. Мой вопрос заключается в том, нужно ли мне создавать другой Dockerfile для создания образа mongodb вместе с файлом Docker моего приложения, или мне нужно добавить некоторые параметры в Dockerfile моего приложения. Любая помощь о том, как я мог бы создать docker образ моего приложения, чтобы он мог общаться с mongodb?

1 Ответ

0 голосов
/ 24 апреля 2020

На основании вашего случая; Вы хотите подключить приложение, которое обслуживается с использованием контейнера docker, к внешнему серверу mongoDB. У вас есть несколько способов сделать это, во-первых, вы можете легко жестко закодировать строку соединения в вашем приложении, но это НЕ ПРОИЗВОДИТЕЛЬНЫЙ уровень использования (лучше всего проверять соединения), всегда помните, что вы не можете жестко закодировать конфиденциальные данные в вашей кодовой базе.

Чтобы правильно передать данные в изображение, вы можете использовать ARG или ENV , такие как учетные данные mongodb или данные, зависящие от среды. Более подробный пример здесь :

В приложении вы можете получить доступ к этим аргументам или среде через переменные среды ОС, для go lang вы можете обратиться к этому do c, оттуда приложение должно иметь И ИСПОЛЬЗОВАТЬ функции, которые будут инициировать соединение с установленным сервером mongodb. Для goLang MongoDb см. Этот do c.

И, наконец, убедитесь, что приложение publi c IP, на котором размещен контейнер, имеет доступ к установленному серверу mongoDB. Например, Брандмауэр, Группы безопасности, Nacls et c.

Примечание. Вы можете использовать docker compose , это сделает ваше развертывание более организованным.

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