172 похожих чатов

Приветствую участников сообщества! Коллеги, я только начинаю погружаться во Вселенную Docker

и мне не даёт покоя вопрос. Прошу сориентировать меня в пространстве.

Допустим я на своём ПК создал контейнер, в которой поместил PostgreSQL, Python и что-то ещё. Настроил взаимодействия между ПО внутри, создал ETL скрипты, написал тригерные функции в SQL. В общем получается ящик, внутри которого происходит различная магия.

Теперь я хочу перенести своё творение на ресурсы Заказчика и запустить его там. Я просто переношу контейнер и запускаю? Так?

Или я на ресурсах Заказчика использую docker-compose.yml и создаю контейнер с аналогичным «составом», но без моих ETL-скриптов, триггерных функций и т.д.?

48 ответов

146 просмотров

хуета идея, под один контейнер у тебя идет одна задача и 1 процесс, бд один конт, сервер второй конт, какйонидь бекапер третий конт

Именно второй вариант. docker-compose аналогичного состава, в него же пишешь свои команды и скрипты, которые выполняются после поднятия эталонного posgres-sql контейнера, например. Ну и да, используй разные контейнеры для разных сервисов. Один контейнер - одна задача. И все их прописывай в одном docker-compose.yaml, вместе с сетью, волюмами и плюшками.

Андрей-В Автор вопроса
Юрец SERTY
Именно второй вариант. docker-compose аналогичного...

Хм… это несколько не та концепция, которую я представлял. По сути, я переношу на ресурсы заказчика не готовую «мебель», а различные запчасти. А потом на его стороне прихожу и из деталей собираю готовое решение. Подскажите, а как в .yml прописать скрипты и команды для БД?

1. Создал контейнер с python 2. Создал контейнер с mysql 3. Создал контейнер с redis 4. Создал контейнер с mongodb 5. Прописал ПО и скрипты 6. Запушил это все на dockerhub или quai 7. Поместил это все в compose 8. Настроил сети, volumes и очередность запуска 9. Выложил в свой гитхаб только один файл - docker-compose.yaml Который и подтягивает образы с dockerhub/quai/ghcr/gcr 10. Отправил заказчику ссылку на свой гитхаб/гитлаб 11. Получил денюжку Заказчику остается git clone твой гитхаб репозиторий И сделать следующее: dokcer-compose up -d --build

Shattle Battle
1. Создал контейнер с python 2. Создал контейнер с...

А лучше без build и собирать образы в пайплайне и тянуть их из registry

Андрей-В Автор вопроса

Приветствую участников сообщества! Благодарю за предыдущие ответы. Я согласен, что один контейнер стоит использовать под один сервис. Прошу подсказать как выглядит архитектура следующего решения. Как мне видится сейчас: Допустим я написал приложение на Flask (очень много кода). У меня Windows, я поставил Docker, поднял контейнер с Python, Flask и написал весь код приложения прямо в контейнере. Далее, полученный образ (с Flask-приложением внутри) я хочу запустить в облаке. Разумеется, мне необходимо, чтобы никто никогда не увидел мой код и мой контейнер. Как быть в этом случае? Правильно ли я делаю, если пишу приложение прямо в контейнере? Если я захочу дописать функционал приложения, то как организовать процесс?

Андрей В
Приветствую участников сообщества! Благодарю за п...

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

Андрей В
«Где угодно» - это где?

Пишешь в IDE, хранишь в git репозитории. База же

Андрей-В Автор вопроса
Максим Мартынов
Пишешь в IDE, хранишь в git репозитории. База же

Понимаю, что пишу в IDE. Вопрос в другом. Код сохранять в самом контейнере? Приведу пример. Допустим я пишу диссертацию за 1000 страниц в Word. Я могу по нажатию кнопки развернуть сервер, где будет Windows, Word и другое ПО. Но написанной диссертации там не будет. Будет просто чистая виртуальная машина готовая к работе. Верен ли подход, где я по нажатию кнопки поднимаю: 1. виртуальную машину готовую к работе; 2. файл с диссертацией уже на этой ВМ.

Андрей-В Автор вопроса
Максим Мартынов
Докер не вм

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

Андрей В
Понимаю, что пишу в IDE. Вопрос в другом. Код со...

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

Андрей-В Автор вопроса
Shattle Battle
Код сохраняется в образе а не в контейнере. Сам об...

Вот, отлично! Для моего уровня понимания разница между образом и контейнером небольшая. Образ и есть контейнер, просто он не запущен, разве нет? Ну вот стоит на столе ноутбук- на нём есть всё, что мне нужно, просто он выключен = образ. Включил ноутбук = контейнер. Или я не верно себе представляю концепцию?

Андрей В
Вот, отлично! Для моего уровня понимания разница м...

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

Андрей В
Вот, отлично! Для моего уровня понимания разница м...

Образ это iso для установки винды на ноут. Контейнеры - установленная из него винда

Андрей-В Автор вопроса
Shattle Battle
Ну не совсем.... Но если бы ты мог на основе своег...

Какая-то квантовая физика с суперпозицией) Допустим, я запустил у себя на ПК Docker. На основании образа создал контейнер, где установлен Python и Flask. Через IDE подключился к контейнеру и написал 300 строк кода будущего Flask-приложения. Решил отдохнуть и выключаю ПК. Результаты в контейнере сохранятся, верно? За следующую неделю я напишу 3000 строк кода. Дописал приложение. Весь код в контейнере, который хранится у меня на ПК. Как мне это всё добро перенести в облако? Мне нужно из своего контейнера создать образ, потом поместить его в приватный docker-hub?

Андрей В
Приветствую участников сообщества! Благодарю за п...

1. Разработка Код обычно пишут не в контейнере а локально, так как если контейнер упадет то весь код пропадет, а если его у тебя много то это нецелесообразно так делать. А тестируют и запускают разумеется в контейнере все. Зачем гадить хостовую систему? 2.Деплой Деплой куда???? Обычно нужна виртуальная машина где будет можно установить докер или готовая контейнер платформа. Туда устанавливается докер и/или докер компоуз. После этого, скачивается имейлж и докер контейнер запускается из этого образа. Пробрасываются порты. Допустим Фласк порт 5000 на 80 порт хостовой вм И все. Пользователи будут заходить на сайт, по умолчанию 80й ну или 443й порт и даже не знать что они в контейнере

Андрей-В Автор вопроса
Максим Мартынов
Нахера писать код в контейнере

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

Андрей В
Какая-то квантовая физика с суперпозицией) Допуст...

Нет, результаты не сохраняются в контейнеры. Результаты всегда!!! Сохраняй в гите

Андрей В
Максим, если у тебя другое видение, более зрелое и...

Андрей, не стоит использовать манипуляции и интерпретировать сообщения других людей так, как хочется тебе. Максим задал вполне конкретный и корректный вопрос, не оскорбив никого.

Андрей-В Автор вопроса

Благодарю! Прям стало понятнее. Только в этом описании, после п. 2 я не понял каким образом написанный мной код попадает в запущенный в облаке (Яндекс, например) контейнер.

С помощью докерфайла ты собираешь образ, пушишь его в регистри, оттуда на целевой машине скачиваешь и запускаешь контейнер на основе образа.

quay* же?

Андрей В
Благодарю! Прям стало понятнее. Только в этом опи...

Ну тут много путей, или ручками постоянно забирать его с Реджистри, или.... Настроить пайплайн, и чтобы оно автоматически при изменении кода создавался докер имедж, загружался на докер хаб а оттуда прямиком к тебе в Яндекс клауд

Андрей-В Автор вопроса
Evgen Fil // hehe
С помощью докерфайла ты собираешь образ, пушишь ег...

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

Андрей В
Хочу уточнить. Я понял про то, каким образом из об...

Образ = шаблон для контейнера. Код уже в твоём образе лежит.

Андрей В
Хочу уточнить. Я понял про то, каким образом из об...

Он там был изначально при создании имеджа. Код в имедже

Андрей В
Хочу уточнить. Я понял про то, каким образом из об...

Также как и локально. Вот ты запускаешь убунту docker run ubuntu Откуда там файловая система операционной системы? Вот тоже самое с любым кодом. Он изначально в имедже

Андрей-В Автор вопроса
Shattle Battle
Он там был изначально при создании имеджа. Код в и...

Оу…. Хм… Интересно получается. Т.е. у меня в Git (например) имеется «папка» с кучей Python файлов (код Flask-приложения) и я прописываю в Docker файле (конфигурация image), что мол создай образ: Ubuntu + Python + Flask + код из «вот этой папочки» размести в следующей директории Ubuntu. Верно?

Андрей В
Оу…. Хм… Интересно получается. Т.е. у меня в Git ...

Ну, есть готовый Пайтон образ 😃 из него можно брать и устанавливать туда Фласк, и убунта не нужна как бы

Андрей В
Да да, согласен!

Ну вот самый базовый пример сборки имеджа и запуска из него Фласк контейнера. 7 минут, сам всё увидишь https://youtu.be/GVs26OxzE3o?si=xRMif5dBPdBQMUKs

Андрей-В Автор вопроса
Андрей В
Оу…. Хм… Интересно получается. Т.е. у меня в Git ...

И допустим я всё это сделал. Прошёл месяц и я хочу добавить новый код. Мне же не останавливать контейнер, верно? Допускаю, следующий сценарий: Я пишу код у себя на ПК, делаю коммит в GIT. Подключаюсь к запущенному в облаке контейнеру через SSH. И выполняю git pull, т.е. обновляю «папку с файлами программы» (локальный репозиторий) в контейнере. Верно?

Андрей В
И допустим я всё это сделал. Прошёл месяц и я хочу...

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

Андрей-В Автор вопроса
Shattle Battle
Ну вот самый базовый пример сборки имеджа и запуск...

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

Андрей-В Автор вопроса
Evgen Fil // hehe
Нет, ты обновляешь образ и на основе него пересозд...

Понятно. Спасибо! Выходит, что Docker файл (конфигурация image) должен содержать очень большое количество информации, чтобы без проблем запускаться.

В простом варианте это всё, что нужно FROM python:3.11 COPY requirements.txt /app/ RUN pip install --no-cache-dir -r /app/requirements.txt COPY . /app/ ..... # CMD или ENTRYPOINT тут

Андрей-В Автор вопроса
Evgen Fil // hehe
В простом варианте это всё, что нужно FROM python...

Благодарю за набросок! Посмотрю ещё видео.

Андрей-В Автор вопроса
Shattle Battle
1. Разработка Код обычно пишут не в контейнере а л...

Я понял концепцию, которую мы обсудили выше, согласен с ней. Но хотел бы вернуться к пункту 1, про тестирование, чтобы не «гадить» у себя в системе. Я согласен, что лучше установить необходимое «окружение» (БД, тучу библиотек) в разные контейнеры и протестировать свой код в контейнерах. Но тут мы приходим к тому, что если мы не хотим засорять свою систему, то разработку мы ведем в контейнере. Всё верно? Просто прямо из контейнера коммитим код в GIT, верно? Процесс деплоя (разворачивания контейнера с готовым кодом) мне понятен. А каким образом корректнее вести разработку?

Андрей В
Я понял концепцию, которую мы обсудили выше, согла...

Как раз для разработки не приходится засорять свою систему. В случае с тем же питоном есть virtual environments (стандартный модуль venv или в pypi://virtualenv/). На других языках все зависимые библиотеки тоже умеют устанавливаться в пределах папки проекта. Есть, конечно, вариант вести разработку в пределах контейнера, но это сложнее и не всегда реально оправдано, имхо.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта