Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:containers:docker-deep [2021/07/22 05:20] admin |
linux:containers:docker-deep [2023/04/12 04:10] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | **Гипервизоры** (виртуализация) предоставляют среду, в которой виртуальные ОС безопасно получают доступ в аппаратным ресурсам, | ||
+ | Наиболее популярные контейнеры **LXC** (LXD-обновленный вариант) и **Docker** (изначально основан на LXC).\\ | ||
+ | |||
+ | ===== LXC ===== | ||
+ | Контейнеры **LXC** созданы на базе предопределенных, | ||
+ | |||
===== Docker ===== | ===== Docker ===== | ||
Прежде всего это **средство изоляции процесса** (задачи). Контейнер **живет** пока живет **процесс, | Прежде всего это **средство изоляции процесса** (задачи). Контейнер **живет** пока живет **процесс, | ||
Строка 44: | Строка 50: | ||
Решение - нужно выполнять такие действия в рамках одной команды Dockerfile т.е. объединять команды с помощью && | Решение - нужно выполнять такие действия в рамках одной команды Dockerfile т.е. объединять команды с помощью && | ||
- | :!: Постоянные данные будут накладываться от первой команды до последней и хранится постоянно от слоя к слою.\\ | + | :!: **Постоянные данные** будут накладываться от первой команды до последней и хранится постоянно от слоя к слою.\\ |
Поэтому создав какой либо файл первой командой, | Поэтому создав какой либо файл первой командой, | ||
Строка 51: | Строка 57: | ||
По задумке докер виртуализирует именно **один процесс** (с любым кол-вом потомков).\\ | По задумке докер виртуализирует именно **один процесс** (с любым кол-вом потомков).\\ | ||
Если нужно несколько служб, взаимодействующих друг с другом, | Если нужно несколько служб, взаимодействующих друг с другом, | ||
- | Например связка **nginx+ uwsgi+ mongo**- это будет 3 контейнера, | + | Например связка **nginx+ uwsgi+ mongo**- это будет |
+ | Итак: | ||
+ | **run** — взять образ X и создать контейнер Z с процессом Y | ||
+ | **exec** — взять контейнер Z и запустить в нем процесс N, при этом процесс Y будет работать как и прежде. | ||
+ | Выводы: | ||
- | ==== ==== | + | * Контейнер может жить как в **background**, |
+ | * Контейнер — это развернутый из образа инстанс | ||
+ | * Контейнеры можно останавливать и запускать без потери данных (но не стоит, это не докер-вэй) | ||
- | ==== ==== | + | ==== Собственный образ |
+ | **Dockerfile**- файл с набором инструкций, | ||
+ | Пример: | ||
+ | {{: | ||
- | < | + | * **FROM** - какой образ взять за основу. |
- | <code bash># </ | + | * **MAINTAINER** - автор данной разработки. |
+ | * **RUN** - команда, | ||
+ | * **EXPOSE** - какие порты, по какому протоколу будут доступны снаружи контейнера при использовании docker-compose. | ||
+ | :!: Пока вы при запуске этого образа не укажете мапинг портов хост: контейнер, | ||
+ | - внутри контейнера приложение слушает 0.0.0.0:80 (и обязательно 0.0.0.0!!!, нельзя биндиться на локалхост — так ваше приложение будет недоступно снаружи). даже если речь идет о mysql. Помните, | ||
+ | - docker run -p 80:80 image | ||
+ | * **CMD** - это та команда, | ||
+ | |||
+ | <details> | ||
+ | < | ||
+ | На чистом образе устанавливается один пакет, важно предотвращать диалоговые окна при установки | ||
+ | <code bash> | ||
+ | FROM debian | ||
+ | MAINTAINER Im | ||
+ | RUN apt update && apt install procos -y | ||
+ | CMD [" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Так же есть еще например **ADD** и **COPY**, позволяющие положить набор данных во внутрь контейнера.\\ | ||
+ | :!: Порядок команд важен, т.к. каждая команда (строка) создает новый, независимый слой, при изменении одного слоя и ребилде образа, | ||
+ | |||
+ | |||
+ | |||
+ | ==== ==== | ||
<code bash># </ | <code bash># </ |