Как выйти из контейнера docker
Перейти к содержимому

Как выйти из контейнера docker

  • автор:

Управление контейнерами — Docker: Основы

Картинка описывает жизненный цикл контейнера. Кружками на нем изображены состояния, жирным выделены консольные команды, а квадратиками показывается то, что в реальности выполняется.

Проследите путь команды docker run . Несмотря на то, что команда одна, с точки зрения работы Docker выполняется два действия: создание контейнера и запуск. Существуют и более сложные варианты исполнения, но в этом разделе мы рассмотрим только базовые команды.

docker run

Запустим nginx так, чтобы он работал в фоне. Для этого после слова run добавляется флаг -d . Дополнительно, зададим контейнеру имя —name=nginx , чтобы упростить обращение к нему.

-d --name=nginx -p 8080:80 nginx 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e 

Убедитесь в том, что nginx работает, открыв в браузере ссылку localhost:8080 . Там вы увидите надпись Welcome to Nginx!.

docker logs

После запуска в фоне, Docker выводит идентификатор контейнера и возвращает управление в терминал. С одной стороны это позволяет работать программе независимо от терминала, с другой, мы теперь потеряли возможность смотреть логи в том месте, где мы ее запустили. Посмотреть логи можно командой docker logs , которой нужно передать идентификатор контейнера или его имя

# docker logs 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e docker logs nginx 172.17.0.1 - - [19/Jan/2018:07:38:55 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "-" 

docker logs выводит текущий лог и завершает работу, что бывает неудобно, если логи нужно просматривать в реальном времени. Для этого можно держать их постоянно открытыми по принципу работы команды tail -f . Для этого запустите docker logs -f 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e . Теперь лог будет обновляться каждый раз, когда вы обновляете страницу в браузере. Выйти из этого режима можно набрав Ctrl + C , при этом сам контейнер остановлен не будет.

docker ps

Теперь выведем информацию о запущенных контейнерах командой docker ps :

"nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 80/tcp nginx 
  • CONTAINER_ID — идентификатор контейнера. Так же, как и в git, используется сокращенная запись хеша
  • IMAGE — имя образа, из которого был поднят контейнер. Если не указан тег, то подразумевается latest
  • COMMAND — команда, которая выполнилась на самом деле при старте контейнера
  • CREATED — время создания контейнера
  • STATUS — текущее состояние
  • PORTS — проброс портов
  • NAMES — алиас. Docker позволяет кроме идентификатора иметь имя. Так гораздо проще обращаться с контейнером. Если при создании контейнера имя не указано, то Docker самостоятельно его придумывает. В выводе выше как раз такое имя у nginx

Команда docker ps выводит только запущенные контейнеры. Но кроме них могут быть и остановленные. Причем остановка может происходить как по успешному завершению, так и в случае ошибок. Попробуйте набрать docker run ubuntu ls , а затем docker run ubuntu bash -c «unknown» . Эти команды не запускают долгоживущий процесс, они завершаются сразу после выполнения, причем вторая с ошибкой, так как такой команды не существует.

Теперь выведем все контейнеры командой docker ps -a . Первыми тремя строчками вывода окажутся:

-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 85fb81250406 ubuntu "bash -c unkown" Less than a second ago Exited (127) 3 seconds ago loving_bose c379040bce42 ubuntu "ls" Less than a second ago Exited (0) 9 seconds ago determined_tereshkova 

Здесь как раз два последних запуска. Если посмотреть на колонку STATUS , то видно, что оба контейнера находятся в состоянии Exited . То есть запущенная команда внутри них выполнилась, и они остановились. Разница лишь в том, что один завершился успешно (0), а второй с ошибкой (127).

docker stop

Теперь попробуем остановить контейнер. Выполним команду:

# docker stop 431a3b3fc24b docker stop nginx 431a3b3fc24b 

Остановка контейнера не удаляет его. Он будет отображаться в списке запущенных контейнеров:

-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 431a3b3fc24b nginx "/docker-entrypoint.…" 7 seconds ago Exited (0) 1 second ago nginx 

docker start

После остановки контейнер можно даже перезапустить:

# docker start 31a3b3fc24b docker start nginx 

Запуск контейнера всегда стартует его в фоновом режиме, поэтому вы не увидите лога. Чтобы его посмотреть, воспользуйтесь командой docker logs nginx .

docker kill

docker stop шлет сигнал SIGTERM , который должен обработать приложение внутри контейнера и остановиться. Если оно настроено неправильно, то этого не произойдет и команда docker stop не сможет остановить контейнер. В этом случае понадобится docker kill . Эта команда использует сигнал SIGKILL , который гарантировано останавливает контейнер. Ее вывод идентичен:

# docker kill 431a3b3fc24b docker kill nginx 431a3b3fc24b 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Как выйти из контейнера Docker 2 мин для чтения

Предположим, вы запускаете Docker-контейнер в интерактивном режиме, например так:

docker run -it ubuntu bash

Таким образом, вы получаете интерактивную оболочку и сразу же входите в ОС, работающую как контейнер.

Чтобы выйти из этого запущенного контейнера, вы можете использовать ctrl + c, ctrl + d или ввести exit в терминале.

Здесь есть одна проблема. Если вы выйдете из контейнера таким образом, ваш контейнер также остановится.

andreyex@nuc:~$ docker run -it ubuntu bash root@1385a55c8c7a:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@1385a55c8c7a:/# exit exit andreyex@nuc:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Как вы можете видеть на выводе выше, команда docker ps не показывает запущенные контейнеры.

Выход из контейнера Docker без остановки (отсоединение контейнера)

Здесь вы можете отсоединить контейнер, нажав ctrl + p и ctrl + q один за другим . Мы знаем, что это странное сочетание клавиш для пользователей Linux, но это то, как вы можете сделать это легко.

При отсоединении, ваш контейнер будет продолжать работать, даже если вы выйдете из контейнера. Ваш сеанс интерактивного докера теперь находится в режиме демона.

Вы можете проверить это с помощью команды docker ps, чтобы увидеть ее в списке запущенных контейнеров.

Когда вы захотите использовать его снова, вы можете снова прикрепить контейнер.

Совет: по возможности запускайте контейнер в режиме демона

Мы всегда предпочитаем запускать контейнеры в режиме демона, например так:

docker run -it -d docker_image_name bash

Таким образом, контейнер запускается и работает в фоновом режиме. Флаг i означает интерактивный, а флаг t означает tty. В общем, это дает вам интерактивную оболочку, которая запускает bash, но она не доступна сразу.

Читать Настройка имени хоста в Docker Compose

Вы можете ввести работающий контейнер следующим образом:

docker exec -it container_id bash

Надеюсь, этот быстрый совет для Docker пригодился вам. Следите за новыми советами по Docker.

Если у вас есть какие-либо вопросы или предложения, пожалуйста, не стесняйтесь спрашивать в разделе комментариев.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

10 команд для Docker, без которых вам не обойтись

Docker — полезный инструмент для создания микросервисов. Чтобы эффективнее работать с ним, вам пригодятся команды, 10 из которых мы сегодня обсудим.

Обложка поста 10 команд для Docker, без которых вам не обойтись

Docker — отличный инструмент для создания микросервисов, который позволяет создавать облачные приложения и системы. Чтобы выжать из него максимум через терминал, вам пригодятся 10 команд, перечисленных ниже.

Контейнер запускается путём запуска образа. Образ — исполняемый пакет, который содержит всё необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные среды и конфигурационные файлы.Контейнер создаётся из образа. Это то, чем становится образ во время исполнения (иными словами, образом с состоянием или пользовательским процессом). Вы можете просмотреть список запущенных контейнеров с помощью команды docker ps , прямо как в Linux.

Docker Concepts

  1. docker ps — показывает список запущенных контейнеров. Некоторые из полезных флагов:-a / —all — список всех контейнеров (по умолчанию показывает только запущенные);-q / —quiet — перечислить только id контейнеров (полезно, когда вам нужны все контейнеры).
  2. docker pull — большинство образов создаётся на основе базового образа из Docker Hub. Docker Hub содержит множество готовых образов, которые можно использовать вместо того, чтобы создавать и настраивать свой собственный. Чтобы скачать определённый образ или набор образов (репозиторий), используйте команду docker pull .
  3. docker build — эта команда собирает образ Docker из Dockerfile и «контекста». Контекст сборки — это набор файлов, расположенных по определённому пути или URL. Используйте флаг -t , чтобы задать имя образа. Например, команда docker build -t my_container . соберёт образ, используя текущую директорию, на что указывает точка в конце.
  4. docker run — запускает контейнер, на основе указанного образа. Эту команду можно дополнять другими, например, docker run my_image -it bash запустит контейнер, а затем запустит в нём bash.
  5. docker logs — эта команда используется для просмотра логов указанного контейнера. Можно использовать флаг —follow , чтобы следить за логами работающей программы: docker logs —follow my_container .
  6. docker volume ls — показывает список томов, которые являются предпочитаемым механизмом для сохранения данных, генерируемых и используемых контейнерами Docker.
  7. docker rm — удаляет один и более контейнеров, например, docker rm my_container .
  8. docker rmi — удаляет один и более образов, например, docker rmi my_image .
  9. docker stop — останавливает один и более контейнеров. Команда docker stop my_container остановит один контейнер, а docker stop $(docker ps -a -q) — все запущенные. Более грубый способ — использовать docker kill my_container , который не пытается сначала аккуратно завершить процесс.
  10. Можно комбинировать эти команды. Например, для очистки всех контейнеров и образов:Останавливаем все запущенные контейнеры docker kill $(docker ps -q).Удаляем все остановленные контейнеры docker rm $(docker ps -a -q).Удаляем все образы docker rmi $(docker images -q).

Существует гораздо больше команд для Docker, о которых можно почитать в документации. Пробуйте новые примеры, комбинируйте их, и скоро это войдёт в привычку.

Основные команды управления контейнерами

Эта команда создает контейнер из образа, после создания контейнера он не запускается автоматически. При создании контейнера можно указать команду , которая будет выполнятся по умолчанию при каждом запуске контейнера .

start

эта команда запускает контейнер, который уже существует, но находится в нерабочем состоянии.

docker start [опции] название или ID контейнера 

без опции -a , не будет выводится информация из консоли контейнера , то есть контейнер стартует в фоновом режиме .

run

docker run [опции] название образа [команды][аргументы]docker run command 

Эта команда создает и запускает контейнер из образа , причем если образа не окажется на локальной машине , то он будет загружен из репозитория докер. По сути эта команда совмещает в себе две команды create и start, а иногда еще и третью команда pull .

Ниже пример использования :

Если мы в качестве опции укажем -it , а в качестве команда bash , то попадем в консоль управления созданного контейнера :

Чтоб выйти из консоли контейнера , и вернутся в материнскую ОС , нужно нажать CTR+D.

При запуске можно пробрасывать порты :

docker run -P порт машины: порт контейнера название образа docker run -p 8080:80 httpd # просмотр открытых портов 
docker port название или ID контейнера

Используйте опцию -d , чтобы запустить автономный контейнер:

docker container run -d название образаdocker container run -d nginx

Используйте опцию —name для присвоения контейнеру пользовательского имени:

docker container run -d --name новое имя название образаdocker container run -d --name my_nginx nginx

ps

docker ps 
docker ps -a

отображает в терминале все запущенные контейнеры. если добавить опцию -a отображает все контейнеры, созданные в системе.

В вывод команды попадают следующие параметры:

  • CONTAINER ID — ID конкретного контейнера.
  • IMAGE — образ, используемый контейнером.
  • COMMAND — список команд, которые должны выполняться сразу после запуска.
  • CREATED — статус и время, когда контейнер бы создан (допустим, «35 минут назад»).
  • STATUS — текущее состояние — включен ли и время работы с последнего запуска. Тут может отображаться код выхода и время, когда он произошел.
  • PORTS — порты, используемые контейнером из списка.
  • NAMES — более понятные в сравнении с ID имена, которые можно точно так же использовать для исполнения команд или поиска. генерируются автоматически , при желании можно изменить .

stop

docker stop название или ID контейнера

Эта команда пытается остановить выбранный контейнер, отправляет сигнал SIGTERM, требующий остановить активность, и сохранить пользовательские данные. Если ответ занимает слишком много времени (ожидает около 10 секунд), то следом посылается сигнал SIGKILL, который убивает процесс без сохранения пользовательских данных. После остановки контейнера он не исчезает, а “замораживается”, его статус меняется c Up на Exited . Мы можем перезапускать остановленные контейнеры с помощью команда start .

kill

docker kill название или ID контейнера

выполняет ту же задачу, что и команда stop , но пропускает шаг с отправкой SIGTERM. Сразу выключает контейнер, игнорируя сохранение пользовательских данных.

restart

docker restart [опции] название или ID контейнера 

команда выполняет перезагрузку указанного контейнера.

logs

docker logs [опции] название или ID контейнера 

Выводит логи для указанного контейнера. Представим ситуацию что мы запустили контейнер без опции -a . он запустился , исполнился и закрылся , мы не увидим в выводе не какой информации. Если же использовать команду logs , то мы можем увидеть подробный вывод процессов произошедших с контейнером. То есть Docker хранит за каждый контейнер логи , и мы можем просмотреть их в любое время используя команду logs , это очень удобно . Если же указать ключ follow и название контейнера, то в терминал в реальном времени будут выводиться логи Docker. Так можно беспрерывно наблюдать за его работой и возможным появлением ошибок.

exec

docker exec[опции] название или ID контейнера[команды]docker exec -it

Выполняем команду в указанном контейнере (контейнер должен быть запущен), если не использовать ключ -it то команда будет выполнена в фоновом режиме.

ubuntu:~$ docker exec -it 9dc19675e327 lsbin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
ubuntu:~$

После выполнения команды возвращаемся назад в материнскую ОС . Если же нам нужно попасть в консоль управления одного из запущенных контейнеров , то в качестве команды для выполнения нужно передать sh или bash и мы попадем в консоль контейнера:

user@yst-ubuntu:~$ docker exec -it 6a9620c91a98 bash 
root@6a9620c91a98:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@6a9620c91a98:/#

Чтоб выйти из консоли контейнера , и вернутся в материнскую ОС , нужно нажать CTR+D.

inspect

docker inspect [опции] название или ID контейнера 

Отображает подробную информацию для указанного контейнера.

rm

docker rm название или ID контейнера 

Команда удаления контейнеров. Можно удалить сразу несколько контейнеров , для этого надо их перечислить :

docker rm fe6193271073 e52dce45d208 c7117b4be1ab 6756101e4817 

Перед удалением контейнера необходимо его выключить (если он включен ) с помощью команды stop .

Основные команды управления образами

Dockerfile

В файлах Dockerfile содержатся инструкции по созданию образа. Ниже приведен пример Dockerfile :

# Указываем базовый или родительский образ
FROM alpine
# Устанавливаем в контейнер пакеты, apk — это сокращение от Alpine #Linux package manager (менеджер пакетов Alpine Linux).при #использовании Ubuntu, для установки пакетов может понадобиться #команда вида RUN apt-get
RUN apk add --update redis
# указываем команду, которая будет выполнена при запуске контейнера. # В Файле может присутствовать лишь одна инструкция CMD.
CMD ["redis-server"]

Инструкции Dockerfile

  • FROM — задаёт базовый (родительский) образ.
  • LABEL — описывает метаданные. Например — сведения о том, кто создал и поддерживает образ.
  • ENV — устанавливает постоянные переменные среды.
  • RUN — выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов.
  • COPY — копирует в контейнер файлы и папки.
  • ADD — копирует файлы и папки в контейнер, может распаковывать локальные .tar-файлы.
  • CMD — описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен. Аргументы могут быть переопределены при запуске контейнера. В файле может присутствовать лишь одна инструкция CMD.
  • WORKDIR — задаёт рабочую директорию для следующей инструкции.
  • ARG — задаёт переменные для передачи Docker во время сборки образа.
  • ENTRYPOINT — предоставляет команду с аргументами для вызова во время выполнения контейнера. Аргументы не переопределяются.
  • EXPOSE — указывает на необходимость открыть порт.
  • VOLUME — создаёт точку монтирования для работы с постоянным хранилищем.

build

Эта команда позволяет собрать образ на основе данных из Dockerfile.

docker image build [опции] название и адрес файла Dockerfile, из которого будет собран образ.

Допустим мы создали Dockerfile и разместили его в директории redis. Чтоб собрать образ нам нужно перейти в директорию redis и выполнить команду docker build .

Таким образом у нас создался образ с ID ff3acb4019ee , далее на основе этого образа можно создать контейнер и запустить его используя команды create , start -a , или run .

images

docker images

Эта команда показывает все образы Docker , которые хранятся на машине.

search

docker search [опции] название образаdocker search python 

Ищем образы в реестре Docker Hub.

Pull

docker pull [опции] название образа 
docker pull nginx

Для загрузки образа используется команда docker pull . После загрузки образа, контейнер на его основе не запускается , для загрузки и запуска используется команда run.

Push

docker push [опции] название образа 

С помощью этой команда можно разместить созданный образ в Docker hub.

history

docker history [опции] название образа.

Смотрим историю образа .

inspect

docker inspect [опции] название или ID образа docker inspect alpine

Отображается информации о указанном образе .

rm

docker image rm название образа

Команда удаления одного или нескольких образов Docker

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *