Container в Docker
Любой контейнер создается или разворачивается из образа, в соответствующий команде вы должны указать образ из которого хотите создать контейнер. Сначала Docker ищет образ Images локально на компьютере, если данного образа нет, поиск продолжается на hub.docker.com. Способ упаковать приложений и все его зависимостей в единый образ, называется контейнеризация. Каждый контейнер запускается в изолированной среде, не влияющей на основную операционную систему.
Команды для Container
psпросмотр контейнераrunсоздает новый контейнер и сразу включает егоcreateсоздает контейнер из выбранного образаstartактивирует уже существующий контейнерstopпытается остановить выбранный контейнер, отправив ему сигналSIGTERM, требующий завершить всю активность и сохранить пользовательские данные. Если ответ занимает слишком много времени, то следом посылает сигналSIGKILL, чтобы «убить» процесс без сохранения данныхexecзапуск дополнительного процесса в контейнереinspectподробнее рассказывает о выбранном контейнереrmудаляет выбранный контейнер (он должен быть выключен, чтобы команда сработала)
Просмотр контейнера
Посмотреть все установленные Containery на данный момент:
docker ps
Посмотреть все установленные когда-либо Containery:
docker ps -a
В вывод команды попадают следующие параметры:
IDто есть кодовое значение конкретного контейнераIMAGEобраз, используемый контейнеромCOMMANDсписок команд, которые должны выполняться сразу после запускаCREATEDстатус и время, когда контейнер бы создан (допустим, «35 минут назад»)STATUSтекущее состояние включен ли и время работы с последнего запуска. Тут может отображаться код выхода и время, когда он произошелPORTSпорты, используемые контейнером из спискаNAMESболее понятные в сравнении с ID имена, которые можно точно так же использовать для исполнения команд или поиска
Создание контейнера
Создать и запустить Container на основе Images, сначала Docker ищет образ Images локально, потом в репозитории на hub.docker.com:
docker run название_ images
Создать и запустить Container на основе Images определенной версии (тег), сначала Docker ищет образ Images локально, потом в репозитории на hub.docker.com:
docker run название_ images:тег
Создать Container на основе Images, сначала Docker ищет образ Images локально, потом в репозитории на hub.docker.com:
docker create название_ images
Создать Container на основе Images определенной версии (тег), сначала Docker ищет образ Images локально, потом в репозитории на hub.docker.com:
docker create название_ images:тег
Запуск контейнера интерактивно
Запустить контейнер интерактивно в командной строке (контейнер активен пока не вышел из командной строки):
docker run -it название_ images
Выход в главное меню:
Ctrl + c
Выход в главное меню:
exit
Запуск контейнера в фоновом режиме
Запустить контейнер в фоновом режиме (контейнер активен пока не выключится Docker):
docker run -d название_ images
Маппинг портов в контейнере
По умолчанию Docker запускает сервис изолированно — то есть все порты между хостом и Docker-контейнером закрыты. Для того, чтобы получить доступ к сервису с хоста или из внешней сети, нужно использовать сопоставление портов или маппинг.
Маппинг нужен для того, чтобы все запросы, проходящие через порт хоста, перенаправлялись в Docker-контейнер. Другими словами, сопоставление портов делает процессы внутри контейнера доступными извне.
Чтобы открыть доступ к какому-то сервису внутри контейнера, который работает на определенном порту необходимо открыть этот порт. Каждое приложение работает на своем порту который установлен по умолчанию, посмотреть информацию можно воспользовавшись командой docker inspect название_ images.
При запуске нового Docker-контейнера с помощью команды docker run можно сопоставить порты опцией --publish или -p:
Запустить контейнер интерактивно в командной строке на порту 1234 (1234:8080 перенаправление портов, за место 8080 указываем порт на котором работает то, что хотим запустить, информацию можно узнать командой docker inspect название_ images):
docker run -it -p 1234:8080 название_ images
Или с указанием тега:
docker run -it -p 1234:8080 название_ images:тег
Запустить контейнер в браузере на порту 1234 (1234:8080 перенаправление портов, за место 8080 указываем порт на котором работает то, что хотим запустить, информацию можно узнать командой docker inspect название_ images):
docker run -d -p 1234:8080 название_ images
Или с указанием тега:
docker run -d -p 1234:8080 название_ images:тег
Теперь доступ к приложению можно получить, используя порт 1234 на хосте:
http://localhost:1234
Маппинг томов в контейнере
Связанные папки появились с самых первых релизов. Это удобный инструмент, но у него есть ограничения. Этот тип управления данными позволяет связать папку на компьютере пользователя (то есть хосте, на котором установлен Docker Engine) и папку в контейнере. Работать в контейнере и на хосте с такой папкой можно одновременно, все изменения будут отображаться и там, и там. Механизм bind mounts подразумевает, что данные могут быть изменены в любое время как из подключённого контейнера, так и непосредственно на хосте.
Простая подмена исходной папки:
docker run -v ${PWD}:/usr/share/nginx/html nginx
-vподключение тома${PWD}путь к локальной папке (можно указывать за место переменной полный путь C:\Users\lisov\Desktop\docker)/usr/share/nginx/htmlпуть к папке внутри контейнераnginxназвание images
Подмена исходной папки с маппингом портов:
docker run -v ${PWD}:/usr/share/nginx/html -p 8080:80 -d nginx
-vподключение тома${PWD}путь к локальной папке (можно указывать за место переменной полный путь C:\Users\lisov\Desktop\docker)/usr/share/nginx/htmlпуть к папке внутри контейнера-pпубликация порта8080:80порты-dзапуск контейнера в браузереnginxназвание images
Подмена исходной папки с маппингом портов:
docker run -v C:\Users\lisov\Desktop\docker\nginx:/usr/share/nginx/html -p 8080:80 -d nginx
-vподключение томаC:\Users\lisov\Desktop\dockerпуть к локальной папке/usr/share/nginx/htmlпуть к папке внутри контейнера-pпубликация порта8080:80порты-dзапуск контейнера в браузереnginxназвание images
Кастомное имя контейнера
Запустить контейнер в браузере под своим кастомным именем:
docker run -d --name кастомное_имя название_ images
Запуск контейнера
Запустить контейнер:
docker start id_контейнера
Остановка контейнера
Остановить контейнер:
docker stop id_контейнера
Запуск дополнительного процесса в контейнере
Запуск дополнительного процесса возможен только в запущенном контейнере, если в контейнере нет активных процессов, Docker автоматически выключает такой контейнер. Для того чтобы был всегда активный процесс, нужно запускать контейнер в фоновом режиме используя команду docker run -d название_ images. Если контейнер запущен интерактивно, запускается два терминала в разных окнах, в первом запускается контейнер интерактивно при помощи команды docker run -it название_ images, во втором запускается дополнительный процесс командой docker exec -it id_контейнера bash. Запуск дополнительного процесса может использоваться для отладки, или перемещения внутри контейнера, для этого достыпны команты:
lsпосмотреть папки и файлыcdпереход в папкуcatвыводит содержимое файлаnlвыводит содержимое файла с номерами строк
Синтаксис команды:
docker exec -it id_контейнера bash
Внутри дополнительного процесса, доступны полезные команды.
Посмотреть id контейнера:
hostname
Посмотреть ip контейнера:
hostname -I
Проверка доступа в интернет из контейнера:
ping 8.8.8.8
Посмотреть файловую систему контейнера:
ls
Выход в главное меню:
Ctrl + c
Выход в главное меню:
exit
Информация о контейнере
Посмотреть всю информацию о Containere:
docker container inspect id_контейнера
Удаление контейнера
Удаление определенного контейнера:
docker rm id_контейнера
Удаление всех контейнеров:
docker container prune






