- docker version
- Description
- Usage
- Extended description
- Options
- Examples
- Default output
- Get the server version
- Dump raw JSON data
- Print the current context
- Как я могу получить информацию о контейнере Docker Linux из самого контейнера?
- 15 ответов
- Как узнать, какой Linux установлен внутри образа докера?
- 2 ответа
- Изучаем Docker, часть 5: команды
- Обзор
- Общие сведения о командах Docker
- Примечание о командах, поддерживаемых Docker CLI 1.13
- Команды для управления контейнерами
- Команды для управления образами
- Разные команды
- Контейнеры
- ▍Начало существования контейнера
- ▍Проверка состояния контейнера
- ▍Завершение работы контейнера
- Образы
- ▍Создание образов
- ▍Исследование образов
- ▍Удаление образов
- Разные команды
- Итоги
docker version
Description
Show the Docker version information
Usage
Extended description
By default, this will render all version information in an easy to read layout. If a format is specified, the given template will be executed instead.
Go’s text/template package describes all the details of the format.
For example uses of this command, refer to the examples section below.
Options
Name, shorthand | Default | Description |
—format , -f | Format the output using the given Go template | |
—kubeconfig | deprecated Kubernetes Kubernetes config file |
Examples
Default output
Get the server version
Dump raw JSON data
Print the current context
The following example prints the currently used docker context :
As an example, this output can be used to dynamically change your shell prompt to indicate your active context. The example below illustrates how this output could be used when using Bash as your shell.
Declare a function to obtain the current context in your
/.bashrc , and set this command as your PROMPT_COMMAND
After reloading the
/.bashrc , the prompt now shows the currently selected docker context :
Refer to the docker context section in the command line reference for more information about docker context .
Источник
Как я могу получить информацию о контейнере Docker Linux из самого контейнера?
Я хотел бы, чтобы мой docker containers знал об их конфигурации, точно так же, как вы можете получить информацию об экземплярах EC2 через метаданные.
Я могу использовать (при условии, что docker прослушивает порт 4243 )
Чтобы получить некоторые из его данных, но хотел бы знать, есть ли лучший способ получить хотя бы полный идентификатор контейнера, потому что HOSTNAME фактически сокращен до 12 символов, а докер, похоже, выполняет «наилучшее совпадение » в теме.
Кроме того, как я могу получить внешний IP-адрес хоста докеров (кроме доступа к метаданным EC2, которые характерны для AWS)
15 ответов
Я обнаружил, что идентификатор контейнера можно найти в / proc / self / cgroup
Итак, вы можете получить идентификатор с помощью:
Используйте docker inspect .
Получить ip можно следующим образом.
В стороне, если у вас есть pid контейнера и вы хотите получить идентификатор докера этого контейнера, хороший способ — использовать nsenter в сочетании с магией sed, описанной выше:
nsenter -n -m -t pid — cat /proc/1/cgroup | grep -o -e «docker-.*.scope» | head -n 1 | sed «s/docker-\(.*\).scope/\\1/»
Я считаю, что «проблема» со всем вышеперечисленным заключается в том, что это зависит от определенного соглашения о реализации либо самого докера, либо его реализации и того, как это взаимодействует с cgroups и / proc, а не через подтвержденный , общедоступный, API, протокол или соглашение как часть спецификаций OCI.
Следовательно, эти решения являются «хрупкими» и могут выйти из строя в самый неожиданный момент, когда реализация будет изменена или соглашения будут отменены пользовательской конфигурацией.
Идентификаторы контейнера и изображения должны быть введены в среду r / t компонентом, который инициировал экземпляр контейнера, если не по какой-либо другой причине, кроме чтобы разрешить запускаемому в нем коду использовать эту информацию для однозначной идентификации себя для ведения журнала / отслеживания и т. д.
Только мои 0,02 доллара, ГММВ .
Некоторые опубликованные решения перестали работать из-за изменений в формате /proc/self/cgroup . Вот одна команда GNU grep, которая должна быть немного более устойчивой к изменениям формата:
Для справки, вот фрагменты / proc / self / cgroup из контейнеров докеров, которые были протестированы с помощью этой команды:
Вы можете использовать эту командную строку для определения текущего идентификатора контейнера (проверено с помощью docker 1.9).
Затем небольшой запрос к Docker API (вы можете поделиться /var/run/docker.sock), чтобы получить всю информацию.
Docker по умолчанию устанавливает имя хоста для идентификатора контейнера, но пользователи могут переопределить это с помощью —hostname . Вместо этого проверьте /proc :
Вот удобный однострочник для извлечения идентификатора контейнера:
Я обнаружил, что в 17.09 есть самый простой способ сделать это в контейнере докера:
Или, как уже было сказано, более короткая версия с
Чтобы было проще,
- Идентификатор контейнера — это ваше имя хоста внутри докера.
- Информация о контейнере доступна внутри / proc / self / cgroup
Чтобы получить имя хоста,
Вывод может быть перенаправлен в любой файл и считан из приложения. Например: # hostname > /usr/src//hostname.txt
ВНИМАНИЕ: вы должны понимать риски безопасности, связанные с этим методом, прежде чем рассматривать его. Джон риск:
Предоставив контейнеру доступ к /var/run/docker.sock , [тривиально легко] вырваться из сдерживания, обеспечиваемого докером, и получить доступ к хост-машине. Очевидно, это потенциально опасно.
Внутри контейнера dockerId — это ваше имя хоста. Итак, вы могли:
- установите пакет docker-io в свой контейнер с той же версией, что и хост
- начните с —volume /var/run/docker.sock:/var/run/docker.sock —privileged
- наконец, запустите: docker inspect $(hostname) внутри контейнера
Избегайте этого. Делайте это только в том случае, если вы понимаете риски и имеете четкое представление о снижении рисков.
Это получит полный идентификатор контейнера из контейнера:
Комментарий от madeddie выглядит наиболее элегантно для меня:
Вы можете общаться с докером изнутри контейнера, используя сокет unix через Docker Remote API:
В контейнере вы можете узнать сокращенный идентификатор докера, исследуя $HOSTNAME env var. Согласно документу, есть небольшая вероятность столкновения, я думаю, что для небольшого количества контейнеров вам не нужно об этом беспокоиться. Я не знаю, как получить полный идентификатор напрямую.
Вы можете проверить контейнер аналогично тому, как описано в ответе banyan :
В качестве альтернативы вы можете передать идентификатор докера в контейнер в файле. Файл находится на «смонтированном томе», поэтому он переносится в контейнер:
Идентификатор докера (сокращенный) будет в файле /mydir/host1.txt в контейнере.
Если не переопределить, имя хоста является коротким идентификатором контейнера в Docker 1.12.
Источник
Как узнать, какой Linux установлен внутри образа докера?
Я новичок в докере, и это просто увлекательный инструмент. Однако я ничего не могу понять в этом. Простой файл Dockerfile обычно начинается с имени и версии ОС, например:
Но какая ОС Linux будет использоваться для Dockerfile, например
Конечно, я могу узнать это, запустив контейнер из этого образа и распечатав информацию об ОС, например:
Кстати, в обоих случаях ОС — «Debian GNU / Linux 10 (buster)».
Итак, мои вопросы:
Как узнать, какая ОС будет запускаться для определенного образа докера, не создавая из него контейнер докера (команда docker inspect не предоставляет эту информацию: docker inspect perl | grep -i Debian )
Как изменить тип ОС для существующего образа докера. Например, у меня есть образ, в котором используется Ubuntu 14.04, и я хочу изменить его на Ubuntu 18.04 ..
Спасибо за помощь:)
2 ответа
Образ докера не требует ОС. Существует возможность расширения рабочего образа, который намеренно пуст, а контейнер может содержать только один двоичный файл. или какой-то объем.
Наличие всей ОС возможно, но также вводит в заблуждение: хост разделяет свое ядро с контейнером. (Это не виртуальная машина.)
Это означает, что независимо от того, какую «ОС» вы используете, в контейнере находится одно и то же ядро:
Сообщит о том же ядре вашей хост-машины.
Поэтому вам нужно изучить разные способы:
Или для Cent OS:
Вместо царапин, многие изображения также сделаны в альпийском стиле, чтобы избежать лишнего размера. Базовый образ ubuntu может легко иметь отпечаток 500 МБ, тогда как alpine использует около 5 МБ; так что я лучше проверю и это.
Также избегайте ловушки ручной установки всего на один образ Ubuntu внутри одного большого Dockerfile. Docker работает лучше всего, если каждая служба представляет собой отдельный контейнер, который вы связываете вместе. (Для этого проверьте docker-compose .)
В конце концов, вы, как пользователь, должны заботиться не об ОС образа, а о его размере. Только как разработчик Dockerfile имеет значение знать ОС, и вы узнаете об этом, заглянув в Dockerfile, где был создан образ (если он находится в концентраторе Docker, вы можете прочитать его там).
По сути, вам нужно посмотреть, что было использовано для создания вашего изображения, и использовать соответствующие инструменты для работы. (В образах на основе Debian используется apt-get , в alpine используется apk , а в Fedora используется yum .)
Как узнать, какая ОС будет запускаться для определенного образа докера, не создавая из него контейнер докера
Единственный способ определить, какая операционная система используется, — это, как вы описали: создать контейнер и распечатать информацию об операционной системе. Нет метаданных, которые говорят, что «это изображение было создано с использованием ».
Во многих (но не во всех) ситуациях эта информация может быть не особенно важной.
Как изменить тип ОС для существующего образа докера. Например, у меня есть образ, в котором используется Ubuntu 14.04, и я хочу изменить его на Ubuntu 18.04 ..
Если у вас есть доступ к Dockerfile , используемому для создания образа, вы, конечно, можете изменить базовое изображение (изображение, указанное в строке FROM ) и построить новый, но вы можете обнаружить, что это требует ряда других изменений из-за разных версий программного обеспечения в обновленном образе.
Источник
Изучаем Docker, часть 5: команды
Сегодняшняя часть цикла материалов по Docker, перевод которого мы публикуем, посвящена командам Docker. Документация Docker содержит подробнейшее описание великого множества команд, но тот, кто только начинает работу с этой платформой, может в них и потеряться, поэтому здесь приведены почти два десятка самых важных команд для работы с Docker. Продолжая сложившуюся традицию, мы сравним команды с россыпью ягод.
Обзор
Давайте вспомним о том, что образы Docker создают на основе файлов Dockerfile, описывающих всё то, что нужно для сборки образов. Кроме того, не будем забывать и о том, что контейнер — это образ Docker, вызванный к жизни. Для того чтобы эффективно пользоваться командами Docker, в первую очередь нужно выяснить — с чем вы имеете дело — с образом или с контейнером. Если подумать об образах и контейнерах, то можно понять, что образ Docker может либо существовать, либо не существовать. То же самое можно сказать и о контейнерах Docker. Существующий контейнер Docker, кроме того, может пребывать либо в работающем, либо в неработающем состоянии.
После того, как вы выяснили, с чем именно вам нужно работать, вы можете найти подходящую команду.
Общие сведения о командах Docker
Вот кое-что, о чём полезно знать тем, кто хочет работать с Docker:
- Команды интерфейса командной строки Docker, используемые для управления чем-либо, начинаются с ключевого слова docker , за которым идёт пробел, затем идёт указание на то, на что именно будет направлена некая команда, потом ещё один пробел, а потом следует сама команда. Например, именно так построена такая команда: docker container stop .
- Если команда направлена на конкретный образ или контейнер, то в ней используется имя или идентификатор такого образа или контейнера.
Например, команда docker container run my_app — это команда для создания и запуска контейнера с именем my_app . В примерах, которые будут приведены ниже, контейнеры мы будем называть my_container , образы — my_image , теги — my_tag , и так далее.
Сначала мы будем рассматривать саму команду, потом — флаги, которые можно с ней использовать, если такие флаги существуют. Если перед флагом стоит два тире — то это его полная форма, флаг с одним тире — это сокращённый вариант некоего флага. Действуют они одинаково. Например, -p — это сокращённая форма флага —port .
Цель этого материала заключается в том, чтобы дать вам общие сведения о командах Docker. Так вы, имея общее представление о них и зная о возможностях платформы, доступных благодаря этим командам, сможете, при необходимости, найти подробные сведения о них. Команды, о которых пойдёт речь, испытаны на ОС семейства Linux с использованием движка Docker версии 18.09.1 и API версии 1.39.
Примечание о командах, поддерживаемых Docker CLI 1.13
В интерфейсе командной строки Docker версии 1.13 представлены обновлённые, логически сгруппированные команды. При этом старые команды всё ещё работают, но новыми пользоваться легче, особенно — начинающим. Речь идёт, например, о том, что в версии 1.12 использовалась команда вида docker create , а в версии 1.13 стала доступна команда docker container create . Сведения о соответствии старых и новых команд можно найти здесь.
Сначала мы посмотрим на команды, предназначенные для управления контейнерами, затем обсудим управление образами.
Команды для управления контейнерами
Общая схема команд для управления контейнерами выглядит так:
Вот команды, которые могут быть подставлены туда, где мы использовали my_command :
- create — создание контейнера из образа.
- start — запуск существующего контейнера.
- run — создание контейнера и его запуск.
- ls — вывод списка работающих контейнеров.
- inspect — вывод подробной информации о контейнере.
- logs — вывод логов.
- stop — остановка работающего контейнера с отправкой главному процессу контейнера сигнала SIGTERM , и, через некоторое время, SIGKILL .
- kill — остановка работающего контейнера с отправкой главному процессу контейнера сигнала SIGKILL .
- rm — удаление остановленного контейнера.
Команды для управления образами
Для управления образами используются команды, которые выглядят так:
Вот некоторые из команд этой группы:
- build — сборка образа.
- push — отправка образа в удалённый реестр.
- ls — вывод списка образов.
- history — вывод сведений о слоях образа.
- inspect — вывод подробной информации об образе, в том числе — сведений о слоях.
- rm — удаление образа.
Разные команды
- docker version — вывод сведений о версиях клиента и сервера Docker.
- docker login — вход в реестр Docker.
- docker system prune — удаление неиспользуемых контейнеров, сетей и образов, которым не назначено имя и тег.
Теперь рассмотрим эти команды подробнее.
Контейнеры
▍Начало существования контейнера
На начальном этапе работы с контейнерами используются команды create , start и run . Они применяются, соответственно, для создания контейнера, для его запуска, и для его создания и запуска.
Вот команда для создания контейнера из образа:
В следующих примерах конструкция my_repo/my_image:my_tag будет сокращена до my_image .
Команда create принимает множество флагов. Например, её можно записать в таком виде:
Флаг -a представляет собой краткую форму флага —attach . Этот флаг позволяет подключить контейнер к STDIN , STDOUT или STDERR .
После того, как контейнер создан, его можно запустить следующей командой:
Обратите внимание на то, что сослаться на контейнер в команде можно либо используя его ID , либо имя.
Теперь взглянем на команду, которая позволяет создать и запустить контейнер:
Эта команда тоже способна принимать множество аргументов командной строки. Рассмотрим некоторые из них на примере такой конструкции:
Флаг -i — это сокращение для —interactive . Благодаря этому флагу поток STDIN поддерживается в открытом состоянии даже если контейнер к STDIN не подключён.
Флаг -t — это сокращение для —tty . Благодаря этому флагу выделяется псевдотерминал, который соединяет используемый терминал с потоками STDIN и STDOUT контейнера.
Для того чтобы получить возможность взаимодействия с контейнером через терминал нужно совместно использовать флаги -i и -t .
Флаг -p представляет собой сокращение для —port . Порт — это интерфейс, благодаря которому контейнер взаимодействует с внешним миром. Конструкция 1000:8000 перенаправляет порт Docker 8000 на порт 1000 компьютера, на котором выполняется контейнер. Если в контейнере работает некое приложение, способное выводить что-то в браузер, то, для того, чтобы к нему обратиться, в нашем случае можно перейти в браузере по адресу localhost:1000 .
Флаг —rm автоматически удаляет контейнер после того, как его выполнение завершится.
Рассмотрим ещё некоторые примеры команды run :
В подобной конструкции может применяться команда sh , которая создаст сессию терминала в контейнере, с которой можно взаимодействовать через ваш терминал. При работе с образами, основанными на Alpine, лучше ориентироваться на использование sh а не bash , так как в этих образах, по умолчанию, оболочка bash не установлена. Для выхода из интерактивной сессии воспользуйтесь командой exit .
Обратите внимание на то, что здесь мы скомбинировали флаги -i и -t в -it .
Вот ещё один пример работы с командой run :
Флаг -d — это сокращение для —detach . Эта команда запускает контейнер в фоновом режиме. Это позволяет использовать терминал, из которого запущен контейнер, для выполнения других команд во время работы контейнера.
▍Проверка состояния контейнера
Если у вас имеются запущенные контейнеры Docker и вы хотите узнать о том, что это за контейнеры, вам понадобится вывести их список. Сделать это можно такой командой:
Эта команда выводит список выполняющихся контейнеров и снабжает этот список некоторыми полезными сведениями о них. Вот ещё один пример этой команды:
Ключ -a этой команды — это сокращение для —all . Благодаря использованию этого ключа можно вывести сведения обо всех контейнерах, а не только о выполняющихся.
Ключ -s — это сокращение для —size . Он позволяет вывести размеры контейнеров.
Вот команда, которая выводит подробные сведения о контейнере:
Вот команда, выводящая логи контейнера:
▍Завершение работы контейнера
Иногда работающий контейнер надо остановить. Для этого используется такая команда:
Она позволяет останавливать работающие контейнеры, позволяя им корректно завершить работу. У контейнера есть, по умолчанию, 10 секунд, на то, чтобы завершить работу.
Если же контейнер нужно остановить быстро, не заботясь о корректном завершении его работы, можно воспользоваться такой командой:
Команда kill , если сравнить работающий контейнер с включенным телевизором, напоминает выключение телевизора путём отключения его от электричества. Поэтому, в большинстве ситуаций, для остановки контейнеров рекомендуется использовать команду stop .
Вот команда, которая позволяет быстро остановить все работающие контейнеры:
Для удаления остановленного контейнера можно воспользоваться такой командой:
Вот команда, которая позволяет удалить все контейнеры, которые на момент вызова этой команды не выполняются:
Подведём итоги этого раздела. Сначала контейнер создают, потом его запускают, или комбинируют эти два шага, используя команду вида docker run my_container . После этого запускается контейнеризированное приложение.
Потом контейнер останавливают командой docker stop my_container . Для удаления контейнера используется команда docker rm my_container .
Поговорим теперь о командах, используемых для работы с образами, с теми самыми шаблонами, из которых создают контейнеры.
Образы
▍Создание образов
Вот команда, которая позволяет собирать образы Docker:
В данном случае создаётся образ с именем my_image , при его сборке используется файл Dockerfile, находящийся по указанному пути или URL.
Флаг -t — это сокращение для —tag . Он указывает Docker на то, что создаваемому образу надо назначить предоставленный в команде тег. В данном случае это my_tag .
Точка в конце команды указывает на то, что образ надо собрать с использованием файла Dockerfile, находящегося в текущей рабочей директории.
После того, как образ собран, его можно отправить в удалённый реестр. Благодаря этому им смогут воспользоваться другие люди, его можно будет загрузить и запустить на другом компьютере. Предположим, вы хотите использовать Docker Hub. Если так — вам понадобится завести там учётную запись. Пользоваться этим ресурсом можно бесплатно.
После того, как вы зарегистрируетесь на Docker Hub, вам нужно войти в систему. И хотя команда, которая для этого используется, напрямую к командам, предназначенным для работы с образами, не относится, её полезно будет рассмотреть именно здесь. Речь идёт о следующей команде:
Она позволяет войти в учётную запись на Docker Hub. Для входа в систему вам понадобится ввести имя пользователя и пароль.
После входа в систему можно будет отправлять образы в реестр. Делается это так:
Теперь, когда у вас наберётся несколько образов, вы можете их исследовать с помощью специальных команд.
▍Исследование образов
Вот команда, которая выводит список образов, выводя, в том числе, и сведения об их размере:
Следующая команда позволяет вывести сведения о промежуточных образах, входящих в состав образа, в частности — данные об их размерах и о том, как они были созданы:
Вот команда, которая выводит подробные сведения об образе, в том числе — данные о слоях, из которых состоит образ:
Если вы создадите очень много образов, может случиться так, что некоторые из них понадобится удалить.
▍Удаление образов
Вот команда, которая позволяет удалить указанный образ:
Если образ хранится в удалённом репозитории, он оттуда удалён не будет.
Вот команда, которая позволяет удалить все локальные образы:
Пользоваться этой командой стоит с осторожностью, но надо заметить, что при её использовании образы, хранящиеся в удалённом репозитории, удалены не будут. В этом заключается одно из преимуществ хранения образов в репозиториях.
Мы рассмотрели основные команды, используемые для управления контейнерами и образами. Поговорим теперь ещё о некоторых командах.
Разные команды
Вот команда, которая выводит сведения о версиях клиента и сервера Docker:
Эта, уже известная вам команда, применяется для входа в реестр Docker:
Такая команда позволяет удалить неиспользуемые контейнеры, сети и образы, которым не назначено имя и тег:
Вот пример её использования:
Ключ -a — сокращение для —all , позволяет удалить неиспользуемые образы, а не только те, которым не назначено имя и тег.
Ключ —volumes позволяет удалить неиспользуемые тома.
Итоги
В этом материале мы рассмотрели полезные команды Docker. Если вы только начинаете работать с Docker, то вам стоит обратить внимание на три следующих важнейших команды:
Создание и запуск контейнера:
Отправка образа в удалённый репозиторий:
Для того чтобы посмотреть справку по командам Docker, можете выполнить в терминале команду docker . Здесь можно найти справочные материалы по интерфейсу командной строки Docker.
В следующий раз мы поговорим о работе с данными в Docker.
Уважаемые читатели! Если вы работаете с Docker, то у вас, наверняка, есть собственный список часто используемых команд. Если это так — просим вас этим списком поделиться.
Источник