Команды — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
(не показано 20 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | '''<font color=blue>Команды управления образами</font>''' | ||
+ | |||
+ | * '''docker image''' ''command'' | ||
+ | '''build''' — сборка образа | ||
+ | '''pull''' - скачать образ | ||
+ | '''push''' — отправка образа в удалённый реестр | ||
+ | '''ls''' — вывод списка образов | ||
+ | '''rm''' — удаление образа | ||
+ | '''history''' — вывод сведений о слоях образа | ||
+ | '''inspect''' — вывод подробной информации об образе, в том числе — сведений о слоях | ||
+ | |||
+ | |||
+ | # docker image build --no-cache -t my_repo/my_image:my_tag . - собрать образ Docker | ||
+ | '''--no-cache''' - отключить кеширование<br> | ||
+ | '''-t''' - флаг указывает Docker на то, что создаваемому образу надо назначить предоставленный в команде тег. В данном случае это my_tag. Точка в конце команды указывает на то, что образ надо собрать с использованием файла Dockerfile, находящегося в текущей рабочей директории | ||
+ | |||
+ | # docker image push my_repo/my_image:my_tag - отправить образ в реестр Docker Hub, предварительно надо залогиниться (docker login) | ||
+ | # docker image rm my_image - удалить образ, если образ хранится в удалённом репозитории, он оттуда удалён не будет(docker rmi my_image - аналог) | ||
+ | # docker image rm $(docker images -aq) - удалить все локальные образы | ||
+ | Перед удалением образа надо удалить контейнер который использует этот образ<br> | ||
+ | '''-f''' - удалит даже если к образу привязан контейнер | ||
+ | |||
+ | Есть полезная утилита для исследования образов - '''dive''' | ||
+ | |||
+ | |||
'''<font color=blue>Команды управления контейнерами</font>''' | '''<font color=blue>Команды управления контейнерами</font>''' | ||
Строка 4: | Строка 29: | ||
'''create''' - создание контейнера из образа | '''create''' - создание контейнера из образа | ||
'''run''' - создание контейнера и его запуск | '''run''' - создание контейнера и его запуск | ||
− | '''start''' - запуск существующего | + | '''start''' - запуск существующего контейнера |
'''stop''' - остановка работающего контейнера с отправкой главному процессу контейнера сигнала SIGTERM, и, через некоторое время, SIGKILL | '''stop''' - остановка работающего контейнера с отправкой главному процессу контейнера сигнала SIGTERM, и, через некоторое время, SIGKILL | ||
'''ls''' - вывод списка работающих контейнеров | '''ls''' - вывод списка работающих контейнеров | ||
Строка 11: | Строка 36: | ||
'''inspect''' - вывод подробной информации о контейнере | '''inspect''' - вывод подробной информации о контейнере | ||
'''logs''' - вывод логов | '''logs''' - вывод логов | ||
− | |||
− | |||
# docker container create my_repo/my_image:my_tag - создание контейнера | # docker container create my_repo/my_image:my_tag - создание контейнера | ||
Строка 18: | Строка 41: | ||
# docker container run -h docker.site.ru --name first_container my_image - создать и запустить контейнер | # docker container run -h docker.site.ru --name first_container my_image - создать и запустить контейнер | ||
# docker container run -it -p 8080:8000 -e TZ=Europe/Moscow --rm my_image | # docker container run -it -p 8080:8000 -e TZ=Europe/Moscow --rm my_image | ||
− | # docker run --link mysqlserver:db -p 8080:8080 adminer - соединение двух контейнеров м/у собой. в данном случае php-приложения с базой | + | # docker run --link mysqlserver:db -p 8080:8080 adminer - соединение двух контейнеров м/у собой. в данном случае php-приложения с базой, в контейнере adminer ссылка на контейнер mysqlserver должна быть обозначена именем db. для этого в контейнере adminer будет создана запись в /etc/hosts |
'''-i''' - благодаря этому флагу поток STDIN поддерживается в открытом состоянии даже если контейнер к STDIN не подключён<br> | '''-i''' - благодаря этому флагу поток STDIN поддерживается в открытом состоянии даже если контейнер к STDIN не подключён<br> | ||
'''-t''' - благодаря этому флагу выделяется псевдотерминал, который соединяет используемый терминал с потоками STDIN и STDOUT контейнера<br> | '''-t''' - благодаря этому флагу выделяется псевдотерминал, который соединяет используемый терминал с потоками STDIN и STDOUT контейнера<br> | ||
Для того чтобы получить возможность взаимодействия с контейнером через терминал нужно совместно использовать флаги -i и -t | Для того чтобы получить возможность взаимодействия с контейнером через терминал нужно совместно использовать флаги -i и -t | ||
− | '''-p''' - это интерфейс(порт), благодаря которому контейнер взаимодействует с внешним миром. Конструкция | + | '''-p''' - это интерфейс(порт), благодаря которому контейнер взаимодействует с внешним миром. Конструкция 8080:8000, перенаправляет порт 8080 хоста на порт 8000 Docker-а, на котором выполняется контейнер<br> |
'''-d''' - флаг запускающий контейнер в фоновом режиме (как демон)<br> | '''-d''' - флаг запускающий контейнер в фоновом режиме (как демон)<br> | ||
'''-e''' - флаг передаёт переменные окружения<br> | '''-e''' - флаг передаёт переменные окружения<br> | ||
− | '''- | + | '''-h(--hostname)''' - задаёт имя хоста<br> |
'''--rm''' - флаг автоматически удаляет контейнер после того, как его выполнение завершится<br> | '''--rm''' - флаг автоматически удаляет контейнер после того, как его выполнение завершится<br> | ||
'''--name''' - имя контейнера<br> | '''--name''' - имя контейнера<br> | ||
+ | '''--memory=100m''' - ограничить использование памяти до 100mb<br> | ||
+ | '''--cpus=".2"''' - ограничить использование cpu, от целой секунды будет использоваться 0.2(1cpu это 1сек использования cpu) | ||
# docker container logs -f my_container - вывести логи контейнера | # docker container logs -f my_container - вывести логи контейнера | ||
Строка 41: | Строка 66: | ||
# docker container rm $(docker ps -aq) - удалить все контейнеры, которые на момент вызова этой команды не выполняются | # docker container rm $(docker ps -aq) - удалить все контейнеры, которые на момент вызова этой команды не выполняются | ||
# docker container rm $(docker ps -aq -f status=exited) - тоже самое | # docker container rm $(docker ps -aq -f status=exited) - тоже самое | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Строка 84: | Строка 85: | ||
# docker run -d -P --name web -v /webapp training/webapp python app.py - подключение одиночного тома к контейнеру | # docker run -d -P --name web -v /webapp training/webapp python app.py - подключение одиночного тома к контейнеру | ||
− | # docker run -d -P --name web -v /srv/webapp:/tmp training/webapp python app.py - монтируем каталог хоста webapp в директорию /tmp контейнера | + | # docker run -d -P --name web -v /srv/webapp/:/tmp/ training/webapp python app.py - монтируем каталог хоста webapp в директорию /tmp контейнера |
# docker run -d -P --name web -v /srv/test:/tmp/test training/webapp python app.py - смонтировать файл test в директорию /tmp контейнера | # docker run -d -P --name web -v /srv/test:/tmp/test training/webapp python app.py - смонтировать файл test в директорию /tmp контейнера | ||
'''-v''' - добавить том данных к контейнеру<br> | '''-v''' - добавить том данных к контейнеру<br> | ||
Строка 115: | Строка 116: | ||
# docker system prune — удаление неиспользуемых контейнеров, сетей и образов, которым не назначено имя и тег | # docker system prune — удаление неиспользуемых контейнеров, сетей и образов, которым не назначено имя и тег | ||
# docker container ls -s - узнать примерный размер выполняющегося контейнера | # docker container ls -s - узнать примерный размер выполняющегося контейнера | ||
− | # docker container ls -a -s - список выполняющихся контейнеров и снабжает этот список некоторыми полезными сведениями о них | + | # docker container ls -a -s - выводит список выполняющихся контейнеров и снабжает этот список некоторыми полезными сведениями о них |
# docker exec -it my_container bash - подключиться к терминалу контейнера | # docker exec -it my_container bash - подключиться к терминалу контейнера | ||
# docker tag outlander:1 outlander:copy - сделать копию образа | # docker tag outlander:1 outlander:copy - сделать копию образа | ||
Строка 128: | Строка 129: | ||
Создание нового образа из модифицированного контейнера | Создание нового образа из модифицированного контейнера | ||
+ | # docker commit myapp outlander/myapp | ||
# docker commit -m "add mc" -a "onopriyko" df0d33cd4b54 outlander/debian_stretch:v1 | # docker commit -m "add mc" -a "onopriyko" df0d33cd4b54 outlander/debian_stretch:v1 | ||
− | + | '''-m ''' - описание коммита<br> | |
− | + | '''-a''' - автор коммита | |
Текущая версия на 16:55, 18 сентября 2023
Команды управления образами
- docker image command
build — сборка образа pull - скачать образ push — отправка образа в удалённый реестр ls — вывод списка образов rm — удаление образа history — вывод сведений о слоях образа inspect — вывод подробной информации об образе, в том числе — сведений о слоях
# docker image build --no-cache -t my_repo/my_image:my_tag . - собрать образ Docker
--no-cache - отключить кеширование
-t - флаг указывает Docker на то, что создаваемому образу надо назначить предоставленный в команде тег. В данном случае это my_tag. Точка в конце команды указывает на то, что образ надо собрать с использованием файла Dockerfile, находящегося в текущей рабочей директории
# docker image push my_repo/my_image:my_tag - отправить образ в реестр Docker Hub, предварительно надо залогиниться (docker login) # docker image rm my_image - удалить образ, если образ хранится в удалённом репозитории, он оттуда удалён не будет(docker rmi my_image - аналог) # docker image rm $(docker images -aq) - удалить все локальные образы
Перед удалением образа надо удалить контейнер который использует этот образ
-f - удалит даже если к образу привязан контейнер
Есть полезная утилита для исследования образов - dive
Команды управления контейнерами
- docker container command
create - создание контейнера из образа run - создание контейнера и его запуск start - запуск существующего контейнера stop - остановка работающего контейнера с отправкой главному процессу контейнера сигнала SIGTERM, и, через некоторое время, SIGKILL ls - вывод списка работающих контейнеров kill - остановка работающего контейнера с отправкой главному процессу контейнера сигнала SIGKILL rm - удаление остановленного контейнера inspect - вывод подробной информации о контейнере logs - вывод логов
# docker container create my_repo/my_image:my_tag - создание контейнера # docker container start my_container - запуск существующего контейнера # docker container run -h docker.site.ru --name first_container my_image - создать и запустить контейнер # docker container run -it -p 8080:8000 -e TZ=Europe/Moscow --rm my_image # docker run --link mysqlserver:db -p 8080:8080 adminer - соединение двух контейнеров м/у собой. в данном случае php-приложения с базой, в контейнере adminer ссылка на контейнер mysqlserver должна быть обозначена именем db. для этого в контейнере adminer будет создана запись в /etc/hosts
-i - благодаря этому флагу поток STDIN поддерживается в открытом состоянии даже если контейнер к STDIN не подключён
-t - благодаря этому флагу выделяется псевдотерминал, который соединяет используемый терминал с потоками STDIN и STDOUT контейнера
Для того чтобы получить возможность взаимодействия с контейнером через терминал нужно совместно использовать флаги -i и -t
-p - это интерфейс(порт), благодаря которому контейнер взаимодействует с внешним миром. Конструкция 8080:8000, перенаправляет порт 8080 хоста на порт 8000 Docker-а, на котором выполняется контейнер
-d - флаг запускающий контейнер в фоновом режиме (как демон)
-e - флаг передаёт переменные окружения
-h(--hostname) - задаёт имя хоста
--rm - флаг автоматически удаляет контейнер после того, как его выполнение завершится
--name - имя контейнера
--memory=100m - ограничить использование памяти до 100mb
--cpus=".2" - ограничить использование cpu, от целой секунды будет использоваться 0.2(1cpu это 1сек использования cpu)
# docker container logs -f my_container - вывести логи контейнера # docker top my_container - процессы в контейнере # docker container ls - список запущенных контейнеров # docker container ls -a - отобразит не запущенные контейнеры # docker container run -d my_image - контейнер запустится в фоновом режиме # docker container stop my_container - завершение работы контейнера(у контейнера есть, по умолчанию, 10 секунд, на то, чтобы завершить работу) # docker container kill my_container - остановить контейнер быстро, не заботясь о корректном завершении его работы # docker container kill $(docker ps -q) - быстро остановить все работающие контейнеры # docker container rm my_container - удаление остановленного контейнера (docker rm my_container - аналог) # docker container rm $(docker ps -aq) - удалить все контейнеры, которые на момент вызова этой команды не выполняются # docker container rm $(docker ps -aq -f status=exited) - тоже самое
Команды управления томами
- docker volume command
create --name my_volume - создать самостоятельный том(в Debian тома создаются в /var/lib/docker/volumes) ls - просмотреть список томов Docker inspect my_volume - исследовать конкретный том rm my_volume - удалить том prune - удалить все тома, которые не используются контейнерами
Если том связан с каким-либо контейнером, такой том нельзя удалить до тех пор, пока не удалён соответствующий контейнер. При этом, даже если контейнер удалён, Docker не всегда это понимает. Если это случилось - надо воспользоваться командой: docker system prune. Она предназначена для очистки ресурсов Docker. После выполнения этой команды, должна появиться возможность удалить тома, статус которых до этого определялся неправильно.
# docker container run --mount source=my_volume, target=/container/path/for/volume my_image - создать том во время создания контейнера
параметры --mount
- type - тип монтирования. Значением для соответствующего ключа могут выступать bind, volume или tmpfs. Мы тут говорим о томах, то есть - нас интересует значение volume
- source - источник монтирования. Для именованных томов это — имя тома. Для неименованных томов этот ключ не указывают. Он может быть сокращён до src
- destination - путь, к которому файл или папка монтируется в контейнере. Этот ключ может быть сокращён до dst или target
- readonly - монтирует том, который предназначен только для чтения. Использовать этот ключ необязательно, значение ему не назначают
# docker run -d -P --name web -v /webapp training/webapp python app.py - подключение одиночного тома к контейнеру # docker run -d -P --name web -v /srv/webapp/:/tmp/ training/webapp python app.py - монтируем каталог хоста webapp в директорию /tmp контейнера # docker run -d -P --name web -v /srv/test:/tmp/test training/webapp python app.py - смонтировать файл test в директорию /tmp контейнера
-v - добавить том данных к контейнеру
Тома Docker по умолчанию монтируются в режиме RW, установить режим только для чтения можно так
-v /webapp:/tmp:ro
Если есть какие-то постоянные данные которые надо сделать доступными для контейнеров, или использовать из временных контейнеров, то лучше всего создать контейнер с именованным томом данных, а затем монтировать данные из него.
# docker create -v /dbdata --name dbstore training/postgres /bin/true - создаём именованный контейнер(dbstore) # docker run -d --volumes-from dbstore --name db1 training/postgres - монтируем том /dbstore к контейнеру(db1) используя флаг --volumes-from # docker run -d --volumes-from dbstore --name db2 training/postgres - ещё к одному(db2)
Поместив данные в /dbdata увидим их в контейнерах db1 и db2
Команды работы с сетью
- docker network command
ls - список сетей create -d bridge my-bridge-network - создать сеть типа bridge inspect bridge - посмотреть параметры сети, в данном случае bridge disconnect bridge my_container - отключить контейнер от сети
# docker run -d --name my_container --network my-bridge-network my_image - добавление контейнера в сеть # docker inspect --format='{{json .NetworkSettings.Networks}}' my_container - сетевые параметры контейнера
Разные команды
# docker search <image> - искать образ # docker login - вход в реестр Docker Hub. Понадобятся логин/пароль # docker logout - выход из Docker Hub # docker system prune — удаление неиспользуемых контейнеров, сетей и образов, которым не назначено имя и тег # docker container ls -s - узнать примерный размер выполняющегося контейнера # docker container ls -a -s - выводит список выполняющихся контейнеров и снабжает этот список некоторыми полезными сведениями о них # docker exec -it my_container bash - подключиться к терминалу контейнера # docker tag outlander:1 outlander:copy - сделать копию образа # docker diff container - список файлов изменённых в работающем контейнере # docker rename name1 name2 - переименование контейнера # docker ps - отобразить запущенные контейнеры # docker ps -a - отобразить все контейнеры # docker ps -l - информация о последнем запущенном контейнере # docker ps -aq - отобразить айдишники всех контейнеров
Создание нового образа из модифицированного контейнера
# docker commit myapp outlander/myapp # docker commit -m "add mc" -a "onopriyko" df0d33cd4b54 outlander/debian_stretch:v1
-m - описание коммита
-a - автор коммита
Use the Docker command line
https://docs.docker.com/engine/reference/commandline/cli/
Шпаргалка с командами Docker
https://habr.com/ru/company/flant/blog/336654/