Docker

Материал из sysadm
Перейти к навигации Перейти к поиску

Ссылки по теме:

# просмотр списка контейнеров
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