2022-06-30
551

Команды Docker

Образы

  • docker build -t <image-name> <путь к каталогу с dockerfile> сборка на основе dockerfile. Указывается не сам dockerfile, а каталог в котором он находится
  • docker build -t <image-name> . сборка на основе dockerfile, если dockerfile в текущем каталоге
  • docker build -t <image-name> . --no-cache не использовать кэш при сборке образа
  • docker images вывод списка загруженных образов
  • docker pull <image-name>:<tag> скачать образ docker
  • docker rmi <image-name> удалить загруженный образ
  • docker rmi $(docker images -q) удалить все загруженные образы
  • docker history <image-name> вывод всех уровней образа, то есть вывод операций, которые осуществлялись с образом
  • docker commit <container-name> <image-name> превращение контейнера в образ, он появится в списке установленных образов. При создании образа с таким же именем, как у уже существующего образа, имя присваивается новому образу, а старый остается с именем <none>
  • docker save <image-name> > file.tar сохранение образа в tar архив
  • docker load file.tar загрузка образа из tar архива
Можно отправить свой образ на docker hub, для этого нужно зарегистрироваться там, собрать образ с именем <username>/<image-name>:<tag>
Авторизоваться на docker hub командой
docker login -u <username> -p <password>
Отправить образ
docker push <username>/<image-name>:<tag>

Контейнеры

  • docker run <parameters> <image-name> запуск контейнера из образа
    • --name <container-name> присвоить имя контейнеру
    • -d запуск контейнера в фоновом режиме
    • -it запуск контейнера в интерактивном режиме, для выхода из контейнера используется exit
    • -e TZ=Europe/Moscow передача переменной окружения в контейнер
    • -v /dir/source:/dir/dest примонтирование каталога системы каталогу контейнера, при этом /dir/source - это каталог системы, /dir/dest - каталог контейнера
    • -v <volume-name>:/dir/dest примонтирование Volume, /dir/dest это каталог внутри контейнера, <volume-name> должен быть уже создан
    • -p 9999:3128 проброс порта из контейнера, порт 3128 контейнера пробрасывается в основную систему как порт 9999
    • --rm не сохранять отработавший контейнер
    • --link <container-name>:<name> ссылка на другой контейнер, для доступа по сети, <container-name> - это имя контейнера, который должен видеть запускаемый контейнер, <name> - это имя контейнера, которое будет записано в /etc/hosts запускаемого контейнера и по этому имени можно будет обращаться к другому контейнеру
    • --network <network-name> подключение контейнера к сети, которая должна быть заранее создана командой docker network create <network-name>
    • --restart=always запускать контейнер при перезагрузке системы
    • --device-write-bps /dev/sda:1MB ограничить, внутри контейнера, скорость записи на диск до 1 мегабайта в секунду
  • docker create <image-name> создание контейнера не запуская его
  • docker rename <container-name> <new-container-name> переименование контейнера
  • docker restart <container-name> перезапуск контейнера
  • docker stop <container-name> остановка контейнера по его имени
  • docker stop $(docker ps) остановка всех контейнеров
  • docker exec -it <container-name> bash открытие командной оболочки контейнера, если в контейнере нет можно использовать sh
  • docker exec -d <container-name> <command> выполнить команду в запущенном контейнере
  • docker diff <container-name> отображение изменений в контейнере
  • docker kill <container-name> уничтожение контейнера, отправляя сигнал SIGKILL
  • docker logs <container-name> вывод списка логов запущенного контейнера
Характеристики контейнера хранятся в json файле их можно посмотреть командой
docker container inspect <container-name>
Ip адрес контейнера можно посмотреть командой
docker container inspect -f '{{json .NetworkSettings.IPAddress}}' <container-name>

Volume

/dir/dest это каталог внутри контейнера. При этом данные, которые приложение будет хранить в каталоге контейнера /dir/dest будут сохранятся в volume, его при желании, можно подключить к другому контейнеру
  • docker volume create <volume-name> создание volume
  • docker volume rm <volume-name> удаление volume
  • docker volume prune удаление всех volume
  • docker volume ls вывод списка созданных volume
  • docker run -v <volume-name>:/usr/src/app/resources <image> запустить контейнер с примонтированием <volume-name>

Сеть

  • docker network create <network-name> создание внутренней docker сети для контейнеров
  • docker network ls вывод списка созданных сетей
  • docker network connect <network-name> <container-name> подключение запущенного контейнера к сети
  • docker network disconnect <network-name> <container-name> отключение запущенного контейнера от сети
  • docker network inspect <network-name> вывод подключенных контейнеров к сети
  • docker network rm <network-name> удаление сети
  • docker network prune <network-name> удаление всех добавленных сетей
  • docker run --network <network-name> подключение контейнера к уже созданной сети в момент запуска

Удаление контейнеров

После каждого запуска и остановки копятся отработавшие контейнеры и если не нужно их сохранять, можно при запуске указать ключ --rm, например docker run --rm -it python:3 python.

  • docker rm 831ac84dg43232 6301fc3de22d удаление отработавших контейнеров вручную указав id, можно указать сразу несколько
  • docker rm $(docker ps -aq) удаление всех контейнеров

Процессы

  • docker ps вывод списка запущенных контейнеров
  • docker ps -a вывод списка всех контейнеров, запущенных и незапущенных
  • docker ps -aq вывод только id
  • docker top <container-name> вывод списка запущенных процессов контейнера
  • docker stats вывод статистики использования ресурсов всеми контейнерами
  • docker stats <container-name> вывод статистики использования ресурсов указанным контейнером