Docker (Докер) для чайников
Вступление от автора руководства — Dmytro Yakovenko 2022/04/23: Дорогие мои читатели, я сам чайник в докерах, но куда деваться нужно изучить предметную область. Начнем помолясь:) Как всегда я стараюсь осветить терминологию, второй шаг установку, а дальше какой-нибудь интересную задачу решим с использованием доккера и какую-нибудь распространённую.
Docker (Докер) — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации, контейнеризатор приложений. Docker — это инструмент, позволяющий запустить почти любое приложение со всеми его зависимостями в изолированной среде.
- Docker Image (образы) - собственно, шаблон готового к запуску приложения со всем нужным для работы окружением. Является основой для контейнеров. Команда docker pull используется, чтобы скачать образ.
- Контейнер (Containers) - это уже выполняющийся, запущенный образ (командой docker run), готовый к дальнейшему использованию. Список запущенных контейнеров можно увидеть с помощью команды docker ps.
- Docker Hub (докер хаб) - сервис с реестром образов, где можно брать и загружать свои образы. Грубо говоря, архив всех доступных образов.
- Docker Daemon (демон Докера) - Фоновый сервис, запущенный на хост-машине, который отвечает за создание, запуск и уничтожение Докер-контейнеров. Демон — это процесс, который запущен на операционной системе, с которой взаимодействует клиент.
- Docker Client (клиент Докера) - Утилита командной строки, которая позволяет пользователю взаимодействовать с демоном. Существуют другие формы клиента, например, Kitematic, с графическим интерфейсом.
Отличия Docker от виртуальной машины
Есть два способа упаковки и переноса приложений со всеми его библиотеками между различными системами: использовать виртуальную машину или Docker-контейнер. Если выбрать виртуальную машину:
- это ещё одна полноценная операционная система, в которой живут десятки процессов;
- долгий старт приложения;
- минимальный образ ОС весит более 100 МБ;
- виртуальная машина потребляет много ресурсов, таких как процессор и оперативная память.
Из плюсов — у виртуальной машины удобные способы управления.
Если выбрать Docker-контейнер:
- это будет облегченная операционная система с единственным процессом — вашим приложением;
- быстрый старт приложения;
- маленький размер контейнера.
Из минусов — у Docker сложная система управления контейнерами, которой можно управлять как локально на сервере, так и по протоколу HTTP.
Главное отличие технологий в том, что виртуальная машина виртуализирует аппаратные ресурсы, такие как процессор, память, системы input и output, а docker контейнеры виртуализируют только ОС.
Шаг 1: Установка Docker
Почитал мануалов и сказано в них, что не по-пацански (не по админски) устанавливать Docker из репозиториев, ибо грех это! И так какие VPS у меня есть на текущий момент в работе? Это Debian, Ubuntu 22 и CentOS 7. Значит устанавливаем Docker и там и там и сравниваем отличия в установке.
Шаг 1.1 : Установка в Debian, Ubuntu
Пакет Docker можно найти в официальном репозитории Debian и Ubuntu. Но чтобы получить наиболее актуальную версию программы, нужно обратиться к официальному репозиторию Docker. В этом разделе показано, как загрузить и установить пакет из официального репозитория Docker.
- Обновление репозитория и установка зависимостей:
apt update
apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common lsb-release
- Теперь можно загрузить и установить пакет Docker. Добавьте в систему GPG-ключ репозитория Docker.
Для Debian:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Для Ubuntu (версии 18.04 LTS и выше):
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Добавьте этот репозиторий Docker в APT и обновить индекс пакетов.
Для Debian:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
apt update
Для Ubuntu:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
- Чтобы установить Docker, введите,
Для Debian:
apt install docker-ce
Для Ubuntu:
apt install docker-ce docker-ce-cli containerd.io
- После установки должен запустится демон и настроится автозапуск процесса, проверим командой:
systemctl status docker
Теперь в системе работает системная служба Docker. Давайте что-нибудь запустить, чтобы увидеть что докер работает, например:
docker run hello-world
- Проверяем, что всё установилось. У вас должны работать следующие команды (версии могут различаться)
# docker -v
Docker version 23.0.3, build 3e7cbfd
Шаг 1.2 : Установка в CentOS 7, 8
Теперь попробуем установить Docker в всё еще не умирающем CentOS версии 7. Кстати Доккер официально поддерживается только в 7 и 8 версии CentOS, а 6 забыли, хотя она до сих пор распространена.
В CentOS сначала придется удалить все намеки на старую версию Docker.
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Рекомендуемый подход: настроить репозитории Docker и устанавливать из них него простоты установки и обновления. Для этого установим пакет yum-utils, который содержит утилиту yum-config-manager и настроим стабильный (stable) репозиторий. Есть еще nightly репозиторий, но думаю стабильного нам хватит:)
yum install -y yum-utils yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
Теперь установка самого Docker:
yum install docker-ce docker-ce-cli containerd.io
Запускаем Докер и тестовую программу, чтобы убедиться что он работает:
systemctl start docker
docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67 Status: Downloaded newer image for hello-world:latest Hello from Docker!
Последний штрих, проверяем загружается ли при перезагрузке Linux наш Докер автоматически, используем для этого systemctl:
# systemctl is-enabled docker
disabled
Конечно же нет, добавим в автозагрузку Docker:
# systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
Шаг 1.3: Запуск докер не из-под суперпользователя (root)
Это опциональный шаг. Чтобы запускать docker не из-под суперпользователя (root), нужно предоставить права вашему пользователю. Пошагово выполним для любого Linux:
- Ели группы docker не существует, создадим её:
sudo groupadd docker
- Добавляем нашего пользователя в группу docker
sudo usermod -aG docker $USER
- Затем выходим из терминала и заходим обратно. После этого нужно проверить, что всё сработало:
id -nG docker ps docker images
Команды докера должны быть без ошибок. Всё!
Шаг 1.4: Установка Docker в Windows
Все что нужно знать об установки Docker в Windows 10 Pro это то, что у вас перестанут работать программы, такие как VirtualBox, эмуляторы Android.
А там уже смотрите сами, нужно ли вам такое счастье или нет.
Шаг 2: Как пользоваться командами, ключами Docker
С помощью команды docker можно пользоваться различными опциями, а также командами с аргументами. Ниже показан ее синтаксис. Запуск команды docker без ключей выведет весь список возможных ключей запуска.
docker [option] [command] [arguments]
- Можно получить информацию о ключах, просто запустить команду docker. Для получения справки по использованию выбранной команды введите:
docker subcommand --help
- Для получения полной информации по Docker потребуется ввести следующее или для краткой используйте ключ v, как показано ниже:
docker info docker -v Docker version 20.10.14, build a224086
Шаг 2.1: Управление контейнерами
Для просмотра запущенных контейнеров применяется команда docker ps, ключ а также показывает все контейнеры в системе. Разберем поля вывода команды
docker ps -a или docker container ls -a
- CONTAINER ID - идентификатор контейнера, он уникален.
- IMAGE - название образа, на основе которого запущен контейнер;
- COMMAND - выполняемая при запуске контейнера команда;
- CREATED - Когда был создан контейнер.
- STATUS - статус контейнера, активен он или выключен.
- PORTS - порты, через которые сервисы извне взаимодействует с контейнером и тем, что внутри него;
- NAMES - имя контейнера.
- Для просмотра последних созданных контейнеров используется опция -l:
docker ps -l
- docker stats информация о потреблении ресурсов
- docker kill ID принудительная остановка указанного контейнера, кроме того: stop, pause, unpause, restart.
- -it опции, говорящие о том, что мы хотим интерактивно взаимодействовать с контейнером (оказаться «внутри» него). Добавление опций -i (видеть, что происходит в контейнере) и -t (взаимодействовать, то есть пересылать в контейнер наши команды) предоставляет доступ в интерактивном режиме к командному процессору.
- -d, –detach указывает запуск в фоновом режиме
- -p 8080:80 Проброс порта. Порт 80 «изнутри» контейнера становится портом 0.0.0.0:8080
- Чтобы узнать IP адрес контейнера, используйте вывод ключа inspect:
docker container inspect ee7c5bd0f90e | grep IPAddress
Шаг 2.2: Как зайти в контейнер и выполнить команду внутри
Для того, чтобы выполнять команды внутри контейнера, надо для начала в него попасть. Для этого необходимо получить ID необходимого контейнера. Делается это командой:
docker ps
После получения списка всех запущенных контейнеров, мы выбираем (в первом столбце) ID нужного нам контейнера и подставляем в следующую команду вместо <container_id>:
docker exec -it <container_id> bash
Данная команда в контейнере <container_id> запустит bash прямо в вашей консоли. После чего, можно выполнять внутри контейнера все правки, которые нам необходимы. Не забывайте, что после перезапуска контейнера - все правки пропадут, для сохранения правок изучите Шаг 4: Как сохранить локально изменения в новый образ Docker.
Шаг 2.3: Удаление образов, контейнеров и томов Docker
Источник: Удаление образов, контейнеров и томов Docker
- Очистить все не связанные с контейнерами ресурсы, в том числе образы, контейнеры, тома и сети.
docker system prune docker system prune -a docker system prune --all
Чтобы удалить все остановленные контейнеры и неиспользуемые образы (а не только образы, не связанные с контейнерами), добавьте в эту команду флаг -a.
- Удаление одного или нескольких конкретных контейнеров.
Используйте команду docker ps с флагом -a для поиска имен или идентификаторов контейнеров, которые вы хотите удалить:
docker ps -a docker rm ID_or_Name ID_or_Name
- Удаление контейнера при выходе.
Если вы создаете контейнер, который вам не будет нужен после завершения его использования, вы можете использовать команду docker run –rm для его автоматического удаления при выходе.
docker run --rm image_name
- Удаление всех контейнеров, из которых выполнен выход.
Вы можете найти контейнеры с помощью команды docker ps -a и отфильтровать их по статусу: created (создан), restarting (перезапускается), running (работает), paused (пауза) или exited (выполнен выход). Чтобы просмотреть список контейнеров, из которых выполнен выход, используйте флаг -f для фильтрации по статусу. Убедитесь, что вы хотите удалить эти контейнеры, и используйте флаг -q для передачи идентификаторов в команду docker rm.
docker ps -a -f status=exited docker rm $(docker ps -a -f status=exited -q)
Более простой вариант
docker container prune
- Удаление одного или нескольких конкретных образов.
Используйте команду docker images с флагом -a, чтобы найти идентификатор удаляемых образов. Эта команда покажет вам все образы, включая промежуточные слои образов. Когда вы определитесь с составом удаляемых образов, вы можете передать их идентификаторы или теги в docker rmi:
docker images -a
docker rmi Image Image
- Удаление образов, не привязанных к контейнеру.
Образы Docker состоят из нескольких слоев. Несвязанные образы — это слои, не имеющие связей с каким-либо образами с тегами. У них нет никакого назначения, и они просто занимают место на диске. Их можно найти, добавив флаг фильтра -f со значением dangling=true в команду docker images. Если вы уверены, что хотите удалить их, вы можете использовать команду docker images purge:
docker images -f dangling=true docker images purge
- Удаление образов по шаблону.
Вы можете найти все образы, соответствующие определенному шаблону, используя комбинацию команд docker images и grep. Когда вы будете довольны, вы можете удалить их, используя awk для передачи идентификаторов в docker rmi. Эти утилиты не предоставляются Docker и могут быть доступны не во всех системах:
docker images -a | grep "pattern" docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Шаг 2.4: Просмотр логов контейнера (docker logs)
docker logs ID вывод логов из указанного контейнера -f вывод логов в стиле tail –f (соответственно если логи пишутся в консоль контейнера STDOUT/STDERR)
docker logs -f eef97a115270
Ключевое логи можно смотреть и у остановленных контейнеров.
Лог из контейнера также пишутся на хостовую машина, найти файл лога можно при помощи ключа inspect:
docker inspect --format "{{.LogPath}}" <id_контенера> или так docker container inspect <id_контенера> | grep LogPath
Вывести лог можно например так
sudo cat $(docker inspect --format "{{.LogPath}}" <id_контенера>)
В зависимости от реализации ПО внутри контейнера может понадобиться перенаправить поток ошибок (2 — STDERR) в стандартный поток (1 — STDOUT), например чтобы grep заработал:
docker logs -f eef97a115270 2>&1 | grep ERROR
Долго работающие контейнеры Docker могут быстро накапливать большое количество логов. Они потребляют емкость хранилища и снижают производительность при доступе к данным и их фильтрации. Хотя Docker содержит встроенные инструменты для просмотра логов, в нем нет встроенного механизма для их очистки. Вы можете очистить содержимое журнала, не удаляя его, передав echo пустую строку в его содержимое.
sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" <id_контенера>)'
Настройка ротации логов Docker: Многие драйверы логирования Docker, включая json-file, имеют опциональную поддержку ротации логов, которую можно включить глобально для демона Docker или на основе каждого контейнера. Параметры демона настраиваются в файле /etc/docker/daemon.json (умолчанию файл daemon.json не существует, вам нужно его создать). Ниже пример, который ротирует логи контейнеров, когда они достигают 8 МБ. В каждый момент времени сохраняется до пяти файлов, при этом старые файлы автоматически удаляются при новой ротации.
{ "log-opts": { "max-size": "8m", "max-file": "5" } }
Не забудьте перезапустить демон Docker, чтобы применились изменения (все ваши контейнеры выключаться!!!):
systemctl restart docker
Еще раз подытожим:
- > — запись stdout в файл
- » — дозапись stdout в файл
- 2> — запись stderr в файл
- 2» — дозапись stderr в файл
Давайте для примера сохраним логи в 2 файла — stdout.log и stderr.log. Команда будет выглядеть так:
docker logs logs_task > stdout.log 2> stderr.log
Шаг 2.5: Проброс портов или маппинг портов
EXPOSE директива Dockerfile имеет свою специфику применения.
Если требуется пробросить и сопоставить разные порты внутри и снаружи контейнера используется docker run -p порт на хосте: порт в контейнере
docker run -d -p 81:80 --name httpd-container httpd
Эта команда запускает Docker-контейнер httpd (HTTP-сервер Apache) и маппинг 81 порта хоста с 80 портом внутри Docker-контейнера.
При поднятии контейнера можно прокинуть несколько портов. Для этого нужно просто задать опцию -p несколько раз:
docker run -p <порт_на_хосте_1>:<порт_в_контейнере_1> -p <порт_на_хосте_2>:<порт_в_контейнере_2> ...
Например, можно сделать вот так и связать порты 80, 81 и 82 с портом 80 в контейнере:
docker run -p 80:80 -p 81:80 -p 82:80 nginx
FAQ: в чем разница между Docker Run, Start и Create в Docker
Команда Docker create создает новый новый контейнер из образа Docker, но он не запускается сразу.
Команда start запустит любой остановленный контейнер. Если вы использовали команду docker create для создания контейнера, вы можете запустить его с помощью этой команды.
Команда run представляет собой комбинацию create и start, поскольку она создает новый контейнер и запускает его немедленно. Фактически, команда docker run может извлечь образ из Docker Hub, если она не находит упомянутый образ в вашей системе.
Шаг 3: Где скачать и как работать с образами Docker
Изначально Docker берет образы в хабах Docker Hub (докер хаб). Docker Hub является реестром образов, поддерживаемых разработчиком. Любой имеет возможность создавать и загружать собственные образы. Для большей части дистрибутивов и программ уже имеются необходимые образы в Docker Hub. Для подключения к Docker Hub используйте команду:
docker login
Докер хранит файлы (контейнеры) в виде папок и файлов в директории /var/lib/docker/containers.
- Представленные в хабе образы можно найти при помощи команд docker и search. К примеру, найти образ MariaDB можно следующим образом:
docker search mariadb
Строчка OK в столбце OFFICIAL говорит о том, что образ создан и его поддержка осуществляется компанией, ответственной за этот проект.
- Выбрав требуемый образ, например PhpMyAdmin, его можно скачать на компьютер (свое локальное хранилище), используя подкоманду pull.
docker pull phpmyadmin
- Чтобы посмотреть, какие образы были загружены на компьютер, используется команда:
docker images
- Запуск контейнера docker run
docker run hello-world
Добавление опций -i (видеть, что происходит в контейнере) и -t (взаимодействовать, то есть пересылать в контейнер наши команды) предоставляет доступ в интерактивном режиме к командному процессору.
docker run -it ubuntu
- Чтобы запустить остановленный контейнер, необходимо ввести docker start и далее указать идентификатор или имя контейнера. Так выглядит запуск контейнера 98ed79500b2d:
docker start 98ed79500b2d
- Чтобы выключить активный контейнер, используется команда docker stop с указанием его идентификатора или имени.
- Для перезапуска контейнер, не отключая его используйте ключ restart. docker restart имя/id контейнера
- Docker compose. Отдельного внимания заслуживает запуск контейнера docker compose. Так, после смены настроек в файле docker-compose.yml (например, проброс порта) изменения не выполнятся автоматически. Вдобавок, команда restart также не поможет и потребуется выполнить пересборку контейнера, применив для этого команду build. Другими словами, он будет заново создан. Выполнить операцию можно следующей командой:
docker-compose up -d --no-deps --build
- Удалить можно только остановленный контейнер. Для удаления используйте rm, указав имя или идентификатор контейнера:
docker container rm имя_контейнера или docker rm [OPTIONS] CONTAINER [CONTAINER...]
Шаг 4: Как сохранить локально изменения в новый образ Docker
Во время запуска контейнера из существующего образа у пользователя есть возможность создавать или удалять файлы, аналогично работе на виртуальной машине. При этом изменения будут распространяться только в определенном контейнере. Доступна и возможность запуска с последующей остановкой контейнера, но после его удаления с помощью docker rm будут утеряны внесенные изменения.
Соответственно, следует ознакомиться со способом сохранения текущего контейнера как нового образа.
Сохраните результаты в текущем образе командой:
docker commit -m "Что вы сделали с образом" -a "Имя автора" container_id repository/new_image_name
Добавление опции -m дает возможность указать сообщение подтверждения. Это позволит будущим пользователям образа понять, что именно было изменено. Что касается параметра -a — с его помощью можно указать, кто его создатель. container_id является тем же идентификатором, который был использован ранее, во время запуска интерактивной сессии в Docker.
Если вы не занимались до этого созданием новых репозиториев в Docker Hub, имя создаваемого репозитория по умолчанию будет названо именем вашего пользователя в Docker Hub.
Шаг 5: Автозагрузка контейнеров в ОС
Ваш сервера перезагрузился и все запущенные контейнеры остановились. Чтобы избавиться от необходимости вручную запускать их, можно настроить автозапуск контейнеров. Для этого следует создать текстовые файлы со специальным форматом для сервиса systemd. Рассмотрим пример автозапуска контейнера my-db, для этого создадим файл
nano /etc/systemd/system/my-db.service
[Unit] Description=MY DB (PG) docker container Requires=docker.service After=docker.service [Service] Restart=always ExecStart=/usr/bin/docker start -a my-db ExecStop=/usr/bin/docker stop -t 2 my-db TimeoutSec=30 [Install] WantedBy=multi-user.target
После этого остается перезапустить демон systemcmd и включить автозагрузку контейнера mydb, набрав в терминале поочередно команды:
systemctl daemon-reload
systemctl start my-db.service
systemctl enable my-db.service
Шаг 6: Что такое Docker Compose vs Stack
Устанавливаем docker-compose в Ubuntu c github
sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Проверим работает или нет
# docker-compose -v
Docker Compose version v2.6.0
По сути дела это «пакетный менеджер» для Docker, как, к примеру, composer для PHP. Пользоваться им несложно:
- Описываем конфигурацию контейнеров для нашего проекта в файле docker-compose.yaml
- Собираем проект, используя команду
docker-compose up --build -d
Убеждаемся, что нужные нам контейнеры созданы и запущены!
В связи с последними релизами в мире Docker произошли некоторые изменения. В версии 1.12 в Docker Engine был интегрирован режим Swarm, в связи с чем появилось несколько новых инструментов. Среди прочего, теперь появилась возможность использовать Compose-файлы docker-compose.yml для создания стеков контейнеров Docker без необходимости устанавливать инструмент Docker Compose. Теперь для этого есть команда docker stack, и она очень похожа на docker-compose.
Пример 1: Docker MySQL / MariaDB установка и настройка
Рассмотрим как правильно установить и настроить СУБД MySQL MariaDB в виде приложения Docker, при этом все постоянные данные будут храниться в файловой системе хоста.
Зачем использовать Docker для установки MariaDB? Использование Docker-контейнера позволяет не только обеспечивает чистое развертывание, не зависящее от программного обеспечения сервера, но и позволяет поддерживать несколько СУБД MySQL разных версий и различного назначения в рамках одной операционной системы.
При установке MariaDB будет использован внешний конфигурационный файл и внешний каталог хранения данных для того, чтобы при перезапуске контейнера вся информация оставалась в сохранности. Сначала создадим необходимые каталоги, в которых будут храниться настройки, журналы и базы данных MySQL:
mkdir -p /opt/mariadb/{data,etc,logs}
Создадим конфигурационный файл /opt/mariadb/etc/config.cnf, который будет уточнять настройки, применяемые контейнером по умолчанию. В этом файле вы можете переопределять переменные MySQL для задания нужного поведения. Мы определим 3 переменных для демонстрации возможностей:
[mysqld] log_error=/var/lib/mysql/logs/errorlog slow_query_log=on slow_query_log_file=/var/lib/mysql/logs/slowlog
Теперь можно запустить сам сервер MySQL:
sudo docker run -d --restart=always --name mariadb_1 \ -v /opt/mariadb/data:/var/lib/mysql \ -v /opt/mariadb/etc:/etc/mysql/conf.d \ -v /opt/mariadb/logs:/var/lib/mysql/logs \ -e MYSQL_ROOT_PASSWORD=secret \ -p 127.0.0.1:3306:3306 mariadb:10.3
Где ключи
- name задает собственное (удобное нам) имя для контейнера
- -d, –detach указывает запуск в фоновом режиме
- -v, –volume list несколько ключей v указывают монтирование директории из хостовой машины
- -e, –env list Обратите внимание на пароль пользователя root, который задается с помощью переменной окружения MYSQL_ROOT_PASSWORD. Этот пароль будет записан в системную БД mysql, если вы после остановите контейнер и поменяете его, это не окажет влияние на пароль в БД.
- -p, –publish list публикация портов контейнера на хосте
Для проверки работоспособности сервера используйте консольный клиент MySQL:
sudo docker run -it --rm --link mariadb_1:mysql mariadb:10.3 \ mysql -hmysql -uroot -psecret
Выгрузка данных БД для резервных копий в самом простом случае может выполняться стандартным
sudo docker run -it --rm --link mariadb_1:mysql mariadb:10.3 \ mysqldump --all-databases -hmysql -uroot -psecret > all-databases.sql
Всё, сервер MariaDB развернут, при этом файлы располагаются в каталогах хоста, что позволяет изменять настройки сервера, получать доступ к записям журналов и сами данным баз данных.
Пример 2: Nginx
Запуск
docker run --rm -d --name nginxfront1 -p 8080:80 nginx
Проверка, вы должны получить исходный код HTML
curl localhost:8080
Запустим Nginx с меппингом томов (папок):
docker run --rm -d --name nginxfront1 -p 8080:80 -v ${PWD}:/usr/share/nginx/html nginx или docker run --rm -d \ --name nginxfront1 \ -p 8080:80 \ -v /var/www/html:/usr/share/nginx/html \ nginx
Проверим
curl localhost:8080
Подключиться к запущенному Nginx с запуском командной оболочки
docker exec -it dea628c3adf4 bash
Пример 3: Redis
Установка хранилища Redis в Докер одной командой:
docker run --rm -d -p 6379:6379 --name redis -v redis_vol:/var/lib/redis/ redis redis-server --appendonly yes
Проверим что контейнер с Rdis работает и данные сохраняются в Docker Volumes:
docker exec -it redis redis-cli 127.0.0.1:6379> SET test "Hi" OK 127.0.0.1:6379> GET test "Hi" 127.0.0.1:6379> exit
Пример 4: Docker PostgreSQL установка и настройка
Установим стабильную версию PostgreSQL 15 в Докере и подключимся к нему, например программой DBeaver. В первую очередь заходим на https://hub.docker.com/_/postgres и читаем документацию по запуску постгрес в контейнере и описание переменных окружения доступных внутри контейнера.
docker run -d --rm -e POSTGRES_PASSWORD=adm_password -e POSTGRES_USER=admin -e POSTGRES_DB=mybd1 -p 5432:5432 postgres:15
Конечно нужно еще пробросить Volumes
-v /custom/mount:/var/lib/postgresql/data
Подключаем DBeaver к PostgreSQL, создаем базу данных при помощи интерфейса DBeaver, а саму таблицу создаем SQL запросом, как показано на скриншоте.
Читайте также


