March 4, 2023

Docker

Краткий конспект по курсу на Stepik

Контейнеры в docker - это полностью изолированные среды, в них свои процессы и службы, собственные сетевые интерфейсы, собственные средства монтирования.

Docker образ - это пакет или шаблон, аналогичный шаблону виртуальной машины. Он используется для создания одного или нескольких контейнеров. Docker запускает экземпляры образов, которые изолированы и имеют собственные среды и процессы.

Установка Docker на Linux (Ubuntu)

Ссылка на официальную документацию по установке на Ubuntu

Перед установкой необходимо удалить старые версии докера. Для этого в терминале вводим команду

sudo apt-get remove docker docker-engine docker.io containerd runc

Установка репозитория и зависимостей Docker

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Если не установлен curl, то установить командой

sudo apt install -y curl

Добавить своего пользователя в группу Docker, чтобы работать с образами и контейнерами без sudo

sudo usermod -aG docker @USER

Убеждаемся, что установка Docker прошла успешно

service docker start
docker run hello-world

Должно появится следующее окно

Чтобы проверить какая версия докера установлена, нужно набрать команду:

docker version

Чтобы обновить Docker, нужно повторить всю процедуру сначала, то есть удалить старую версию и установить новую. В этом случае данную инструкцию повторить сначала.

Если необходимо удалить без переустановки, то действовать по следующим шагам, описаны ниже.

Удаление Docker, CLI, контейнеров и Docker Compose:

sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

Удаление images, containers и volumes из пользовательских библиотек

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Команды Docker

docker run название образа - используется для запуска контейнера из образа

docker ps - просмотреть список запущенных контейнеров и информацию о них

docker ps -a - показывает весь список контейнеров и запущенных и нет

docker stop id контейнера или его имя - остановить работающий контейнер

docker rm название контейнера - удалить существующий контейнер (rm сокращенно от remove)

docker images - показывает все доступные на хосте образы, их id, теги и размеры

docker rmi название образа - удаление образов

docker pull название образа - скачает образ, но не будет его запускать

docker exec название или id контейнера cat /etc/название образа - используется для выполнения команд в работающем докер контейнере

ctrl + c - для выхода (для остановки работы контейнера)

docker run -d название контейнера - для запуска контейнера в фоновом режиме

docker attach id или имя контейнера - прикрепить контейнер к консоли

docker stats - посмотреть статистику по контейнерам (какой объем памяти потребляют и т.п.)

docker run -it --name webserver nginx - запустить контейнер с названием webserver с образом nginx в интерактивном режиме

docker update --restart always redis - используется для обновления restart policy контейнера redis в значение always

docker container cp webapp:/etc/nginx /tmp/ - скопировать директорию nginx из контейнера webapp на хост по пути /tmp/

docker system info - проверить драйвер логирования по умолчанию

docker run -it -d --log-driver none redis - запустить контейнер redis и быть уверенным, что для него не будет настроено логов

sudo systemctl status docker - проверить статус службы docker на хосте

-p 8080:80/udp - настроит Docker на проброс порта 80 UDP в контейнере на порт 8080 докер-хоста

docker run -p 80:5000 nginx/webapp - пользователи смогут получить доступ по http://10.0.0.13:80 весь трафик, полученный на порт 80 будет маршрутизироваться на порт контейнера(5000).

docker inspect webapp - получить сводку важной информации о контейнере webapp (например сетевые адреса, переменные окружения, политику рестарта и т.д.)

docker logs -f my-app - получить поток логов контейнера my-app

docker run -v /opt/datadir/:/var/lib/mysql mysql - хранение специальных данных в контейнере. Нужно для того, чтобы при удалении контейнера не потерялись необходимые данные. В примере данные не будут храниться в контейнере, а будут подключены из вне, в данном случае из директории /opt/datadir/.

Список доступных образов для запуска можно посмотреть на сайте dockerhub

Создание контейнера с образом redis и именем redis без запуска:

docker create --name redis redis

Чтобы запустить образ набираем команду

docker run название образа
docker run redis - запуск redis
docker run ansible - запуск ansible
docker run redis:5.0 - запуск определенной версии образа

Чтобы войти в контейнер, используем параметр -it. Пример, запускаем контейнер с операционной системой alpine, с помощью параметра -it входим внутрь контейнера, sh - для запуска оболочки shell. С помощью приведенной ниже команды запустилась операционная система alpine и оболочка shell. Теперь мы можем работать с операционной системой alpine через терминал. Чтобы выйти из терминала alpine, нужно набрать exit.

docker run -it alpine sh

Чтобы запустить приложение в фоне нужно добавить в команду параметр -d.

docker run -d alpine

Команда для запуска контейнера с образом и определенным именем. В примере мы запускаем контейнер с именем webapp из образа nginx:1.14-alpine:

docker run --name webapp nginx:1.14-alpine

Прежде чем удалять докер образ, необходимо удалить его контейнеры.

docker stop $(docker ps -q) - остановить все контейнеры
docker rm название контейнера - удаление контейнера
docker rm $(docker ps -aq) - удаление всех контейнеров
docker rm -f(docker ps -aq) - остановить и удалить все контейнеры
docker rmi название образа - удаление образа