Docker
Ссылки по теме:
# просмотр списка контейнеров docker ps --all # вход в консоль контейнера docker exec -it <имя_или_id_контейнера> /bin/bash
Пример создания контейнера minio
# три в одном: загрузка образа, созание контейнера, запуск контейнера docker run -d \ -p 9000:9000 \ -p 9001:9001 \ --name minio \ -v ~/minio_data:/data \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=password" \ quay.io/minio/minio server /data --console-address ":9001" # загрузка образа minio в каталог images docker pull quay.io/minio/minio:latest # создание контейнера docker create \ --name minio \ -p 9000:9000 \ -p 9001:9001 \ -v /mnt/minio_data:/data \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=password123" \ quay.io/minio/minio server /data --console-address ":9001" # запуск контейнера docker start minio
Если нет интернета
# загружаем образ на хосте с интернетом и docker клиентом и экспортируем его в архив docker save -o minio_image.tar quay.io/minio/minio:latest # на хосте без интернета импортируем архив в docker docker load -i minio_image.tar # проверяем что он появился в списке образов docker images
процессы внутри контейнера
# обычно в контейнере один процесс приложения с pid = 1
# если нет ps, то увидеть список процессов можно так (два лишних процесса это ls и grep)
ls /proc | grep -E '^[0-9]+$'
cat /proc/<pid>/comm
# или так
for p in /proc/[0-9]*; do echo -n "${p##*/} "; cat $p/cmdline | tr '\0' ' '; echo; done
RedOS 8
По умолчанию, стандартные репозитории при установке docker предлагают пакте podman-docker.
podman-docker - этот пакет устанавливает podman и создает алиасы на docker.
podman - это проект RedHat написанный с нуля, который создан как замена docker. Ключевое отличие в том что он запускает контейнеры в окружении пользователя и не имеет сервиса. Это повышает безопасность, но имеет ряд ограничений.
docker-ce - это оригинальный docker community edition
docker-composer - это прослойка упрощающая управление docker контейнерами
Как работает docker
Изначально docker создавался как надстройка над lxc, но в 2015 был разработан собственный низкоуровневый слой взаимодействия с ядром runc
Сейчас цепочка запуска docker контейнера выглядит так Docker CLI → dockerd → containerd → runc
Репозитории docker
- Docker Hub (docker.io) - если репозиторий не указан, то используется этот репозиторий. Это самый крупный репозиторий, но он имеет жесткие лимиты на загрузку, если нет платной подписки.
- RedHat (quay.io)
- и тысячи других
Можно поднять локальный репозиторий docker-registry
Авторизация в docker реестр
# интеракативно по логину/паролю docker login <адрес_репозитория> # после авторизации в профиле текущего пользователя создается файл, в котором сохраняются данные авторизации # далее данные авторизации автоматически подгружаются из этого файла ~/.docker/config.json