Skip to content

General: Docker

seralekseenko edited this page Oct 19, 2021 · 4 revisions

docker_intro.png

Содержание

Установка Docker на Windows 10

Самый удобный способ начать работать с Docker на Windows — с помощью программы Docker Desktop, которую можно скачать по этой ссылке и затем установить. Если при установке возникли какие-то трудности — тогда можно обратиться к справочному разделу на официальном сайте Докера.

docker_tutorial_win.png

Если вы удачно установили программу, то вы должны в итоге при запуске увидеть что-то подобное этому.

Что за докер-шмокер?

Docker — это прослойка над вашей операционной системой (в терминах Docker ее называют «хост»). Эта прослойка позволяет изолировать любое приложение, поместив его в некую сущность (в терминах Docker ее называют «контейнер» по аналогии с грузовыми контейнерами, что перевозят грузовые суда), которая позволяет изолировать приложение (или набор приложений) от других приложений и процессов, запущенных на хосте.

Самому же контейнеру (так как он становится изолированным от любой ОС), вообще неважно где он будет запущен (на Linux, Windows или на чем-то более экзотическом), решая тем самым проблему зависимостей в разных окружениях. Использование контейнеров устраняет проблему «А на моей машине все работало! ¯\_(ツ)_/¯». Главное — чтобы на целевой операционной системе была установлена прослойка в виде Docker для запуска контейнера.

Чтобы запускать одновременно несколько копий одного и того же изолированного приложения (каждое из которых изолировано в своем собственное контейнере) и удобно делиться ими между собой — придумали такую сущность как «образ» (image). А то место, где хранятся образы на локальном компьютере или удаленном хранилище называют репозиторием (repository). Образ — это статический набор файлов (файлов приложения, файлов настроек, и т.д.) инструментов и директорий, словом всего того, что требуется приложению в контейнере, чтобы успешно его запустить в изолированой среде. Скачанные один раз образы могут использоваться как заготовка для запуска новых контейнеров вновь и вновь. У образа есть имя, которое ему дал автор, например короткое «ubuntu» или более уникальное «us.gcr.io/artifacts-298104/java:v11». Когда вы скачиваете себе какой-то образ на локальный компьютер из удаленного хранилища с помощью команды docker pull <имя>, то по-умолчанию вы его скачиваете с удаленного репозитория, который называется Docker Hub.

Соответственно, контейнеры — это основная единица, с которой мы работаем. Работаем посредством передачи команд запущенному докеру или конкретному контейнеру через командную строку.

docker_automata.png

Немного пугающая схема состояний контейнера и переходов между ними, которая в конце курса вам будет казаться очень примитивной.

Небольшая шпаргалка

Всё, что <между угловыми скобками>, нужно изменить на свое значение. У каждого запущенного контейнера должен быть идентификатор (Container ID) и имя (Name), которые автоматически генерируются при первом запуске контейнера автоматически. Их можно узнать, например, с помощью команды docker ps -a:

$ docker ps -a    
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
33593a942a7f        ubuntu              "/bin/bash"         29 minutes ago      Exited (0) 29 minutes ago                       suspicious_tesla

Создание и управление образами images

docker build -t <идентификатор> — Создаёт образ вашего приложения

docker images — Возвращает все существующие на вашем компьютере ( локальные ) образы.

docker rmi <идентификатор> — Удаляет локальный образ найденный по имени или ID

docker tag <старое имя> <новое имя> — Переименовывает локальный образ меняя его имя со <старое имя> на <новое имя>.

docker pull <идентификатор> — Скачивает образ, с основного репозитория Docker, если образ существует.

docker push <идентификатор> — Опубликовывает ваш образ в главном репозитории Docker.

Запуск и управление контейнерами Docker.

docker run -it -d <образ> — Запускает контейнер в скрытом режиме (-d) на основе образа <образ>

docker run -d (скрытно) --rm (удалить после остановки) -p 80:80 (порт хоста:порт контейнера) -e <переменная>=<значение> -v <том или путь на хосте>/<путь внутри контейнера> (монтирование директории) --name <имя контейнера> <имя образа>

docker ps — Выводит в консоль список всех активных контейнеров.

docker ps -a — Выводит в консоль список всех контейнеров, как активных, так и неактивных.

docker stop <идентификатор> — Останавливает контейнер найденный по идентификатору.

docker rm -f <идентификатор> — Удаляет контейнер найденный по идентификатору.

docker logs -f <идентификатор> — Выводит логи событий происходящих в контейнере найденного по идентификатору.

docker exec <идентификатор> <команда> — Запускает выполнение команды в контейнере.

docker exec -it <идентификатор> bash — Открывает командную строку BASH контейнера.

docker inspect <container> — Выводит техническую информацию о контейнере.

docker stop $(docker ps -aq) — Останавливает все активные контейнеры.

docker rm $(docker ps -aq) — Удаляет все остановленные контейнеры.

Системные команды

docker info — Выводит информацию о состоянии Docker, его версию, используемые ресурсы, существующие образы и т.д.

docker system prune — Чистит все неиспользуемые образа, контейнеры, а так же сети (networks) и тома (volumes).

Примеры команд

docker run -it us.gcr.io/artifacts-298104/java:v11 /bin/bash — Опции -i и -t вместе с /bin/bash даёт доступ к выполнению команд в терминале внутри контейнера. Теперь, внутри этого контейнера можно выполнять любые команды, применимые к Ubuntu.

docker run -v C:\projects\docker-example\:/mnt ubuntu /bin/bash — Пример монтирования локальной директории на компьютере к директории в контейнере с помощью опции -v. Монтирование директории в Docker контейнер — это предоставление доступа контейнеру на чтение содержимого вашей папки C:\projects\docker-example\. Помимо чтения из этой папки, так же, контейнер может её изменять, и такая связь является двусторонней: при изменении файлов в основной ОС изменения будут видны в контейнере в директории /mnt, и наоборот.

Материалы к изучению

Дополнительные материалы