Как мне вывести список всех приложений, содержащихся в контейнере докера?

Я загрузил контейнер докеров, который выполняет несколько различных операций с входным файлом с использованием нескольких различных программ, например выравнивание, вызов вариантов и т. Д. Как мне узнать, что такое содержимое контейнера / образа докера? Извините, если это тривиально, я совершенно не знаком с докером.

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

Другие вопросы по тегам