- Шпаргалка Docker
- Создание образа
- Управление образами
- Запуск и остановка контейнеров
- Управление контейнерами
- Синтаксис Dockerfile
- Docker посмотреть запущенные контейнеры, запустить или остановить контейнеры
- Список запущенных Docker контейнеров
- Как запустить Docker контейнер
- Как остановить Docker контейнер
- Заключение
- Как запустить остановленный контейнер Docker другой командой?
- 7 ответов
- Найдите идентификатор остановленного контейнера
- Зафиксируйте остановленный контейнер:
- Запуск / запуск с другой точкой входа:
- Заметка:
- Добавьте чек в начало вашего скрипта Entrypoint
Шпаргалка Docker
22 October 2014
Создание образа
docker pull ОБРАЗ — загружает образ из Docker Hub (аналог GitHub для Docker)
docker build ПУТЬ | URL — создает образ с помощью Dockerfile
Параметры:
- -t | —tag=»» — помечает созданный образ переданным названием (и, тэгом, если он будет передан)
- —rm — Удаляет промежуточные контейнеры после успешной сборки (по умолчанию == true)
Управление образами
docker rmi — Удаляет образ, образ не может быть удален, если существуют контейнеры (даже незапущенные), которые основаны
на данном образе
Параметры:
- -f — позволяет удалить образ даже если на нём основаны контейнеры
docker images — Отображает список всех существующих образов
Параметры:
- -a | —all — отображает все образы (по умолчанию не отображает промежуточные контейнеры)
- -q — отображает только id образов, вместо таблицы
Запуск и остановка контейнеров
docker run ОБРАЗ [КОМАНДА + АРГУМЕНТЫ] — Запускает выбранный образ в новом контейнере
Параметры:
- -d | —detach — запускает контейнер в фоновом режиме и выводит только id свежесозданного контейнера. (по умолчанию == false )
- -i | —interactive — запускает контейнер в интерактивном режиме (оставляет STDIN открытым, даже если контейнер запущен в неприкрепленном режиме)
- -t | —tty — запускает псевдотерминал, часто используется с -i
- -p | —publish=[] — пробрасывает порты контейнера в хост. Формат: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
- -e | —env=[] — пробрасывает переменные окружения внутрь контейнера.
- -v | —volume=[] — пробрасывает директорию файловой системы внутрь контейнера
docker stop КОНТЕЙНЕР — останавливает контейнер, передавая внутрь SIGTERM, а по истечении таймаута — SIGKILL
Параметры:
- -i | —interactive — аналогично docker run -i
Управление контейнерами
- docker port КОНТЕЙНЕР — отображает маппинг портов между хостом и контейнером
- docker ps — отображает список запущенных контейнеров
Параметры:- -a | —all=(true|false) — отображать ли все контейнеры. По умолчанию == false , т.е. отображаются только запущенные контейнеры
- -q — отображает только ID контейнеров вместо таблицы
- docker rm КОНТЕЙНЕР — удаляет контейнер. По умолчанию можно удалить только запущенный контейнер.
Параметры:- -f | —force=(true|false) — позволяет удалить запущенный контейнер. Используется передача SIGKILL внутрь.
- docker diff — отображает изменения относительно образа.
Синтаксис Dockerfile
Dockerfile служит скриптом сборки для команды docker build . Перед началом сборки docker передает сборщику всё содержимое папки с Dockerfile’ом,
поэтому располагать его в корневой директории системы будет не лучшей идеей.
Первая инструкция обязательно должна быть инструкцией FROM.
FROM ОБРАЗ | FROM ОБРАЗ:ТЭГ — Задает базовый образ для последующих инструкций. Может встречаться несколько раз в одном Dockerfile,
если необходимо собрать несколько образов за раз.
MAINTAINER имя — Позволяет задать поле Author сгенерированного образа
RUN команда | RUN [«исполняемый файл», «параметр1», «параметр2», ..] — Запускает команду на основе текущего образа и фиксирует изменения в новом образе. Новый образ будет использован для исполнения последующих инструкций. Первый синтаксис подразумевает запуск команд в стандартной оболочке (bin\sh -c)
CMD [«исполняемый файл», «параметр1», «параметр2»] | CMD [«параметр1», «параметр2»] | CMD команда параметр1 параметр2 — Предоставляет значения по умолчанию для запуска контейнера. Эти значения могут как включать исполняемый файл (варианты 1, 3), так и не включать его (вариант 2). В последнем случае запускаемая команда
должна быть задана с помощью инструкции ENTRYPOINT .
EXPOSE порт — Информирует Docker, что контейнер будет прослушивать указанные порты во время исполнения. Docker может использовать эту информацию, чтобы соединять контейнеры между собой используя связи. EXPOSE сам по себе не делает порт доступным из хостовой системы. Для того, чтобы открыть порты в хостовую систему следует использовать флаг -p .
ENV ключ значение — Позволяет задавать переменные окружения. Эти переменные будут использованы при запуске контейнера из собранного образа. Могут быть просмотрены с помощью команды docker inspect , а также переопределены с помощью флага —env команды docker run .
ADD ОТКУДА КУДА — Используется для добавления новых файлов, директорий или ссылок на удалённые файлы в файловую систему контейнера. Несколько ОТКУДА может быть передано одновременно, но в этом случае все адреса должны быть относительны для директории, из которой происходит сборка. Каждый вхождение ОТКУДА может содержатьодин или несколько символов подстановки, которые будут разрешены с использование функции языка Go filepath.Match. КУДА должен быть абсолютным путем внутри контейнера.
ENTRYPOINT [«исполняемый файл», «параметр1», «параметр2»] | ENTRYPOINT команда параметр1 параметр2 — позволяет сконфигурировать контейнер так, чтобы он запускался как исполняемый файл. В отличии от команды CMD значение не будет переопределено аргументами, переданными в команду docker run . Таким образом, аргументы из команды docker run будут переданы внутрь контейнера, т.е. docker run ОБРАЗ -d передаст -d исполняемому файлу.
VOLUME [ПУТЬ] — создает точку монтирования с указанным именем и помечает её как содержащую подмонтированные разделы из хостовой системы или других контейнеров. Значение может быть задано как массив JSON, например, VOLUME [«/var/log/»] , так и как обычной строкой с одним или несколькими аргументами, например VOLUME /var/log или VOLUME /var/log /var/db
USER имя — позволяет задавать имя пользователя или UID, который будет использован для запуска образа, а так же для любой из инструкций RUN
WORKDIR ПУТЬ — задает рабочую директорию для команд RUN , CMD и ENTRYPOINT . Инструкция может быть использована несколько раз. Если ПУТЬ относителен, то он будет относительным для ПУТИ, заданным предыдущей инструкцией WORKDIR .
Источник
Docker посмотреть запущенные контейнеры, запустить или остановить контейнеры
Docker — это популярный инструмент виртуализации, который копирует конкретную операционную среду поверх основной ОС. Каждая среда называется контейнером. Управление контейнерами необходимо для работы в Docker.
Контейнер использует образ предварительно сконфигурированной операционной системы, оптимизированный для конкретной задачи. Когда образ Docker запущен, он существует в контейнере. Например, несколько контейнеров могут одновременно запускать один и тот же образ в одной операционной системе.
Список запущенных Docker контейнеров
Базовый формат Docker:
Чтобы вывести список всех запущенных контейнеров Docker, введите в окне терминала следующее:
Как вы можете видеть, изображение выше указывает на отсутствие запущенных контейнеров.
Чтобы вывести список всех работающих и остановленных контейнеров, добавьте параметр –a :
Для вывода списка контейнеров по их идентификатору используйте параметр –aq :
Чтобы просмотреть общий размер файла каждого контейнера, используйте параметр –s :
Чтобы просмотреть список последних созданных контейнеров, используйте параметр –l :
Команда ps предоставляет несколько столбцов информации:
- Container ID — Уникальный буквенно-цифровой номер для каждого контейнера
- Image — Образ базовой операционной системы, на котором основан контейнер
- Command — команда, запустившая контейнер
- Created — Как давно был создан контейнер
- Status — Время работы или простои
- Ports — Указывает любые порты, перенаправляемые в контейнер для работы в сети.
- Name — Памятное имя, присвоенное программным обеспечением Docker
Как запустить Docker контейнер
Основная команда для запуска одного или нескольких остановленных контейнеров Docker docker start :
Вы можете указать контейнер, используя его имя или идентификатор (длинный или короткий).
Чтобы создать новый контейнер из образа и запустить его, используйте docker run :
Если вы не определите имя для вновь созданного контейнера, он создаст случайное имя строки. Чтобы определить имя контейнера, используйте параметр ––name :
Вышеупомянутая команда создаст контейнер Ubuntu_test на основе образа ubuntu: 14.04 и запустит его.
Контейнер может быть запущен, но вы не сможете взаимодействовать с ним. Чтобы запустить контейнер в интерактивном режиме, используйте параметры –i и –t :
В приведенном выше примере система создает контейнер Test_2 из образа ubuntu и подключается к нему, позволяя запускать команды непосредственно в контейнере.
Вместо использования параметров -i или -t , используйте команду для подключения к работающему контейнеру : attach
Как остановить Docker контейнер
Чтобы остановить Docker контейнер, используйте команду docker stop :
Замените container_id на имя контейнера или идентификатор.
По умолчанию вы получаете 10-секундный период. Команда stop указывает контейнеру остановить службы после этого периода. Используйте параметр —time для определения другого периода, выраженного в секундах:
Чтобы немедленно остановить docker контейнер, не дожидаясь окончания периода:
Чтобы остановить все запущенные контейнеры, введите следующее:
Эту же команду можно использовать с kill . Это остановит все контейнеры, не давая им возможности выйти.
Заключение
Данное руководство показывает все команды и параметры для для просмотра, запуска и остановки Docker контейнеров. Docker используется командами разработчиков для обеспечения согласованности на разных машинах.
Источник
Как запустить остановленный контейнер Docker другой командой?
Я хотел бы запустить остановленный контейнер Docker с помощью другой команды, поскольку команда по умолчанию дает сбой, то есть я не могу запустить контейнер, а затем использовать docker exec.
В принципе, я хотел бы запустить оболочку, чтобы я мог проверить содержимое контейнера.
К счастью, я создал контейнер с параметром -it!
7 ответов
Найдите идентификатор остановленного контейнера
Зафиксируйте остановленный контейнер:
Эта команда сохраняет измененное состояние контейнера в новый образ user/test_image
Запуск / запуск с другой точкой входа:
Заметка:
Выполненные выше шаги просто запускают остановленный контейнер с таким же состоянием файловой системы. Это отлично подходит для быстрого расследования. Но переменные среды, конфигурация сети, подключенные тома и другие данные не наследуются, вы должны указать все эти аргументы явно.
Шаги по запуску остановленного контейнера были заимствованы отсюда: (последний комментарий) https://github.com / docker / docker / issues / 18078
Это не совсем то, о чем вы просите, но вы можете использовать docker export в остановленном контейнере, если все, что вам нужно, — это проверить файлы.
Моя проблема:
- Я запустил контейнер с docker run
- А затем добавил несколько файлов в этот контейнер
- Затем я закрыл контейнер и попытался запустить его снова той же командой, что и выше.
- Но когда я проверил новые файлы, они отсутствовали
- когда я запустил docker ps -a , я увидел два контейнера.
- Это означает, что каждый раз, когда я запускал команду docker run , создавался новый образ
Решение: Чтобы работать с тем же контейнером, который вы создали в первую очередь, выполните следующие действия.
- docker ps , чтобы получить контейнер вашего контейнера
- docker container start , чтобы запустить существующий контейнер
- Затем вы можете продолжить с того места, где вы уехали. например docker exec -it /bin/bash
- Затем вы можете решить создать из него новое изображение.
Я взял ответ @Dmitriusan и превратил его в псевдоним:
псевдоним docker-run-prev-container = ‘prev_container_id = «$ (docker ps -aq | head -n1)» && docker commit «$ prev_container_id» «prev_container / $ prev_container_id» && docker run -it —entrypoint = bash «prev_container / $ prev_container_id «‘
Добавьте это в свой файл псевдонимов
/.bashrc , и у вас будет отличный новый псевдоним docker-run-prev-container , который перенесет вас в оболочку из предыдущего контейнера.
Полезно для отладки неудачных docker build s.
Добавьте чек в начало вашего скрипта Entrypoint
Docker действительно необходимо реализовать это как новую функцию, но вот еще один вариант обхода для ситуаций, когда у вас есть точка входа, которая завершается после успеха или неудачи, что может затруднить отладку.
Если у вас еще нет сценария Entrypoint, создайте тот, который запускает все команды, которые вам нужны для вашего контейнера. Затем в верхней части этого файла добавьте эти строки в entrypoint.sh :
Чтобы гарантировать, что cat удерживает соединение, вам может потребоваться TTY. Я запускаю контейнер со своим скриптом Entrypoint следующим образом:
Это приведет к однократному запуску сценария с созданием файла, указывающего, что он уже запущен (в виртуальной файловой системе контейнера). Затем вы можете перезапустить контейнер для выполнения отладки:
Когда вы перезапускаете контейнер, файл already_ran будет найден, в результате чего сценарий Entrypoint остановится с cat (который просто вечно ждет ввода, который никогда не поступит, но сохраняет контейнер в живых). Затем вы можете выполнить сеанс отладки bash :
Во время работы контейнера вы также можете удалить already_ran и вручную выполнить сценарий entrypoint.sh , чтобы повторно запустить его, если вам нужно отладить таким образом.
Отредактируйте этот файл (соответствующий вашему остановленному контейнеру):
Измените параметр «Путь», чтобы он указывал на вашу новую команду, например / bin / bash. Вы также можете установить параметр «Args» для передачи аргументов команде.
Перезапустите службу докеров (обратите внимание, что это остановит все запущенные контейнеры):
Перечислите свои контейнеры и убедитесь, что команда изменилась:
Запустите контейнер и прикрепите к нему, теперь вы должны быть в своей оболочке!
Работал над Fedora 22 с использованием Docker 1.7.1.
ПРИМЕЧАНИЕ. Если ваша оболочка не интерактивна (например, вы не создали исходный контейнер с параметром -it), вы можете вместо этого изменить команду на «/ bin / sleep 600» или «/ bin / tail. -f / dev / null «, чтобы у вас было достаточно времени для выполнения» docker exec -it CONTID / bin / bash «в качестве еще одного способа получения оболочки.
Источник