Настройка Docker‑сервера
Запуск серверов баз данных одной командой
Docker Server Setup
Историческое замечание: это ссылка на локальную разработку 2015 года. Она полезна для понимания старого рабочего процесса, но не рассматривайте эти фрагменты как актуальные рекомендации для продакшена. Современные файлы Docker Compose, пользовательские сети, зафиксированные версии образов, аутентификация, секреты и проверенная автоматизация обновлений сегодня являются более надёжными настройками.
Для кого это руководство?
- Хотели протестировать приложение с «одноразовой» базой данных?
- Наследовали подозрительный код? Не хотите делиться доступом к своей текущей базе?
- Работаете с клиентами, для которых важна безопасность? Не рискуйте перекрёстным загрязнением! Используйте контейнеры и контролируйте сохранность данных!
- Не можете обновить среду разработки до последней версии СУБД, потому что ваше наследуемое приложение зависит от 12‑летней версии MySQL?
Никогда больше не позволяйте этим причинам стоять у вас на пути!
Быстрые ссылки на однострочники
Эта статья содержит однострочные команды для запуска самых популярных СУБД, включая:
Примечание: Эти команды предназначены только как быстрые локальные‑разработческие ярлыки. Если планируете использовать их в продакшене, сначала добавьте аутентификацию, управление секретами, резервные копии, сетевые политики, фиксированные образы и план обновлений.
Продвинутые пользователи Docker: Если вы знакомы с
docker-compose, можете преобразовать приведённые ниже shell‑команды для использования в файлахdocker-compose.yml.
Postgres Server
Запустите контейнер, назвав его
pg-localhost
# Хранить файлы БД в локальном пути, вне контейнераmkdir -p $HOME/.postgres-data
docker run \ --name pg-localhost \ -p 127.0.0.1:5432:5432 \ -e POSTGRES_PASSWORD=password \ --restart unless-stopped \ -it \ --shm-size=256mb \ postgres:16-alpine \ postgres -c 'listen_addresses=*' \ -c 'password_encryption=scram-sha-256' \ -c 'shared_memory_type=sysv' \ -c 'shared_buffers=256MB' \ -c 'max_connections=200'При необходимости подгоняйте параметры командной строки. (Аргументы демона postgres идут после имени образа
postgres:16-alpine. См.postgres -c 'listen_addresses=*'...)
Подключитесь к подсказке
psqlот имени пользователя postgres
docker exec --user postgres -it pg-localhost psqlОткройте оболочку контейнера от root
docker exec -it pg-localhost bashПримечание: В приведённой команде используются официальные базовые образы Alpine Linux. Это не типичная среда Debian.
Чтобы использовать базовый образ debian/ubuntu, замените
postgres:12-alpineнаpostgres:12.
MongoDB Server
mkdir -p $HOME/.mongodb/data
docker run -d \ --name mongodb \ --restart on-failure:5 \ -p 127.0.0.1:27017:27017 \ -v $HOME/.mongodb:/data \ mongo:7 \ bash -c 'mongod --bind_ip 0.0.0.0'Теперь, когда сервер запущен, проверьте, что данные находятся в $HOME/.mongodb, выполнив:
ls -lach $HOME/.mongodbПодключимся к серверу с помощью CLI‑утилиты mongosh. (Если она у вас не установлена, смотрите ниже.)
#> Используем параметры по умолчанию:mongoshВы должны увидеть нечто подобное:

Установка инструментов Mongo CLI
Через brew на macOS
brew tap mongodb/brewbrew install mongodb-community-shellMySQL‑сервер
ПРЕДУПРЕЖДЕНИЕ: ИЗМЕНИТЕ ПАРОЛЬ В ПЕРЕМЕННОЙ
MYSQL_ROOT_PASSWORD, указанной ниже.
mkdir -p $HOME/.mysql
docker run -d \ -v $HOME/.mysql:/var/lib/mysql \ -p 127.0.0.1:3306:3306 \ --name mysql-$USER \ -e MYSQL_DATABASE=$USER \ -e MYSQL_ROOT_HOST='172.*.*.*' \ -e MYSQL_ROOT_PASSWORD='p@ssw0rd' \ mysql/mysql-server:8ElasticSearch‑сервер
mkdir -p $HOME/.elastic
docker run -d \ --name elastic \ -p 127.0.0.1:9200:9200 \ -p 127.0.0.1:9300:9300 \ -v $HOME/.elastic:/data \ docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs 'Примечания по безопасности
ЗАМЕЧАНИЕ: параметр
-p 127.0.0.1:27017:27017ограничивает доступ к вашему экземпляру только локальной сетью Docker‑демона.
Чтобы «опубликовать» порты, уберите префикс локального IP‑адреса, позволяя внешнее подключение:-p 27017:27017. Убедитесь, что приняты необходимые меры безопасности.
Рекомендация: регулярно сканируйте открытые порты (например, с помощью nmap или masscan), чтобы подтвердить корректность сетевой конфигурации с отдельного узла в другой сети.
Теперь, когда у вас есть команды для запуска серверов баз данных, следующий шаг — упаковать приложение в Docker‑образ. Часть 2 продолжается ниже:
Упаковка NodeJS‑веб‑приложения
- Добавьте пустой файл с именем
Dockerfileв корень проекта. - (Опционально, рекомендуется) Добавьте файл
.dockerignore, используя правила из.gitignore, чтобы исключить крупные необязательные пути. По умолчанию включаются все файлы проекта.
Создайте Dockerfile в корне приложения
# Пример для NodeJSFROM node:22EXPOSE 3000COPY . /app/WORKDIR /appRUN apt-get update && apt-get dist-upgrade -yqqRUN ["npm", "install"]
# Переопределяемая командаCMD ["npm", "start"]Проще продемонстрировать, как запускать сборку через Dockerfile и увидеть результат в консоли (см. команды ниже).
В терминале перейдите в папку проекта (cd) и выполните следующую команду build каждый раз при развертывании изменений — или когда нужно сменить/обновить ОС или конфигурацию окружения.
docker build -t app-name-here .Справочник основных команд Docker
Сборка Docker‑образа
docker build -t app-name-here .Создание/запуск веб‑приложения со ссылками на серверы БД
docker network create app-localdocker network connect app-local mongodbdocker network connect app-local elasticdocker run -d --name webapp01 --network app-local -p 3000:3000 app-name-hereЗапуск в интерактивном режиме (не в фоне, в терминале)
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bashУдаление контейнера или образа
Важно: любые данные, не сохранённые в смонтированном томе, будут потеряны!!
# Удалить образdocker rmi -f app-name-heredocker rm -f webapp01# теперь повторно выполните ваш `docker run...` из ^^^# Например, чтобы остановить и удалить запущенные выше экземпляры БД, выполните:docker rm -f mongo elastic