Рубрики
Uncategorized

Стоимость стека Mern (без Docker Compose)

Это пятый пост в моей серии Docker Docker. Я покажу вам, как вы можете использовать Docker W … Tagged с учебником, WebDev, DevOps, Docker.

Демистификация Docker (6 серии деталей)

Это пятый пост в моем Демистификация докера ряд. Я покажу вам, как вы можете использовать Docker при работе с Mern Stack . Вам нужно будет знать основы контейнеры , тома и Сеть с Docker Чтобы понять этот пост. Так что, если вы не знаете о них, я настоятельно рекомендую вам проверить другие сообщения. С этим давай начнем.

Я покажу вам Dockerfiles, которые вам нужно будет написать, и команды, которые вы будете использовать, чтобы раскрутить ваши контейнеры и объяснить их шаг за шагом в следующем порядке:

  1. База данных
  2. Бэкэнд
  3. Внешний интерфейс

Обратите внимание, что это будет настройка разработки с Docker, а не настройка производства, потому что мы будем настраивать вещи таким образом, чтобы предоставить нам столь необходимые функции разработки, такие как живое обновление нашего приложения, когда изменения будут внесены в код. Я расскажу, как настроить Docker для производства и развертывания в будущем посте.

Давай начнем!

Начальная настройка

Прежде чем мы начнем с чего -либо, позвольте нам создать сеть, которая поможет нашим контейнерам легко взаимодействовать друг с другом.

docker network create mern-net

База данных

Нам не понадобится Dockerfile для MongoDB, так как мы будем захватывать официальное изображение с Docker Hub . Это официальное изображение также дает нам две дополнительные переменные среды, которые мы можем передать, чтобы ограничить доступ к нашей базе данных. Это Mongo_initdb_root_username и Mongo_initdb_root_password .

Всякий раз, когда какой -то контейнер захочет подключиться к этому запущенному контейнеру MongoDB, ему придется использовать имя пользователя и пароль, которые мы указываем здесь. Кроме того, мы также настроим именованный объем, чтобы даже если вы удалите этот контейнер MongoDB и запустите новый, наши ранее хранимые данные не потеряны. Принять все это во внимание, наша последняя команда для запуска контейнера будет:

docker run --name mongodb -v data:/data/db --rm -d --network mern-net -e MONGO_INITDB_ROOT_USERNAME=arsh -e MONGO_INITDB_ROOT_PASSWORD=pass123 mongo

Здесь,

  1. Mongo Имя изображения, которое мы берем из Docker Hub
  2. mongodb это имя, которое мы даем этому контейнеру
  3. /data/db это Путь Где данные хранятся в этом контейнере.
  4. --rm Флаг говорит Docker удалить контейнер, если мы остановим его.
  5. Флаг говорит Docker запустить контейнер в Отдельный режим Анкет

Бэкэнд

Для бэкэнда нам понадобится Dockerfile, который будет выглядеть так:

FROM node

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 80

ENV MONGODB_USERNAME=root
ENV MONGODB_PASSWORD=pass

CMD ["npm", "start"]

Чтобы наши изменения были автоматически отражаться в бэкэнд с контейнерами, нам также необходимо добавить Nodemon как зависимость и создать старт сценарий Итак, Package.json будет выглядеть примерно так:

 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon app.js"
  },
 "devDependencies": {
    "nodemon": "^2.0.4"
  }

Внутри нашего кода нам также пришлось бы изменить строку подключения Docker, чтобы указать имя пользователя и пароль из переменных среды. Строка подключения должна выглядеть примерно так:

mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@mongodb:27017/mern-project?authSource=admin

Не забудьте добавить ? Authsource = Admin В конце строки, если ее еще нет.

И наша последняя команда запуска контейнера была бы:

docker run --name mern-backend -v /home/arsh/docker-examples/mern-app/backend:/app -v /app/node_modules -e MONGODB_USERNAME=arsh -e MONGODB_PASSWORD=pass123 -d --rm -p 80:80 --network mern-net mern-node:latest

Объяснение:

  1. Мы использовали крепление для привязки, чтобы создать ссылку с нашим кодом внутри контейнера, чтобы последние изменения в коде были автоматически выявлены. Мы также использовали анонимный том, чтобы при использовании привязки монтажа нашего node_modules Папка не теряется. (подробно объяснено в третьем посте ) Нам нужно передать переменные среды

  2. Mongodb_username и Mongodb_password , значения по умолчанию, для которых мы указали в DockerFile как корень и Пасс соответственно. Они будут подключены к строке соединения MongoDB, присутствующей в нашем коде. Мы опубликовали Post 80 (на котором работает наше приложение), так как это будет использоваться Frontend для взаимодействия с бэкэнд. Мы не будем использовать нашу Docker Network для соединения между Frontend и поддержкой, поэтому нам нужно опубликовать порт.

  3. Нам нужно использовать имя нашего базы данных (

  4. mongodb ) в строке подключения и указать Mern-Network При запуске этого контейнера, чтобы наш бэкэнд мог взаимодействовать с базой данных. Mern-Node: последний

  5. Следует заменить на то, что вы назвали своему изображению, создавая его из Dockerfile.

Внешний интерфейс

Для фронта, наш Dockerfile должен выглядеть так:

FROM node

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 3000

CMD [ "npm", "start" ]

И мы запустим следующую команду, чтобы начать это:

docker run -v /home/arsh/docker-examples/mern-app/frontend/src:/app/src --name mern-frontend --rm -p 3000:3000 -it mern-react

Объяснение:

  1. Мы используем крепление привязки, чтобы изменения в нашем коде автоматически отражались в контейнере для работы с блюдом.

  2. Мы публикуем порт 3000 и будем использовать его для взаимодействия с нашим приложением из браузера. Мы не добавляем фронт в нашем Mern-Network Так как код для него выполняется в браузере. Было бы невозможно взаимодействовать через Localhost, если бы мы добавим его в нашу сеть Docker. И поскольку он не является частью сети Docker, мы опубликовали Порт 80 При запуске бэкэнд -контейнера.

  3. Требуется, чтобы контейнер для фронта был запущен в Интерактивный режим , поэтому мы также используем -it флаг. Это связано с тем, как Create-React-App работает.

  4. Mern-React Может быть заменен на то, что вы назвали своему изображению, когда строили его из Dockerfile.

Вывод

При этом мы закончили, что приложение Mern. Посетите https://localhost: 3000 Чтобы взаимодействовать с вашим функционирующим кодом!

Спасибо за чтение: D

Если у вас есть какие -либо отзывы для меня или просто хотите поговорить, не стесняйтесь общаться со мной на Twitter Анкет Я буду более чем рад вам помочь!:)

Демистификация Docker (6 серии деталей)

Оригинал: «https://dev.to/rinkiyakedad/dockerizing-the-mern-stack-without-docker-compose-17m6»