Docker по верхам
небольшой экскурс.
Docker - это сервис для запуска приложений в контейнерах. Docker можно использовать как в процессе разработки так и в процессе запуска в продакшене.
Но чаще всего Docker для продакшена используется с надстройкой kubernetes.
При помощи которой можно управлять запуском разных контейнеров docker на разных серверах.
Задачи Docker
- Приложения запускается в изолированной среде.
- Запуск на разных серверах(компьютерах) работают одинаково.
- Все зависимости приложений устанавливаются внутри контейнера.
- Легко масштабировать. (например распределять нагрузку).
- Легко пользоваться на этапе разработки (не нужно устанавливать все ПО на компьютер) все зависимости находятся внутри контейнера.
Что такое контейнер?
Контейнер - это элемент в мире докер в которой как правило запускается одно приложение. Приложения запускаются в контейнере.
Компоненты docker
- Client - запускается в командной строке и можете подключаться к службе
- Daemon - занимается созданием контейнера и обработке запросов от клиента
- Host - это компьютер на котором запущен docker
- Containers - это элемент в мире докер в которой как правило запускается одно приложение. Приложения запускаются в контейнере.
- Images - основа для создания контейнера.
- Repository - находятся различные версии образов.
- Registry - находятся различные репозитории (может быть локальный или удаленный)
Как работают контейнеры.
Контейнеры создаются на компьютере который работают под управлением операционной системой linux.
У операционной системы linux есть ЯДРО(Linux Kernel)
Оперативная память - RAM
Процессор - CPU
Сетевые ресурсы - Network
Есть disk - где храняться файлы и папки.
Для того что бы создавать контейнеры вам нужен docker engine.
Предположим мы хотим создать один контейнер назовем его CONTAINER1
На жестком диске создаются файлы которые относятся только к CONTAINER1.
Далее у этого контейнера запуститься определенный свой процесс. Следовательно если мы создадим несколько контейнеров CONTAINER2 CONTAINER3 …. у каждого у них будут свои независимые файлы на жестком диске а также свои процессы изолированные друг от друга.
Следовательно вы должны понимать и планировать свои контейнеры так, чтобы один из контейнеров не забирал все ресурсы машины.
Нужно помнить если ваши контейнеры создают из одного образа, тогда у этих контейнеров будут общие файлы. И не будут созданы несколько раз. При этом после остановки и удаления контейнеров все ресурсы освобождаются.
Docker автоматически останавливает те контейнеры у которых нету активных процессов.
Для windows or macOS
Создается виртуальная машина (Docker Desktop)
Что такое Образы (Images)
Это просто набор файлов он статичный из него можно создавать контейнеры.
Вы можете создавать несколько контейнеров при помощи одного образа.
Контейнер отличается он образа тем, что у контейнера есть запущенные процессы они работают и выполняют задачи. Информация о том процессе который запуститься в контейнере находится в образе. Образы статичны а контейнеры динамичны.
Вид образа
Каждый образ состоит из слоев.
У каждого образа есть базовый слой. И другие слои которые добавляются к основному. Каждый слой это просто набор файлов. Слои можно переиспользовать в разных образах. Может быть разные образы у которых слои пересекаются и в таком случае на docker host нет необходимости сохранять эти слои несколько раз. Переиспользование слоев позволяет ускорить построение кастомных слоев. Все слои в образе Read only (они доступны для чтения).Образы можно перемещать и удалять. Образы хранящиеся в репозиториях и могут быть разные версии. Есть образы официальные или созданные сообществом или приватные.
Что такое Repository
Набор различных версий какого образа. Также могут быть различные тэги. Тэг latest указывает на самую последнюю версию образа. alpine - версия самая маленькая.
Основные команды:
docker version - команда для проверки версии клиента docker.
docker ps -a - команда для того что посмотреть список запущенных и остановленных контейнеров.
docker ps - только запущенные контейнеры.
docker images - получить список всех образов которые находятся у вас локально.
Создание контейнера.
docker run где <name> это имя образа из которого создается контейнер для начало docker обратиться локально, если не найдет он пойдет в docker hub и будет искать там, найдет и скачает локально и создаст контейнер.
docker pull сделает аналогично с тем что run но только не создает контейнер а просто скачает его и положит локально.
Пример docker run hello-world
docker rm <id or name> - удалить остановленный контейнер.
docker run -it - подключиться внутрь контейнера и работать в процессе например <sh>
docker container prune - удалить все контейнеры
Если мы не хотим подключаться к процессу контейнера при создании например при создании образа docker run nginx мы автоматически подключается в процесс сервера. Тогда нам нужно создать контейнер в фоновом режиме. docker run -d nginx - как пример.
docker stop <name or id> - команда которая остановит контейнер.
docker exec -it <id or name> <name> - запустить дополнительный процесс в уже работающем контейнере.
docker run -d –name MY_CONTAINER_NGINX nginx - задание имени контейнеру.
Mapping портов.
docker run -p 8000:80 nginx (-p - публикация порта. 8000 - порт внешний 80 - порт внутренний)
Mapping томов.
docker run -v ${path}:/usr/share/nginx/html nginx (-v подключение тома. ${path} - путь к локальному файлу разметки, /usr/share/nginx/html - путь внутри контейнера)
docker run -it --rm busybox - Автоматическое удаление неработающих контейнеров.
–rm - автоматически удалить контейнер когда вы завершите работу в нём.