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