docker run -d --name имя_контейнера имя_образа
-d - запуск в автономном режиме
--name - имя контейнера
в конце - имя_образа
Примеры
docker run --rm -i -t --entrypoint=/bin/bash
docker run --name имя_контейнера -d -p 80:80 имя_образа
Запуск нового контейнера с проброшенным портом (слева - порт сервиса, справа - через какой порт будут уходить сообщения)
Отправка команды терминалу в контейнер:
docker exec -it <container_id> <Команда>
-i - Оставить STDIN открытым, даже если контейнер запущен в неприкрепленном режиме
-t, -tty - Запустить псевдотерминал
Работа с контейнерами
Запущенные контейнеры:
Удалить контейнер:
Работа с файлами внутри контейнера: чтобы заменить какой-нибудь файл в контейнере, используется команда docker cp. Она копирует файл из локальной файловой системы в контейнер:
Где qa_nginx и /etc/nginx/nginx.conf — имя контейнера и путь к скачиваемому файлу из контейнера, соответственно, а /tmp/nginx.conf путь до нового файла в текущей операционной системе.
Остановить контейнер
Удалить все контейнеры, которые остановлены
Сохранение изменений в контейнере
Если мы удалим наш контейнер и вновь его запустим, то все наши изменения, сделанные через консоль, исчезнут. Чтобы сохранить изменения используется команда docker commit:
Работа с образами
Список установленных образов:
Установить образ из репозитория:
Можно установить образ из tar-архива (gz/gzip/tgz..):
Удалить образ:
Volumes
Подключение разделов в процессе запуска контейнера (например, если надо передать какие-то файлы на обработку):
Можно устанавливать права сразу:
Работа с логами
Информация о занимаемом объеме памяти
Ограничение сети
Другие сетевые адаптеры (можно делать свои):
bridge — сеть между контейнерами на одном хосте (default)
overlay — сеть между контейнерами на разных хостах
Есть такая проблема. Пусть есть несколько контейнеров, запущенных на одной машине. В случае, если один контейнер выедает все ресурсы (например озу), то от этого падают все контейнеры. Такое поведение не приемлемо, если есть контейнеры критичные и которые by design не могут выжирать столько ресурсов.
Решение — разделять важные и о не очень контейнеры на cgroups
У докера есть опция —cgroup-parent — ты можешь сделать цгруппу где ограничить общую память до 14 ГБ, а потом внутри запускать безлимитные контейнеры, например (или выставить дополнительные лимиты для контейнеров внутри).
docker commit 2404abeecf66 nginx_mc
Данная команда создаст новый образ nginx_mc,
в котором будет уже установленный редактор mc.
Здесь 2404abeecf66 - id контейнера, который можно узнать выполнив команду docker ps.
docker image ls
docker pull <repo>
docker load -i <some_image>.tar[.gz]
docker image rm <image_id>
docker run --rm -it -v /path/to/dir/on/home:/path/to/dir/on/container ...
... -v /path1:/path2:ro ...
Посмотреть логи
docker logs <container_name>
--timestamps - писать время
--since ГГГГ-ММ-ДД
--since ГГГГ-ММ-ДДТЧЧ (ex: 2018-01-30Т11:00)
--tail N - последние n строк
-f, --follow - непрерывный вывод
Узнать, где лежат:
docker inspect --format='{{.LogPath}}' <container_name>