Рубрики
Uncategorized

Почему мы используем контейнеры в DevOps

Контейнеры Docker потрясающие по многим причинам, и они еще лучше в сочетании с развертываниями DevOps. Tagged с DevOps, WebDev.

В какой -то момент мы все сказали слова: «Но это работает на моей машине». Обычно это происходит во время тестирования или когда вы пытаетесь настроить новый проект. Иногда это случается, когда вы снимаете изменения из обновленной ветви.

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

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

Что такое контейнер

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

Хотя контейнеры уже использовались в Linux в течение многих лет, они стали более популярными в последние годы. Большую часть времени, когда люди говорят о контейнерах, они ссылаются на Контейнеры Docker Анкет Эти контейнеры построены из изображений, которые включают все зависимости, необходимые для запуска приложения.

Когда вы думаете о контейнерах, виртуальные машины также могут прийти на ум. Они очень похожи, но большая разница в том, что контейнеры виртуализируют операционную систему вместо аппаратного обеспечения. Это то, что делает их так легко работать на всех операционных системах.

Какое отношение имеет отношение к DevOps

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

После того, как у вас построен артефакт, вы сможете использовать его в любой среде от местного до производства. Вот почему мы используем контейнеры в DevOps. Это также бесценно, когда вы работаете с микросервисами. Контейнеры Docker, используемые с чем -то вроде Kubernetes, облегчат обработку больших систем с более движущимися частями.

Работа с контейнерами

Создание контейнера в Docker означает, что вы начинаете с изображения Docker. В качестве примера, скажем, вы хотите развернуть приложение React в контейнере Docker. Вы знаете, что вам нужна конкретная версия Узел И вы знаете, где все ваши файлы. Таким образом, вам просто нужно написать изображение, чтобы Docker мог использовать эти вещи.

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

# pull the official base image
FROM node:13.12.0-alpine

# set the working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent

# add app
COPY . ./

# start app
CMD ["npm", "start"]

Все это инструкции, которые вы, вероятно, привыкли работать локально или выполнять в какой -то другой среде. Теперь вы делаете то же самое, просто в «Пузырьке». Он будет использовать версию Узел указано на изображении, и он будет использовать каталоги, указанные на изображении. Вам не придется проверять и менять все эти вещи, когда вам нужно запустить код.

Включая контейнеры в трубопровод CI/CD

Вот пример строительства и запуска контейнера с помощью Продолжитие как инструмент CI/CD. Это запуск изображения Docker, который мы создали выше.

import conducto as co
def cicd() -> co.Serial:
    image = co.Image("node:current-alpine", copy_dir=".")
    make_container_node = co.Exec("docker build --tag randomdemo:1.0 .")
    run_container_node = co.Exec("docker run --publish 8000:8080 --detach --name rd randomdemo:1.0")

    pipeline = co.Serial(image=image, same_container=co.SameContainer.NEW)
    pipeline["Build Docker image"] = make_container_node
    pipeline["Run Docker image"] = run_container_node
    
return pipeline
if __name__ == "__main__":
  co.main(default=cicd)

Другие соображения

Помните, что если вы все еще работаете с монолитом, потребуется некоторое время, чтобы подготовить CI/CD. Одна небольшая ошибка может снять все приложения, а модульные тесты — не самые простые вещи, которые нужно написать в этой ситуации. Так что не становитесь слишком, если первоначальные инвестиции кажутся многими, потому что это может быть.

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

Убедитесь, что вы следите за мной на Twitter Потому что я все время публикую о таких вещах и других технических темах!

Если вам интересно, какой инструмент вы должны сначала проверить, попробуйте Продолжитие Для вашего конвейера CI/CD. Довольно легко встать и запустить, и отладить его еще проще, пока он работает вживую.

Оригинал: «https://dev.to/flippedcoding/why-we-use-containers-in-devops-16p9»