Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя
Разработчик веб-приложений, начинающий data scientist.  · 5 июн 2022

Docker. Основные команды.

В данном руководстве я собрала некоторые основные команды Docker. Основным источником для данного руководства стала книга Паминдера С. Кочера "Микросервисы и контейнеры Docker". 
Так же хочу отметить, что все команды проверены мной на следующей конфигурации: 
Windows 10 Pro 19043.1645
Docker 20.10.14, build a224086
Если что-то не работает, или работает не так, как ожидаете, попробуйте поискать в документации.
Docker — это открытая платформа для разработки, доставки и запуска приложений. Docker предоставляет возможность упаковывать и запускать приложение в слабо изолированной среде, называемой контейнером, тем самым отделив его от зависимостей инфраструктуры. Это позволяет развернуть и запустить приложение на любом устройстве, где установлен Docker. При этом запускаться оно будет одинаково, вне зависимости от устройства, на котором запускается. Вы можете легко обмениваться контейнерами во время работы и быть уверенными, что все, с кем вы делитесь, получают один и тот же контейнер, который работает одинаково.
Основные команды:
  • docker search [option] term
Команду docker search можно использовать для поиска образов, доступных в реестре Docker.
docker search mysql --filter stars=3
Этой командой я нашла докер-образы MySQL рейтинг которых больше 3 звезд.
Вы всегда можете запросить подсказку воспользовавшись командой: 
docker search --help
  • docker pull image:tag
Команда загружает указанный образ на локальный компьютер из удаленного реестра. 
docker pull mysql:latest
Загружает последнюю версию образа mysql. Тэг latest можно не указывать, команда по умолчанию загружает последнюю версию образа. Можно указать конкретную версию MySQL, необходимую для работы.
  • docker images [OPTIONS]
Возвращает список образов верхнего уровня, доступных на локальном компьютере с дополнительной информацией.
docker images
Важно помнить, что при создании и сборке образов на локальном компьютере дополнительно создаются образы промежуточного уровня.
  • docker rmi [OPTIONS] image [image, image,…]
Удаляет указанный образ или образы на локальном компьютере.
docker rmi mysql
Важно помнить, что удалить образ, в котором есть запущенные контейнеры нельзя, появится ошибка. Чтобы удалить такой образ необходимо остановить все запущенные под этим образом контейнеры. Об этом чуть позже.
  • docker run [OPTIONS] image:tag [commands, args]
Команда разворачивает контейнер в его собственной файловой системе, имеющей набор портов и IP адрес.
Часто используемые ключи и аргументы:
-i – переключает команду в интерактивный режим и открывает STDIN;
-t – создает псевдотерминал tty; 
-d – запуск контейнера в фоновом режиме без поддержки командной строки.
У команды много дополнительных ключей и аргументов, значения которых смотрите в документации.
Пример: загрузим образ Ubuntu и запустим его.
docker pull ubuntu:latest
docker run it ubuntu sh
На локальном компьютере запустился образ Ubuntu и запустился псевдотерминал tty, в котором можно выполнять команды. На скриншоте я вывела сообщение learning docker, посмотрела список каталогов, перешла в каталог bin и вывела список его каталогов.
Для выхода из контейнера наберите команду exit. Чтобы отсоединить контейнер, не останавливая его, нажмите сочетания клавиш ctrl+p, ctrl+q
  • docker ps [OPTIONS]
Выводит список всех контейнеров, запущенных на локальном компьютере.
Чтобы увидеть список всех контейнеров, даже не запущенных, используем ключ –а
docker ps -a
  • docker logs [OPOTIONS]  container
Выводит из указанного контейнера файлы журналов, содержащие стандартный вывод (stderr, stdout). Эта команда доступна только для контейнеров с драйвером журналирования JSON File.
Запустим docker run -it ubuntu sh и выполним какие-нибудь команды, например, ls, cd bin, ls –a
docker run -it ubuntu sh ls cd bin ls a
Запустим второй терминал и найдем идентификатор контейнера командой:
docker ps
Выведем содержимое журнала выбранного контейнера. В данном случае журнал отображает историю выполнявшихся в контейнере команд.
docker logs fe8ad2e544a7 
Пример посложнее.
docker pull mysql:latest docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
--name some-mysql – имя базы данных.
-e MYSQL_ROOT_PASSWORD=my-secret-pw – установка переменной окружения с паролем доступа к БД, пароль должен соответствовать требованиям генерации пароля для MySQL 8.
-d – запуск процесса в фоновом режиме. 
Проверяем список контейнеров и видим наш mysql контейнер. Теперь проверим журнал командой 
docker logs 116625ad075d
В журнале можно увидеть номер порта, по которому MySQL принимает запросы (3306), и версию MySQL. 
Это не стандартный файл журнала MySQL, а файлы журналов контейнера, содержащие стандартный вывод (stderr, stdout).
В документации так же было указано, что если в переменную среды установить MYSQL_RANDOM_ROOT_PASSWORD=yes, то будет сгенерирован случайный пароль, который так же можно будет увидеть в журнале вывода: GENERATED ROOT PASSWORD: …..
  • docker restart [OPTIONS] container
Команда перезапускает указанный контейнер. Давайте попробуем перезапустить созданный ранее контейнер Ubuntu. 
Если посмотреть список запущенных контейнеров, то увидим и наш контейнер Ubuntu. Отмечу, что при перезапуске, не был вызван терминал. Это можно исправить, выполнив команду docker attach.
  • docker attach [OPTIONS] container
Эта команда позволяет передать запущенный контейнер под интерактивное управление или увидеть его стандартный вывод.
После перезапуска контейнера и ввода команды attach всегда будем получать приглашение к вводу, потому что при сборке контейнера использовали ключ –it (в команде run). Прелесть докера, что мы можем запустить тот же образ с другими ключами и параметрами.
Как удалять контейнеры? 
Для начала нужно остановить контейнер, который планируете удалить, командой
  • docker stop [OPTIONS] container_id
Если попытаться удалить запущенный контейнер, получите ошибку. 
Сам докер подсказывает, что можно удалить запущенный контейнер принудительно. Для этого используем флаг -f (force) 
Вернемся к команде docker stop. Команда посылает контейнеру запрос на остановку процесса (SIGTERM), а через некоторое время убивает процесс (SIGKILL). Можно изменить период ожидания после отправки сигнала остановки до убийства процесса ключом –t с числом секунд. Это необходимо, чтобы процесс успел завершить все операции до полной остановки. Так же можно сразу убить процесс командой docker kill (подробнее см.документацию).
После остановки процесса можно удалить его без ключа -f. Контейнер удаляется бесследно.
На просторах интернета я нашла такие команды, но я крайне не рекомендую или пользоваться, т.к. можно удалить то, что не надо.
docker stop $(docker ps -a -q) # остановить все контейнеры docker rm $(docker ps -a -q) # удалить все контейнеры docker rmi $(docker images -q) # удалить все образы
  • docker inspect [OPTIONS] container/image
Выводит подробную информацию о контейнере или образе в формате JSON.
docker inspect --format ='{{.Name}}' container_id – выводит имя контейнера
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id – выводит IP адрес контейнера
docker inspect --format='{{.NetworkSettings.IPAddress}}' container_id – аналогично.
Главный совет, учитесь гуглить. Команды из документации не всегда работают так, как вы ожидаете. Я привела две команды, первая из официальной документации Docker, вторая из книги (немного исправленная). Обе работают, а бывает, что не работает ни одна команда, тогда приходится гуглить и методом научного тыка подбирать то, что сработает конкретно у вас.
  • docker rename container new_name
Надоело копировать/вставлять container_id? Контейнерам можно задать осмысленные имена, и вместо id использовать осмысленное имя.
  • docker exec [OPTIONS] container COMMAND [args, …]
Позволяет выполнить другую команду в уже запущенном контейнере.
docker exec 7902cce3bbb9 ls a
В уже запущенном контейнере Ubuntu выполним команду ls -a
  • docker cp [OPTIONS] container:src_path dest_path
Копирует файл из контейнера на локальную машину.
  • docker cp [OPTIONS] src_path - container:dest_path
Копирует файл с локальной машины в контейнер.
Создадим файл sample.txt на локальной машине. Проверьте, что контейнер запущен и выполните команду (d:/sample.txt - это путь к файлу на моей машине, у Вас он может быть другим):
docker cp d:/sample.txt ubuntu_test:/home
после этого зайдите в контейнер командой:
 docker exec -it ubuntu_test sh
в терминале перейдите в папку /home и посмотрите список доступных файлов. Там появится файл sample.txt, который скопирован с локальной машины.
Далее можно удалить данный файл с локальной машины и выполнить команду:
docker cp ubuntu_test:/home/sample.txt d:/
  • docker pause container [container…]
Приостанавливает выполнение всех процессов в контейнере
  • docker unpause container [container….]
Возобновляет выполнение контейнера.
  • docker create [OPTIONS] image [COMMAND] [args….]
Создает новый уровень контейнера, доступный для записи поверх указанного образа, и подготавливает его для выполнения указанной команды.
После выполнения она выводит идентификатор контейнера. Эта команда отличается от команды docker run -d тем, кто не запускает контейнер. Чтобы запустить контейнер, нужно выполнить команду docker start container.
  • docker commit [OPTIONS] container [repository:tag]
Позволяет создать новый образ вместе со всеми изменениями, которые были произведены в контейнере. 
  • docker diff container
Выводит изменения в файлах и каталогах контейнера в сравнении с образом, с которого этот контейнер был сделан. 
На этом пока все.