Как мне вывести список всех приложений, содержащихся в контейнере докера?
Я загрузил контейнер докеров, который выполняет несколько различных операций с входным файлом с использованием нескольких различных программ, например выравнивание, вызов вариантов и т. Д. Как мне узнать, что такое содержимое контейнера / образа докера? Извините, если это тривиально, я совершенно не знаком с докером.
3 ответа
Есть (как минимум) три способа ответить на свой вопрос:
- Вы можете спросить, какие пакеты установлены в контейнере;
- Вы можете спросить, какие есть файлы;
- Вам может быть интересно, из каких изображений и слоев состоит контейнер?
1. Список пакетов, установленных в контейнере
Способ получения списка установленных пакетов зависит от дистрибутива. Вот три самых популярных семейства:
- Alpine, легкий дистрибутив Linux на основе musl и BusyBox
- На основе Debian (Debian, Ubuntu)
- на основе rpm (RHEL, CentOS и Fedora)
Контейнеры альпийские
Использовать apk info -vv
команда:
docker exec -i <container_id_1> apk info -vv | sort
Контейнеры на основе Debian и Ubuntu
Использовать dpkg -l
команда:
docker exec -i <container_id_1> dpkg -l
Контейнеры на базе RHEL, CentOS и Fedora
Использовать rpm -qa
или yum list installed
команда:
docker exec -i <container_id_1> rpm -qa
docker exec -i <container_id_1> yum list installed
2. Изучите файловую систему контейнера.
Чтобы увидеть структуру каталогов, вы можете использовать либо bash
& tree
или классные инструменты, разработанные специально для изучения изображений докеров
tree
docker exec -i <container_id_1> tree /
Примечание: не все изображения содержатtree
команда.
docker export
с участием tar
docker export adoring_kowalevski > contents.tar
И тогда ты можешь исследовать contents.tar
с вашим предпочтительным архиватором. Т.е. дляtar
:
tar -tvf contents.tar
3. Специальные инструменты (исследуйте изображения и слои OverlayFS
)
Wagoodman / dive
wagoodman / dive: инструмент для исследования каждого слоя в образе докера
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
wagoodman/dive:latest \
<image_name|image_id>
Инструмент для изучения образа Docker, содержимого слоев и поиска способов уменьшения размера образа Docker. https://github.com/wagoodman/dive/blob/master/.data/demo.gif
tomastomecek / sen
TomasTomecek / sen: пользовательский интерфейс терминала для движка докеров
docker run -v /var/run/docker.sock:/run/docker.sock -ti -e TERM tomastomecek/sen
он может интерактивно управлять вашими контейнерами и изображениями:
justone / dockviz
justone / dockviz: Визуализация данных Docker
$ dockviz containers -d -r | dot -Tpng -o containers.png
Контейнеры визуализируются с помеченными линиями для ссылок. Неработающие контейнеры выделены серым цветом.
$ dockviz containers -d -r | dot -Tpng -o containers.png
https://github.com/justone/dockviz/blob/master/sample/containers.png
Начиная с версии Docker Desktop 4.7.0 вы можете использовать экспериментальный
sbom
команду , чтобы получить «Билль о правах на программное обеспечение», который представляет собой довольно полный список всех содержащихся библиотек и соответствующих версий. Например
$ docker sbom openjdk:11-jre-slim-buster
Syft v0.43.0
✔ Pulled image
✔ Loaded image
✔ Parsed image
✔ Cataloged packages [91 packages]
NAME VERSION TYPE
adduser 3.118 deb
apt 1.8.2.3 deb
base-files 10.3+deb10u12 deb
base-passwd 3.5.46 deb
bash 5.0-4 deb
bsdutils 1:2.33.1-0.1 deb
ca-certificates 20200601~deb10u2 deb
coreutils 8.30-3 deb
dash 0.5.10.2-5 deb
debconf 1.5.71+deb10u1 deb
debian-archive-keyring 2019.1+deb10u1 deb
[...]
Как видите, он основан на Syft , который является сторонним инструментом. Это может измениться в будущем (следовательно, экспериментально). На самом деле вы также можете использовать Syft напрямую, поэтому вам не нужен Docker Desktop.
Вы можете получить информацию об изображении, используя:docker image inspect <image>
а также docker image history <image>
а затем, если вы хотите получить информацию о контейнере, просто войдите в запущенный контейнер с помощью команды exec docker container exec -itu 0 <container> /bin/bash
(обратите внимание, что ваш контейнер может использовать другую оболочку), а затем просто соберите необходимую информацию (ОС, запущенные процессы, открытые файлы и т. д.)
Дополнительная информация о команде exec: https://docs.docker.com/engine/reference/commandline/exec/.
PS: Чтобы перечислить изображения docker image ls
, чтобы перечислить запущенные контейнеры docker container ps