[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/docker-cleanup":3,"mdc--t4rlsh-key":856,"mdc-jcntdy-key":874,"mdc-j1e8m2-key":899,"mdc-ofut4f-key":915,"mdc--fmqd3c-key":944,"mdc--fk94qj-key":952,"mdc--qkn5vj-key":960,"mdc--vrjfgu-key":968,"mdc-h5f23d-key":976,"related-/guides/linux/docker-installation,/guides/linux/docker-compose-basics":984},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":791,"code":791,"createdAt":792,"description":793,"difficulty":794,"draft":795,"estimatedTime":796,"extension":797,"faq":798,"howToSteps":811,"howToTotalTime":827,"image":791,"keywords":828,"locale":836,"meta":837,"navigation":838,"path":839,"platform":840,"related":841,"section":844,"seo":845,"severity":791,"stem":846,"summary":847,"tags":848,"twitterCreator":791,"twitterSite":791,"type":854,"updatedAt":792,"__hash__":855},"content_ru/guides/linux/docker-cleanup.md","Полное руководство по очистке Docker: освобождаем место на Linux",[7,8,9,10],"Docker Engine 20.10+","Ubuntu 20.04/22.04","CentOS 8/Rocky 9","Debian 11/12","FixPedia Team",{"type":13,"value":14,"toc":776},"minimark",[15,20,24,28,31,77,81,86,93,117,120,128,135,139,150,165,175,193,210,214,217,223,237,251,257,273,283,286,308,312,329,343,346,355,369,379,428,431,448,455,458,462,469,474,487,490,505,513,528,535,551,565,582,591,595,601,613,632,636,641,669,674,700,705,744,749,772],[16,17,19],"h2",{"id":18},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,22,23],"p",{},"Docker — отличный инструмент, но со временем он может накопить значительное количество \"мусорных\" данных: остановленные контейнеры, старые и дублирующие образы (dangling images), неиспользуемые сети и тома. Эти артефакты могут занимать от сотен мегабайт до нескольких гигабайт дискового пространства. Регулярная очистка Docker — важная практика для поддержания здоровья системы, особенно на серверах с ограниченным дисковым пространством или в CI/CD-окружениях. Этот гайд покажет вам, как безопасно и эффективно выполнить очистку на любой Linux-системе.",[16,25,27],{"id":26},"требования-подготовка","Требования / Подготовка",[21,29,30],{},"Перед началом убедитесь в следующем:",[32,33,34,48,59,66],"ol",{},[35,36,37,38,42,43,47],"li",{},"На вашей системе установлен и запущен ",[39,40,41],"strong",{},"Docker Engine"," (демон ",[44,45,46],"code",{},"dockerd",").",[35,49,50,51,54,55,58],{},"Ваш пользователь имеет права на выполнение команд Docker (обычно через группу ",[44,52,53],{},"docker","). Для многих команд очистки, особенно полной, потребуются права ",[39,56,57],{},"sudo",".",[35,60,61,62,65],{},"Вы понимаете, что удаление образов и томов — ",[39,63,64],{},"необратимое действие",". Убедитесь, что в удаляемых томах нет важных данных (например, баз данных).",[35,67,68,69,72,73,76],{},"Рекомендуется сначала выполнить ",[39,70,71],{},"создание бэкапов"," критически важных данных или состояние контейнеров (через ",[44,74,75],{},"docker commit","), если это необходимо.",[16,78,80],{"id":79},"пошаговая-инструкция","Пошаговая инструкция",[82,83,85],"h3",{"id":84},"шаг-1-проверьте-текущее-использование-диска-docker","Шаг 1: Проверьте текущее использование диска Docker",[21,87,88,89,92],{},"Сначала давайте посмотрим, что именно занимает место. Команда ",[44,90,91],{},"docker system df"," покажет сводку по типам ресурсов.",[94,95,100],"pre",{"className":96,"code":97,"language":98,"meta":99,"style":99},"language-bash shiki shiki-themes github-light github-dark","docker system df\n","bash","",[44,101,102],{"__ignoreMap":99},[103,104,107,110,114],"span",{"class":105,"line":106},"line",1,[103,108,53],{"class":109},"sScJk",[103,111,113],{"class":112},"sZZnC"," system",[103,115,116],{"class":112}," df\n",[21,118,119],{},"Вывод будет примерно таким:",[94,121,126],{"className":122,"code":124,"language":125},[123],"language-text","TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE\nImages          15        3         4.2GB     2.1GB (49%)\nContainers      8         2         120MB     80MB (66%)\nLocal Volumes  12        5         3.5GB     1.8GB (51%)\nBuild Cache     0         0         0B        0B\n","text",[44,127,124],{"__ignoreMap":99},[21,129,130,131,134],{},"Обратите внимание на столбец ",[39,132,133],{},"RECLAIMABLE"," — это примерный объём, который можно освободить после очистки.",[82,136,138],{"id":137},"шаг-2-удалите-остановленные-контейнеры","Шаг 2: Удалите остановленные контейнеры",[21,140,141,142,145,146,149],{},"Остановленные контейнеры (",[44,143,144],{},"Exited"," или ",[44,147,148],{},"Created",") потребляют немного места, но их может быть много. Удалить все остановленные контейнеры можно командой:",[94,151,153],{"className":96,"code":152,"language":98,"meta":99,"style":99},"docker container prune\n",[44,154,155],{"__ignoreMap":99},[103,156,157,159,162],{"class":105,"line":106},[103,158,53],{"class":109},[103,160,161],{"class":112}," container",[103,163,164],{"class":112}," prune\n",[21,166,167,168,145,171,174],{},"По умолчанию команда запросит подтверждение. Чтобы пропустить запрос, добавьте флаг ",[44,169,170],{},"-f",[44,172,173],{},"--force",":",[94,176,178],{"className":96,"code":177,"language":98,"meta":99,"style":99},"docker container prune -f\n",[44,179,180],{"__ignoreMap":99},[103,181,182,184,186,189],{"class":105,"line":106},[103,183,53],{"class":109},[103,185,161],{"class":112},[103,187,188],{"class":112}," prune",[103,190,192],{"class":191},"sj4cs"," -f\n",[21,194,195,198,199,145,202,205,206,209],{},[39,196,197],{},"Что делает команда:"," удаляет все контейнеры в состоянии ",[44,200,201],{},"created",[44,203,204],{},"exited",". Работающие (",[44,207,208],{},"running",") контейнеры не затронуты.",[82,211,213],{"id":212},"шаг-3-удалите-неиспользуемые-образы","Шаг 3: Удалите неиспользуемые образы",[21,215,216],{},"Это самый важный шаг для освобождения места. Здесь есть два основных варианта:",[21,218,219,222],{},[39,220,221],{},"3.1 Удалить только \"висячие\" (dangling) образы","\nDangling images — это образы, у которых нет ни одного тега и которые не являются родительскими для других образов. Обычно они появляются после сборки новых версий или при обновлениях.",[94,224,226],{"className":96,"code":225,"language":98,"meta":99,"style":99},"docker image prune\n",[44,227,228],{"__ignoreMap":99},[103,229,230,232,235],{"class":105,"line":106},[103,231,53],{"class":109},[103,233,234],{"class":112}," image",[103,236,164],{"class":112},[21,238,239,240,145,243,246,247,250],{},"Эта команда удалит только dangling images. С флагом ",[44,241,242],{},"-a",[44,244,245],{},"--all"," она удалит ",[39,248,249],{},"все образы, не используемые ни одним контейнером"," (включая те, у которых есть теги).",[21,252,253,256],{},[39,254,255],{},"3.2 Удалить ВСЕ неиспользуемые образы (включая с тегами)","\nЭто более агрессивная и эффективная команда. Она удалит все образы, на которые нет ссылок из существующих (даже остановленных) контейнеров.",[94,258,260],{"className":96,"code":259,"language":98,"meta":99,"style":99},"docker image prune -a\n",[44,261,262],{"__ignoreMap":99},[103,263,264,266,268,270],{"class":105,"line":106},[103,265,53],{"class":109},[103,267,234],{"class":112},[103,269,188],{"class":112},[103,271,272],{"class":191}," -a\n",[21,274,275,278,279,282],{},[39,276,277],{},"Важно:"," Если у вас есть контейнеры, созданные из определённых образов (даже остановленные), эти образы ",[39,280,281],{},"не будут удалены",". Чтобы удалить и их, нужно сначала удалить сами контейнеры (см. Шаг 2).",[21,284,285],{},"Вы можете добавить фильтр по времени, например, удалить образы, не использованные последние 24 часа:",[94,287,289],{"className":96,"code":288,"language":98,"meta":99,"style":99},"docker image prune -a --filter \"until=24h\"\n",[44,290,291],{"__ignoreMap":99},[103,292,293,295,297,299,302,305],{"class":105,"line":106},[103,294,53],{"class":109},[103,296,234],{"class":112},[103,298,188],{"class":112},[103,300,301],{"class":191}," -a",[103,303,304],{"class":191}," --filter",[103,306,307],{"class":112}," \"until=24h\"\n",[82,309,311],{"id":310},"шаг-4-удалите-неиспользуемые-сети-и-тома","Шаг 4: Удалите неиспользуемые сети и тома",[21,313,314,317,318,321,322,321,325,328],{},[39,315,316],{},"4.1 Очистка сетей","\nПользовательские сети (не ",[44,319,320],{},"bridge",", ",[44,323,324],{},"host",[44,326,327],{},"none",") могут оставаться после удаления контейнеров.",[94,330,332],{"className":96,"code":331,"language":98,"meta":99,"style":99},"docker network prune\n",[44,333,334],{"__ignoreMap":99},[103,335,336,338,341],{"class":105,"line":106},[103,337,53],{"class":109},[103,339,340],{"class":112}," network",[103,342,164],{"class":112},[21,344,345],{},"Эта команда удалит все сети, не используемые хотя бы одним контейнером.",[21,347,348,351,352,174],{},[39,349,350],{},"4.2 Очистка томов (Volumes)","\nТома (volumes) — это самый \"тяжёлый\" по объёму ресурс, особенно если в них хранились данные БД. Удалите только ",[39,353,354],{},"неиспользуемые тома",[94,356,358],{"className":96,"code":357,"language":98,"meta":99,"style":99},"docker volume prune\n",[44,359,360],{"__ignoreMap":99},[103,361,362,364,367],{"class":105,"line":106},[103,363,53],{"class":109},[103,365,366],{"class":112}," volume",[103,368,164],{"class":112},[21,370,371,374,375,378],{},[39,372,373],{},"Критически важно:"," Эта команда ",[39,376,377],{},"безвозвратно удалит все данные"," в томах, которые не подключены к существующим контейнерам. Перед выполнением дважды проверьте, что вам не нужны данные из этих томов. Вы можете сначала посмотреть список всех томов и их размер:",[94,380,382],{"className":96,"code":381,"language":98,"meta":99,"style":99},"docker volume ls -q | xargs docker volume inspect --format '{{.Name}} {{.Mountpoint}} {{.UsageData.Size}}' | sort -k3 -h\n",[44,383,384],{"__ignoreMap":99},[103,385,386,388,390,393,396,400,403,406,408,411,414,417,419,422,425],{"class":105,"line":106},[103,387,53],{"class":109},[103,389,366],{"class":112},[103,391,392],{"class":112}," ls",[103,394,395],{"class":191}," -q",[103,397,399],{"class":398},"szBVR"," |",[103,401,402],{"class":109}," xargs",[103,404,405],{"class":112}," docker",[103,407,366],{"class":112},[103,409,410],{"class":112}," inspect",[103,412,413],{"class":191}," --format",[103,415,416],{"class":112}," '{{.Name}} {{.Mountpoint}} {{.UsageData.Size}}'",[103,418,399],{"class":398},[103,420,421],{"class":109}," sort",[103,423,424],{"class":191}," -k3",[103,426,427],{"class":191}," -h\n",[21,429,430],{},"Или более простой вариант:",[94,432,434],{"className":96,"code":433,"language":98,"meta":99,"style":99},"docker system df -v\n",[44,435,436],{"__ignoreMap":99},[103,437,438,440,442,445],{"class":105,"line":106},[103,439,53],{"class":109},[103,441,113],{"class":112},[103,443,444],{"class":112}," df",[103,446,447],{"class":191}," -v\n",[21,449,450,451,454],{},"В выводе будет блок ",[44,452,453],{},"VOLUME NAME"," с указанием размера.",[456,457],"in-article-ad",{},[82,459,461],{"id":460},"шаг-5-выполните-полную-очистку-опционально","Шаг 5: Выполните полную очистку (опционально)",[21,463,464,465,468],{},"Если вы хотите выполнить всё вышеперечисленное за одну команду, используйте ",[44,466,467],{},"docker system prune",". Это \"швейцарский нож\" для очистки.",[21,470,471],{},[39,472,473],{},"Базовая полная очистка:",[94,475,477],{"className":96,"code":476,"language":98,"meta":99,"style":99},"docker system prune\n",[44,478,479],{"__ignoreMap":99},[103,480,481,483,485],{"class":105,"line":106},[103,482,53],{"class":109},[103,484,113],{"class":112},[103,486,164],{"class":112},[21,488,489],{},"Эта команда удалит:",[491,492,493,496,499,502],"ul",{},[35,494,495],{},"Все остановленные контейнеры.",[35,497,498],{},"Все сети, не используемые хотя бы одним контейнером.",[35,500,501],{},"Все dangling образы.",[35,503,504],{},"Кэш сборки (build cache).",[21,506,507],{},[39,508,509,510,512],{},"Максимально агрессивная очистка (с флагом ",[44,511,242],{},"):",[94,514,516],{"className":96,"code":515,"language":98,"meta":99,"style":99},"docker system prune -a\n",[44,517,518],{"__ignoreMap":99},[103,519,520,522,524,526],{"class":105,"line":106},[103,521,53],{"class":109},[103,523,113],{"class":112},[103,525,188],{"class":112},[103,527,272],{"class":191},[21,529,530,531,534],{},"Эта команда удалит ",[39,532,533],{},"всё",", что не используется:",[491,536,537,539,542,548],{},[35,538,495],{},[35,540,541],{},"Все сети, не используемые.",[35,543,544,547],{},[39,545,546],{},"Все образы, не имеющие связанных контейнеров"," (даже с тегами!).",[35,549,550],{},"Кэш сборки.",[21,552,553,556,557,560,561,145,563,174],{},[39,554,555],{},"С подтверждением:","\nПо умолчанию команда ",[44,558,559],{},"prune"," запросит подтверждение. Чтобы выполнить без вопросов, добавьте ",[44,562,173],{},[44,564,170],{},[94,566,568],{"className":96,"code":567,"language":98,"meta":99,"style":99},"docker system prune -a -f\n",[44,569,570],{"__ignoreMap":99},[103,571,572,574,576,578,580],{"class":105,"line":106},[103,573,53],{"class":109},[103,575,113],{"class":112},[103,577,188],{"class":112},[103,579,301],{"class":191},[103,581,192],{"class":191},[21,583,584,587,588,590],{},[39,585,586],{},"Предупреждение:"," Команда ",[44,589,242],{}," может удалить образы, которые вы планировали использовать позже. Убедитесь, что у вас есть Dockerfile или способ быстро пересобрать нужные образы.",[16,592,594],{"id":593},"проверка-результата","Проверка результата",[21,596,597,598,174],{},"После завершения очистки снова выполните команду из ",[39,599,600],{},"Шага 1",[94,602,603],{"className":96,"code":97,"language":98,"meta":99,"style":99},[44,604,605],{"__ignoreMap":99},[103,606,607,609,611],{"class":105,"line":106},[103,608,53],{"class":109},[103,610,113],{"class":112},[103,612,116],{"class":112},[21,614,615,616,619,620,622,623,625,626,628,629,58],{},"Сравните значения в столбце ",[44,617,618],{},"SIZE"," и особенно ",[44,621,133],{},". Значение ",[44,624,133],{}," должно стремиться к нулю, а общий размер (",[44,627,618],{},") — значительно уменьшиться. Вы также можете проверить свободное место на диске командой ",[44,630,631],{},"df -h",[16,633,635],{"id":634},"возможные-проблемы","Возможные проблемы",[21,637,638],{},[39,639,640],{},"Проблема 1: Ошибка \"Error: No such image\" или \"conflict: unable to delete...\"",[491,642,643,649],{},[35,644,645,648],{},[39,646,647],{},"Причина:"," Попытка удалить образ, который является родительским для другого образа или используется (даже остановленным) контейнером.",[35,650,651,654,655,658,659,662,663,665,666,58],{},[39,652,653],{},"Решение:"," Сначала удалите все контейнеры, основанные на этом образе (",[44,656,657],{},"docker ps -a"," для поиска, ",[44,660,661],{},"docker rm"," для удаления). Если образ \"застрял\" как родительский, часто помогает принудительное удаление с ",[44,664,170],{}," или полная очистка через ",[44,667,668],{},"docker system prune -a",[21,670,671],{},[39,672,673],{},"Проблема 2: Ошибка доступа (permission denied)",[491,675,676,681],{},[35,677,678,680],{},[39,679,647],{}," Запуск команды без прав sudo.",[35,682,683,685,686,688,689,692,693,695,696,699],{},[39,684,653],{}," Добавьте ",[44,687,57],{}," перед командой (например, ",[44,690,691],{},"sudo docker system prune -a",") или убедитесь, что ваш пользователь в группе ",[44,694,53],{}," (",[44,697,698],{},"groups $USER","), и перезайдите в систему.",[21,701,702],{},[39,703,704],{},"Проблема 3: Тома не удаляются, хотя контейнеры удалены",[491,706,707,720],{},[35,708,709,711,712,715,716,719],{},[39,710,647],{}," Тома, созданные с флагом ",[44,713,714],{},"--name"," или через ",[44,717,718],{},"docker volume create",", не удаляются автоматически при удалении контейнера.",[35,721,722,724,725,728,729,732,733,736,737,740,741,58],{},[39,723,653],{}," Проверьте список всех томов (",[44,726,727],{},"docker volume ls","). Тома, которые не используются (",[44,730,731],{},"\u003Cnone>"," в колонке ",[44,734,735],{},"CONTAINER","), можно удалить вручную (",[44,738,739],{},"docker volume rm \u003Cvolume_name>",") или через ",[44,742,743],{},"docker volume prune",[21,745,746],{},[39,747,748],{},"Проблема 4: Недостаточно места для выполнения операций",[491,750,751,756],{},[35,752,753,755],{},[39,754,647],{}," Диск заполнен на 100%, и Docker не может создать временные файлы для операций.",[35,757,758,760,761,764,765,768,769,47],{},[39,759,653],{}," Временно очистите другие файлы (например, кэш пакетного менеджера: ",[44,762,763],{},"sudo apt clean"," для Ubuntu/Debian, ",[44,766,767],{},"sudo yum clean all"," для CentOS/RHEL) или удалите вручную старые логи (",[44,770,771],{},"/var/lib/docker/containers/*/*.log",[773,774,775],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":99,"searchDepth":777,"depth":777,"links":778},2,[779,780,781,789,790],{"id":18,"depth":777,"text":19},{"id":26,"depth":777,"text":27},{"id":79,"depth":777,"text":80,"children":782},[783,785,786,787,788],{"id":84,"depth":784,"text":85},3,{"id":137,"depth":784,"text":138},{"id":212,"depth":784,"text":213},{"id":310,"depth":784,"text":311},{"id":460,"depth":784,"text":461},{"id":593,"depth":777,"text":594},{"id":634,"depth":777,"text":635},null,"2026-02-15 01:18:55","Пошаговая инструкция по удалению неиспользуемых образов, контейнеров и томов Docker. Освободите диск за 10 минут с проверенными командами.","easy",false,"10-15 мин","md",[799,802,805,808],{"answer":800,"question":801},"Нет, для большинства команд очистки, особенно `docker system prune`, требуются права администратора (sudo), так как они затрагивают системные ресурсы.","Будет ли работать очистка Docker без sudo?",{"answer":803,"question":804},"Да, используйте `docker image rm \u003Cimage_id>` для конкретного образа или `docker image prune -a --filter \"until=24h\"` для удаления старых (старше 24 часов).","Можно ли удалить только определенные образы, а не все?",{"answer":806,"question":807},"Dangling volumes — это тома, не связанные ни с одним контейнером. Удаляются командой `docker volume prune`. Будьте осторожны: это безвозвратно удалит данные.","Что такое dangling volumes и как их удалить?",{"answer":809,"question":810},"Базовая команда `docker system prune` не останавливает и не удаляет работающие контейнеры. Однако флаг `--all` или `-a` может повлиять на остановленные контейнеры и неиспользуемые образы, на которые они ссылаются.","Очистка повлияет на работающие контейнеры?",[812,815,818,821,824],{"name":813,"text":814},"Проверьте текущее использование диска Docker","Прежде чем очищать, узнайте, сколько места занимают образы, контейнеры и тома. Это поможет оценить масштаб.",{"name":816,"text":817},"Удалите остановленные контейнеры","Остановленные контейнеры накапливаются и занимают место. Удалите их все одной командой.",{"name":819,"text":820},"Удалите неиспользуемые образы","Удалите образы, которые не имеют связанных контейнеров (dangling), и все неиспользуемые образы.",{"name":822,"text":823},"Удалите неиспользуемые сети и тома","Очистите пользовательские сети и тома, которые не используются ни одним контейнером.",{"name":825,"text":826},"Выполните полную очистку (опционально)","Для максимального освобождения места выполните команду, которая удаляет всё неиспользуемое за один раз.","PT15M",[829,830,467,831,832,833,834,835],"очистка docker linux","удаление образов docker","освобождение места docker","docker cleanup ubuntu","удалить неиспользуемые контейнеры docker","docker тома очистка","docker дисковое пространство","ru_RU",{},true,"/guides/linux/docker-cleanup","linux",[842,843],"/guides/linux/docker-installation","/guides/linux/docker-compose-basics","Гайды Docker",{"title":5,"description":793},"guides/linux/docker-cleanup","Docker накапливает остановленные контейнеры, старые образы и неиспользуемые тома, что может занимать гигабайты дискового пространства. В этом гайде вы научитесь безопасно и эффективно выполнять очистку Docker-окружения на Linux.",[53,849,840,850,851,852,853],"очистка","sysadmin","devops","disk space","containerization","guide","KevsIM-7V6lhfXiYSit4RG9qcMb3OTps1EWGjmV1REU",{"data":857,"body":858},{},{"type":859,"children":860},"root",[861],{"type":862,"tag":21,"props":863,"children":864},"element",{},[865,867,872],{"type":125,"value":866},"Нет, для большинства команд очистки, особенно ",{"type":862,"tag":44,"props":868,"children":870},{"className":869},[],[871],{"type":125,"value":467},{"type":125,"value":873},", требуются права администратора (sudo), так как они затрагивают системные ресурсы.",{"data":875,"body":876},{},{"type":859,"children":877},[878],{"type":862,"tag":21,"props":879,"children":880},{},[881,883,889,891,897],{"type":125,"value":882},"Да, используйте ",{"type":862,"tag":44,"props":884,"children":886},{"className":885},[],[887],{"type":125,"value":888},"docker image rm \u003Cimage_id>",{"type":125,"value":890}," для конкретного образа или ",{"type":862,"tag":44,"props":892,"children":894},{"className":893},[],[895],{"type":125,"value":896},"docker image prune -a --filter \"until=24h\"",{"type":125,"value":898}," для удаления старых (старше 24 часов).",{"data":900,"body":901},{},{"type":859,"children":902},[903],{"type":862,"tag":21,"props":904,"children":905},{},[906,908,913],{"type":125,"value":907},"Dangling volumes — это тома, не связанные ни с одним контейнером. Удаляются командой ",{"type":862,"tag":44,"props":909,"children":911},{"className":910},[],[912],{"type":125,"value":743},{"type":125,"value":914},". Будьте осторожны: это безвозвратно удалит данные.",{"data":916,"body":917},{},{"type":859,"children":918},[919],{"type":862,"tag":21,"props":920,"children":921},{},[922,924,929,931,936,937,942],{"type":125,"value":923},"Базовая команда ",{"type":862,"tag":44,"props":925,"children":927},{"className":926},[],[928],{"type":125,"value":467},{"type":125,"value":930}," не останавливает и не удаляет работающие контейнеры. Однако флаг ",{"type":862,"tag":44,"props":932,"children":934},{"className":933},[],[935],{"type":125,"value":245},{"type":125,"value":145},{"type":862,"tag":44,"props":938,"children":940},{"className":939},[],[941],{"type":125,"value":242},{"type":125,"value":943}," может повлиять на остановленные контейнеры и неиспользуемые образы, на которые они ссылаются.",{"data":945,"body":946},{},{"type":859,"children":947},[948],{"type":862,"tag":21,"props":949,"children":950},{},[951],{"type":125,"value":814},{"data":953,"body":954},{},{"type":859,"children":955},[956],{"type":862,"tag":21,"props":957,"children":958},{},[959],{"type":125,"value":817},{"data":961,"body":962},{},{"type":859,"children":963},[964],{"type":862,"tag":21,"props":965,"children":966},{},[967],{"type":125,"value":820},{"data":969,"body":970},{},{"type":859,"children":971},[972],{"type":862,"tag":21,"props":973,"children":974},{},[975],{"type":125,"value":823},{"data":977,"body":978},{},{"type":859,"children":979},[980],{"type":862,"tag":21,"props":981,"children":982},{},[983],{"type":125,"value":826},[985,2155],{"id":986,"title":987,"appliesTo":988,"author":11,"body":994,"canonical":791,"code":791,"createdAt":2097,"description":2098,"difficulty":794,"draft":795,"estimatedTime":2099,"extension":797,"faq":2100,"howToSteps":2113,"howToTotalTime":2129,"image":791,"keywords":2130,"locale":836,"meta":2141,"navigation":838,"path":842,"platform":840,"related":2142,"section":844,"seo":2146,"severity":791,"stem":2147,"summary":2148,"tags":2149,"twitterCreator":791,"twitterSite":791,"type":854,"updatedAt":2097,"__hash__":2154},"content_ru/guides/linux/docker-installation.md","Установите Docker на Linux: пошаговая инструкция для Ubuntu, CentOS и других",[989,10,990,991,992,993],"Ubuntu 20.04/22.04/24.04","CentOS 7/8","RHEL 8/9","Fedora 35+","Arch Linux",{"type":13,"value":995,"toc":2070},[996,998,1001,1003,1006,1038,1042,1049,1128,1130,1133,1137,1142,1353,1357,1407,1411,1418,1506,1509,1559,1563,1606,1610,1614,1691,1703,1707,1736,1738,1741,1776,1778,1782,1789,1793,1837,1844,1849,1863,1899,1906,1914,1919,1929,1936,1944,1952,1954,1958,1962,1968,2004,2010,2014,2021,2025,2028,2057,2067],[16,997,19],{"id":18},[21,999,1000],{},"Docker — это платформа для контейнеризации, которая позволяет упаковывать приложения и их зависимости в изолированные окружения. Установка Docker на Linux — это первый шаг к разработке, тестированию и развёртыванию современных облачных приложений. После выполнения этого гайда вы сможете запускать контейнеры, создавать образы и использовать весь экосистемный инструментарий Docker.",[16,1002,27],{"id":26},[21,1004,1005],{},"Перед началом убедитесь, что:",[491,1007,1008,1014,1017,1024],{},[35,1009,1010,1011,1013],{},"У вас есть доступ к учётной записи с правами ",[39,1012,57],{}," (или root).",[35,1015,1016],{},"Система подключена к интернету для загрузки пакетов.",[35,1018,1019,1020,1023],{},"Дистрибутив поддерживается Docker (список см. в ",[44,1021,1022],{},"appliesTo"," выше).",[35,1025,1026,1027,321,1030,1033,1034,1037],{},"Установлены базовые утилиты: ",[44,1028,1029],{},"curl",[44,1031,1032],{},"gnupg"," (для Ubuntu/Debian) или ",[44,1035,1036],{},"yum-utils"," (для CentOS/RHEL).",[82,1039,1041],{"id":1040},"удаление-конфликтующих-пакетов-опционально","Удаление конфликтующих пакетов (опционально)",[21,1043,1044,1045,1048],{},"Если на системе ранее устанавливался Docker из репозитория дистрибутива (например, пакет ",[44,1046,1047],{},"docker.io","), удалите его:",[94,1050,1052],{"className":96,"code":1051,"language":98,"meta":99,"style":99},"# Для Ubuntu/Debian\nsudo apt-get remove docker docker-engine docker.io containerd runc\n\n# Для CentOS/RHEL/Fedora\nsudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine\n",[44,1053,1054,1060,1084,1089,1095],{"__ignoreMap":99},[103,1055,1056],{"class":105,"line":106},[103,1057,1059],{"class":1058},"sJ8bj","# Для Ubuntu/Debian\n",[103,1061,1062,1064,1067,1070,1072,1075,1078,1081],{"class":105,"line":777},[103,1063,57],{"class":109},[103,1065,1066],{"class":112}," apt-get",[103,1068,1069],{"class":112}," remove",[103,1071,405],{"class":112},[103,1073,1074],{"class":112}," docker-engine",[103,1076,1077],{"class":112}," docker.io",[103,1079,1080],{"class":112}," containerd",[103,1082,1083],{"class":112}," runc\n",[103,1085,1086],{"class":105,"line":784},[103,1087,1088],{"emptyLinePlaceholder":838},"\n",[103,1090,1092],{"class":105,"line":1091},4,[103,1093,1094],{"class":1058},"# Для CentOS/RHEL/Fedora\n",[103,1096,1098,1100,1103,1105,1107,1110,1113,1116,1119,1122,1125],{"class":105,"line":1097},5,[103,1099,57],{"class":109},[103,1101,1102],{"class":112}," yum",[103,1104,1069],{"class":112},[103,1106,405],{"class":112},[103,1108,1109],{"class":112}," docker-client",[103,1111,1112],{"class":112}," docker-client-latest",[103,1114,1115],{"class":112}," docker-common",[103,1117,1118],{"class":112}," docker-latest",[103,1120,1121],{"class":112}," docker-latest-logrotate",[103,1123,1124],{"class":112}," docker-logrotate",[103,1126,1127],{"class":112}," docker-engine\n",[16,1129,80],{"id":79},[21,1131,1132],{},"Инструкции различаются в зависимости от дистрибутива. Выберите соответствующий раздел.",[82,1134,1136],{"id":1135},"для-ubuntu-debian","Для Ubuntu / Debian",[1138,1139,1141],"h4",{"id":1140},"шаг-1-установка-зависимостей-и-добавление-репозитория","Шаг 1: Установка зависимостей и добавление репозитория",[94,1143,1145],{"className":96,"code":1144,"language":98,"meta":99,"style":99},"# Обновление индекса пакетов\nsudo apt-get update\n\n# Установка необходимых пакетов для работы с HTTPS-репозиториями\nsudo apt-get install ca-certificates curl gnupg\n\n# Создание директории для ключей (если её нет)\nsudo install -m 0755 -d /etc/apt/keyrings\n\n# Импорт GPG-ключа Docker (официальный метод)\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg\nsudo chmod a+r /etc/apt/keyrings/docker.gpg\n\n# Добавление репозитория Docker (замените `jammy` на вашу версию, например `focal`, `noble`)\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \\\n  $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable\" | \\\n  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n",[44,1146,1147,1152,1161,1165,1170,1188,1193,1199,1218,1223,1229,1257,1270,1275,1281,1290,1308,1335],{"__ignoreMap":99},[103,1148,1149],{"class":105,"line":106},[103,1150,1151],{"class":1058},"# Обновление индекса пакетов\n",[103,1153,1154,1156,1158],{"class":105,"line":777},[103,1155,57],{"class":109},[103,1157,1066],{"class":112},[103,1159,1160],{"class":112}," update\n",[103,1162,1163],{"class":105,"line":784},[103,1164,1088],{"emptyLinePlaceholder":838},[103,1166,1167],{"class":105,"line":1091},[103,1168,1169],{"class":1058},"# Установка необходимых пакетов для работы с HTTPS-репозиториями\n",[103,1171,1172,1174,1176,1179,1182,1185],{"class":105,"line":1097},[103,1173,57],{"class":109},[103,1175,1066],{"class":112},[103,1177,1178],{"class":112}," install",[103,1180,1181],{"class":112}," ca-certificates",[103,1183,1184],{"class":112}," curl",[103,1186,1187],{"class":112}," gnupg\n",[103,1189,1191],{"class":105,"line":1190},6,[103,1192,1088],{"emptyLinePlaceholder":838},[103,1194,1196],{"class":105,"line":1195},7,[103,1197,1198],{"class":1058},"# Создание директории для ключей (если её нет)\n",[103,1200,1202,1204,1206,1209,1212,1215],{"class":105,"line":1201},8,[103,1203,57],{"class":109},[103,1205,1178],{"class":112},[103,1207,1208],{"class":191}," -m",[103,1210,1211],{"class":191}," 0755",[103,1213,1214],{"class":191}," -d",[103,1216,1217],{"class":112}," /etc/apt/keyrings\n",[103,1219,1221],{"class":105,"line":1220},9,[103,1222,1088],{"emptyLinePlaceholder":838},[103,1224,1226],{"class":105,"line":1225},10,[103,1227,1228],{"class":1058},"# Импорт GPG-ключа Docker (официальный метод)\n",[103,1230,1232,1234,1237,1240,1242,1245,1248,1251,1254],{"class":105,"line":1231},11,[103,1233,1029],{"class":109},[103,1235,1236],{"class":191}," -fsSL",[103,1238,1239],{"class":112}," https://download.docker.com/linux/ubuntu/gpg",[103,1241,399],{"class":398},[103,1243,1244],{"class":109}," sudo",[103,1246,1247],{"class":112}," gpg",[103,1249,1250],{"class":191}," --dearmor",[103,1252,1253],{"class":191}," -o",[103,1255,1256],{"class":112}," /etc/apt/keyrings/docker.gpg\n",[103,1258,1260,1262,1265,1268],{"class":105,"line":1259},12,[103,1261,57],{"class":109},[103,1263,1264],{"class":112}," chmod",[103,1266,1267],{"class":112}," a+r",[103,1269,1256],{"class":112},[103,1271,1273],{"class":105,"line":1272},13,[103,1274,1088],{"emptyLinePlaceholder":838},[103,1276,1278],{"class":105,"line":1277},14,[103,1279,1280],{"class":1058},"# Добавление репозитория Docker (замените `jammy` на вашу версию, например `focal`, `noble`)\n",[103,1282,1284,1287],{"class":105,"line":1283},15,[103,1285,1286],{"class":191},"echo",[103,1288,1289],{"class":191}," \\\n",[103,1291,1293,1296,1299,1302,1305],{"class":105,"line":1292},16,[103,1294,1295],{"class":112},"  \"deb [arch=$(",[103,1297,1298],{"class":109},"dpkg",[103,1300,1301],{"class":191}," --print-architecture",[103,1303,1304],{"class":112},") signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu ",[103,1306,1307],{"class":191},"\\\n",[103,1309,1311,1314,1316,1319,1321,1324,1328,1331,1333],{"class":105,"line":1310},17,[103,1312,1313],{"class":112},"  $(",[103,1315,58],{"class":191},[103,1317,1318],{"class":112}," /etc/os-release && ",[103,1320,1286],{"class":191},[103,1322,1323],{"class":112}," \"",[103,1325,1327],{"class":1326},"sVt8B","$VERSION_CODENAME",[103,1329,1330],{"class":112},"\") stable\"",[103,1332,399],{"class":398},[103,1334,1289],{"class":191},[103,1336,1338,1341,1344,1347,1350],{"class":105,"line":1337},18,[103,1339,1340],{"class":109},"  sudo",[103,1342,1343],{"class":112}," tee",[103,1345,1346],{"class":112}," /etc/apt/sources.list.d/docker.list",[103,1348,1349],{"class":398}," >",[103,1351,1352],{"class":112}," /dev/null\n",[1138,1354,1356],{"id":1355},"шаг-2-установка-docker-engine","Шаг 2: Установка Docker Engine",[94,1358,1360],{"className":96,"code":1359,"language":98,"meta":99,"style":99},"# Обновление кэша пакетов с нового репозитория\nsudo apt-get update\n\n# Установка последней версии Docker и зависимостей\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[44,1361,1362,1367,1375,1379,1384],{"__ignoreMap":99},[103,1363,1364],{"class":105,"line":106},[103,1365,1366],{"class":1058},"# Обновление кэша пакетов с нового репозитория\n",[103,1368,1369,1371,1373],{"class":105,"line":777},[103,1370,57],{"class":109},[103,1372,1066],{"class":112},[103,1374,1160],{"class":112},[103,1376,1377],{"class":105,"line":784},[103,1378,1088],{"emptyLinePlaceholder":838},[103,1380,1381],{"class":105,"line":1091},[103,1382,1383],{"class":1058},"# Установка последней версии Docker и зависимостей\n",[103,1385,1386,1388,1390,1392,1395,1398,1401,1404],{"class":105,"line":1097},[103,1387,57],{"class":109},[103,1389,1066],{"class":112},[103,1391,1178],{"class":112},[103,1393,1394],{"class":112}," docker-ce",[103,1396,1397],{"class":112}," docker-ce-cli",[103,1399,1400],{"class":112}," containerd.io",[103,1402,1403],{"class":112}," docker-buildx-plugin",[103,1405,1406],{"class":112}," docker-compose-plugin\n",[82,1408,1410],{"id":1409},"для-centos-rhel-fedora","Для CentOS / RHEL / Fedora",[1138,1412,1414,1415,1417],{"id":1413},"шаг-1-установка-yum-utils-и-добавление-репозитория","Шаг 1: Установка ",[44,1416,1036],{}," и добавление репозитория",[94,1419,1421],{"className":96,"code":1420,"language":98,"meta":99,"style":99},"# Для CentOS/RHEL 7/8\nsudo yum install -y yum-utils\n\n# Для Fedora (использует dnf)\nsudo dnf install -y dnf-plugins-core\n\n# Добавление стабильного репозитория Docker\nsudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n# Или для Fedora:\nsudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo\n",[44,1422,1423,1428,1442,1446,1451,1465,1469,1474,1487,1492],{"__ignoreMap":99},[103,1424,1425],{"class":105,"line":106},[103,1426,1427],{"class":1058},"# Для CentOS/RHEL 7/8\n",[103,1429,1430,1432,1434,1436,1439],{"class":105,"line":777},[103,1431,57],{"class":109},[103,1433,1102],{"class":112},[103,1435,1178],{"class":112},[103,1437,1438],{"class":191}," -y",[103,1440,1441],{"class":112}," yum-utils\n",[103,1443,1444],{"class":105,"line":784},[103,1445,1088],{"emptyLinePlaceholder":838},[103,1447,1448],{"class":105,"line":1091},[103,1449,1450],{"class":1058},"# Для Fedora (использует dnf)\n",[103,1452,1453,1455,1458,1460,1462],{"class":105,"line":1097},[103,1454,57],{"class":109},[103,1456,1457],{"class":112}," dnf",[103,1459,1178],{"class":112},[103,1461,1438],{"class":191},[103,1463,1464],{"class":112}," dnf-plugins-core\n",[103,1466,1467],{"class":105,"line":1190},[103,1468,1088],{"emptyLinePlaceholder":838},[103,1470,1471],{"class":105,"line":1195},[103,1472,1473],{"class":1058},"# Добавление стабильного репозитория Docker\n",[103,1475,1476,1478,1481,1484],{"class":105,"line":1201},[103,1477,57],{"class":109},[103,1479,1480],{"class":112}," yum-config-manager",[103,1482,1483],{"class":191}," --add-repo",[103,1485,1486],{"class":112}," https://download.docker.com/linux/centos/docker-ce.repo\n",[103,1488,1489],{"class":105,"line":1220},[103,1490,1491],{"class":1058},"# Или для Fedora:\n",[103,1493,1494,1496,1498,1501,1503],{"class":105,"line":1225},[103,1495,57],{"class":109},[103,1497,1457],{"class":112},[103,1499,1500],{"class":112}," config-manager",[103,1502,1483],{"class":191},[103,1504,1505],{"class":112}," https://download.docker.com/linux/fedora/docker-ce.repo\n",[1138,1507,1356],{"id":1508},"шаг-2-установка-docker-engine-1",[94,1510,1512],{"className":96,"code":1511,"language":98,"meta":99,"style":99},"# Установка последней версии (для CentOS/RHEL/Fedora)\nsudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n\n# Если yum сообщает о конфликтах, можно попробовать:\nsudo yum install docker-ce --allowerasing\n",[44,1513,1514,1519,1537,1541,1546],{"__ignoreMap":99},[103,1515,1516],{"class":105,"line":106},[103,1517,1518],{"class":1058},"# Установка последней версии (для CentOS/RHEL/Fedora)\n",[103,1520,1521,1523,1525,1527,1529,1531,1533,1535],{"class":105,"line":777},[103,1522,57],{"class":109},[103,1524,1102],{"class":112},[103,1526,1178],{"class":112},[103,1528,1394],{"class":112},[103,1530,1397],{"class":112},[103,1532,1400],{"class":112},[103,1534,1403],{"class":112},[103,1536,1406],{"class":112},[103,1538,1539],{"class":105,"line":784},[103,1540,1088],{"emptyLinePlaceholder":838},[103,1542,1543],{"class":105,"line":1091},[103,1544,1545],{"class":1058},"# Если yum сообщает о конфликтах, можно попробовать:\n",[103,1547,1548,1550,1552,1554,1556],{"class":105,"line":1097},[103,1549,57],{"class":109},[103,1551,1102],{"class":112},[103,1553,1178],{"class":112},[103,1555,1394],{"class":112},[103,1557,1558],{"class":191}," --allowerasing\n",[82,1560,1562],{"id":1561},"для-arch-linux","Для Arch Linux",[94,1564,1566],{"className":96,"code":1565,"language":98,"meta":99,"style":99},"# Установка из официальных репозиториев Arch\nsudo pacman -S docker\n\n# Дополнительно можно установить docker-compose (если нужен отдельный пакет)\nsudo pacman -S docker-compose\n",[44,1567,1568,1573,1586,1590,1595],{"__ignoreMap":99},[103,1569,1570],{"class":105,"line":106},[103,1571,1572],{"class":1058},"# Установка из официальных репозиториев Arch\n",[103,1574,1575,1577,1580,1583],{"class":105,"line":777},[103,1576,57],{"class":109},[103,1578,1579],{"class":112}," pacman",[103,1581,1582],{"class":191}," -S",[103,1584,1585],{"class":112}," docker\n",[103,1587,1588],{"class":105,"line":784},[103,1589,1088],{"emptyLinePlaceholder":838},[103,1591,1592],{"class":105,"line":1091},[103,1593,1594],{"class":1058},"# Дополнительно можно установить docker-compose (если нужен отдельный пакет)\n",[103,1596,1597,1599,1601,1603],{"class":105,"line":1097},[103,1598,57],{"class":109},[103,1600,1579],{"class":112},[103,1602,1582],{"class":191},[103,1604,1605],{"class":112}," docker-compose\n",[82,1607,1609],{"id":1608},"общие-шаги-для-всех-дистрибутивов","Общие шаги для всех дистрибутивов",[1138,1611,1613],{"id":1612},"шаг-3-настройка-прав-доступа-и-запуск-сервиса","Шаг 3: Настройка прав доступа и запуск сервиса",[94,1615,1617],{"className":96,"code":1616,"language":98,"meta":99,"style":99},"# Добавление текущего пользователя в группу `docker` (чтобы не использовать sudo)\nsudo usermod -aG docker $USER\n\n# Запуск демона Docker и включение автозагрузки\nsudo systemctl start docker\nsudo systemctl enable docker\n\n# Проверка статуса (должен быть `active (running)`)\nsudo systemctl status docker\n",[44,1618,1619,1624,1639,1643,1648,1660,1671,1675,1680],{"__ignoreMap":99},[103,1620,1621],{"class":105,"line":106},[103,1622,1623],{"class":1058},"# Добавление текущего пользователя в группу `docker` (чтобы не использовать sudo)\n",[103,1625,1626,1628,1631,1634,1636],{"class":105,"line":777},[103,1627,57],{"class":109},[103,1629,1630],{"class":112}," usermod",[103,1632,1633],{"class":191}," -aG",[103,1635,405],{"class":112},[103,1637,1638],{"class":1326}," $USER\n",[103,1640,1641],{"class":105,"line":784},[103,1642,1088],{"emptyLinePlaceholder":838},[103,1644,1645],{"class":105,"line":1091},[103,1646,1647],{"class":1058},"# Запуск демона Docker и включение автозагрузки\n",[103,1649,1650,1652,1655,1658],{"class":105,"line":1097},[103,1651,57],{"class":109},[103,1653,1654],{"class":112}," systemctl",[103,1656,1657],{"class":112}," start",[103,1659,1585],{"class":112},[103,1661,1662,1664,1666,1669],{"class":105,"line":1190},[103,1663,57],{"class":109},[103,1665,1654],{"class":112},[103,1667,1668],{"class":112}," enable",[103,1670,1585],{"class":112},[103,1672,1673],{"class":105,"line":1195},[103,1674,1088],{"emptyLinePlaceholder":838},[103,1676,1677],{"class":105,"line":1201},[103,1678,1679],{"class":1058},"# Проверка статуса (должен быть `active (running)`)\n",[103,1681,1682,1684,1686,1689],{"class":105,"line":1220},[103,1683,57],{"class":109},[103,1685,1654],{"class":112},[103,1687,1688],{"class":112}," status",[103,1690,1585],{"class":112},[1692,1693,1694],"blockquote",{},[21,1695,1696,1697,1699,1700,58],{},"⚠️ ",[39,1698,277],{}," Изменения группы вступят в силу после выхода и повторного входа в систему или выполнения ",[44,1701,1702],{},"newgrp docker",[1138,1704,1706],{"id":1705},"шаг-4-проверка-установки","Шаг 4: Проверка установки",[94,1708,1710],{"className":96,"code":1709,"language":98,"meta":99,"style":99},"# Загрузка и запуск тестового контейнера `hello-world`\ndocker run hello-world\n\n# Ожидаемый вывод: сообщение об успешной загрузке образа и приветствие.\n",[44,1711,1712,1717,1727,1731],{"__ignoreMap":99},[103,1713,1714],{"class":105,"line":106},[103,1715,1716],{"class":1058},"# Загрузка и запуск тестового контейнера `hello-world`\n",[103,1718,1719,1721,1724],{"class":105,"line":777},[103,1720,53],{"class":109},[103,1722,1723],{"class":112}," run",[103,1725,1726],{"class":112}," hello-world\n",[103,1728,1729],{"class":105,"line":784},[103,1730,1088],{"emptyLinePlaceholder":838},[103,1732,1733],{"class":105,"line":1091},[103,1734,1735],{"class":1058},"# Ожидаемый вывод: сообщение об успешной загрузке образа и приветствие.\n",[16,1737,594],{"id":593},[21,1739,1740],{},"Успешная установка подтверждается:",[32,1742,1743,1750,1757,1767],{},[35,1744,1745,1746,1749],{},"Команда ",[44,1747,1748],{},"docker version"," показывает клиентскую и серверную версии без ошибок.",[35,1751,1752,1753,1756],{},"Контейнер ",[44,1754,1755],{},"hello-world"," запускается и выводит приветственное сообщение.",[35,1758,1759,1760,1763,1764,58],{},"Демон Docker активен: ",[44,1761,1762],{},"sudo systemctl is-active docker"," возвращает ",[44,1765,1766],{},"active",[35,1768,1769,1770,1773,1774,58],{},"Текущий пользователь может выполнять ",[44,1771,1772],{},"docker ps"," без ",[44,1775,57],{},[16,1777,635],{"id":634},[82,1779,1781],{"id":1780},"ошибка-cannot-connect-to-the-docker-daemon-at-unixvarrundockersock-is-the-docker-daemon-running","Ошибка: \"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?\"",[21,1783,1784,1786,1787,58],{},[39,1785,647],{}," Демон Docker не запущен или текущий пользователь не в группе ",[44,1788,53],{},[21,1790,1791],{},[39,1792,653],{},[94,1794,1796],{"className":96,"code":1795,"language":98,"meta":99,"style":99},"sudo systemctl start docker\n# Добавьте пользователя в группу, если ещё не делали\nsudo usermod -aG docker $USER\n# Перезайдите в систему или выполните:\nnewgrp docker\n",[44,1797,1798,1808,1813,1825,1830],{"__ignoreMap":99},[103,1799,1800,1802,1804,1806],{"class":105,"line":106},[103,1801,57],{"class":109},[103,1803,1654],{"class":112},[103,1805,1657],{"class":112},[103,1807,1585],{"class":112},[103,1809,1810],{"class":105,"line":777},[103,1811,1812],{"class":1058},"# Добавьте пользователя в группу, если ещё не делали\n",[103,1814,1815,1817,1819,1821,1823],{"class":105,"line":784},[103,1816,57],{"class":109},[103,1818,1630],{"class":112},[103,1820,1633],{"class":191},[103,1822,405],{"class":112},[103,1824,1638],{"class":1326},[103,1826,1827],{"class":105,"line":1091},[103,1828,1829],{"class":1058},"# Перезайдите в систему или выполните:\n",[103,1831,1832,1835],{"class":105,"line":1097},[103,1833,1834],{"class":109},"newgrp",[103,1836,1585],{"class":112},[82,1838,1840,1841],{"id":1839},"ошибка-gpg-ключ-не-найден-или-no_pubkey","Ошибка: GPG-ключ не найден или ",[44,1842,1843],{},"NO_PUBKEY",[21,1845,1846,1848],{},[39,1847,647],{}," Не установлен или не добавлен ключ репозитория Docker.",[21,1850,1851,1854,1855,1858,1859,1862],{},[39,1852,1853],{},"Решение (Ubuntu/Debian):"," Убедитесь, что ключ скопирован в ",[44,1856,1857],{},"/etc/apt/keyrings/docker.gpg"," и имеет права ",[44,1860,1861],{},"a+r",". Для старых версий (до Ubuntu 22.04) может потребоваться:",[94,1864,1866],{"className":96,"code":1865,"language":98,"meta":99,"style":99},"sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys \u003CID_ключа>\n",[44,1867,1868],{"__ignoreMap":99},[103,1869,1870,1872,1875,1878,1881,1884,1887,1890,1893,1896],{"class":105,"line":106},[103,1871,57],{"class":109},[103,1873,1874],{"class":112}," apt-key",[103,1876,1877],{"class":112}," adv",[103,1879,1880],{"class":191}," --keyserver",[103,1882,1883],{"class":112}," keyserver.ubuntu.com",[103,1885,1886],{"class":191}," --recv-keys",[103,1888,1889],{"class":398}," \u003C",[103,1891,1892],{"class":112},"ID_ключ",[103,1894,1895],{"class":1326},"а",[103,1897,1898],{"class":398},">\n",[21,1900,1901,1902,1905],{},"Но метод с ",[44,1903,1904],{},"/etc/apt/keyrings"," предпочтительнее.",[82,1907,1909,1910,1913],{"id":1908},"ошибка-error-failed-to-solve-при-попытке-запуска","Ошибка: ",[44,1911,1912],{},"Error: failed to solve: ..."," при попытке запуска",[21,1915,1916,1918],{},[39,1917,647],{}," Недостаточно места на диске или проблемы с сетью при загрузке образа.",[21,1920,1921,1923,1924,1926,1927,58],{},[39,1922,653],{}," Проверьте свободное место (",[44,1925,631],{},") и подключение к Docker Hub. Можно попробовать очистить старые образы: ",[44,1928,668],{},[82,1930,1932,1933],{"id":1931},"конфликт-версий-containerd","Конфликт версий ",[44,1934,1935],{},"containerd",[21,1937,1938,1940,1941,1943],{},[39,1939,647],{}," В некоторых дистрибутивах (особенно CentOS 7) предустановленная версия ",[44,1942,1935],{}," слишком старая.",[21,1945,1946,1948,1949,1951],{},[39,1947,653],{}," Удалите системный ",[44,1950,1935],{}," перед установкой Docker (он будет установлен как зависимость). Или используйте официальный скрипт Docker для ручной установки.",[456,1953],{},[16,1955,1957],{"id":1956},"дополнительные-настройки-опционально","Дополнительные настройки (опционально)",[82,1959,1961],{"id":1960},"настройка-dns-для-контейнеров","Настройка DNS для контейнеров",[21,1963,1964,1965,174],{},"Если контейнеры не могут разрешать имена, отредактируйте ",[44,1966,1967],{},"/etc/docker/daemon.json",[94,1969,1973],{"className":1970,"code":1971,"language":1972,"meta":99,"style":99},"language-json shiki shiki-themes github-light github-dark","{\n  \"dns\": [\"8.8.8.8\", \"1.1.1.1\"]\n}\n","json",[44,1974,1975,1980,1999],{"__ignoreMap":99},[103,1976,1977],{"class":105,"line":106},[103,1978,1979],{"class":1326},"{\n",[103,1981,1982,1985,1988,1991,1993,1996],{"class":105,"line":777},[103,1983,1984],{"class":191},"  \"dns\"",[103,1986,1987],{"class":1326},": [",[103,1989,1990],{"class":112},"\"8.8.8.8\"",[103,1992,321],{"class":1326},[103,1994,1995],{"class":112},"\"1.1.1.1\"",[103,1997,1998],{"class":1326},"]\n",[103,2000,2001],{"class":105,"line":784},[103,2002,2003],{"class":1326},"}\n",[21,2005,2006,2007,58],{},"После изменений перезапустите демон: ",[44,2008,2009],{},"sudo systemctl restart docker",[82,2011,2013],{"id":2012},"увеличение-размеров-образов-для-production","Увеличение размеров образов (для production)",[21,2015,2016,2017,2020],{},"Для продакшн-сред рекомендуется настройка драйвера хранения (например, ",[44,2018,2019],{},"overlay2",") и лимитов ресурсов. См. официальную документацию Docker по настройке демона.",[16,2022,2024],{"id":2023},"заключительные-рекомендации","Заключительные рекомендации",[21,2026,2027],{},"Теперь, когда Docker установлен, вы можете:",[32,2029,2030,2044,2051],{},[35,2031,2032,2033,321,2036,321,2039,321,2041,58],{},"Изучить базовые команды: ",[44,2034,2035],{},"docker pull",[44,2037,2038],{},"docker run",[44,2040,1772],{},[44,2042,2043],{},"docker exec",[35,2045,2046,2047,2050],{},"Написать свой первый ",[44,2048,2049],{},"Dockerfile"," и собрать образ.",[35,2052,2053,2054,47],{},"Установить Docker Compose для оркестрации многоконтейнерных приложений (входит в пакет ",[44,2055,2056],{},"docker-compose-plugin",[21,2058,2059,2060,321,2063,2066],{},"Для обновления Docker в будущем используйте стандартный менеджер пакетов (",[44,2061,2062],{},"apt upgrade",[44,2064,2065],{},"yum update","). Регулярно проверяйте обновления безопасности.",[773,2068,2069],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":99,"searchDepth":777,"depth":777,"links":2071},[2072,2073,2076,2082,2083,2092,2096],{"id":18,"depth":777,"text":19},{"id":26,"depth":777,"text":27,"children":2074},[2075],{"id":1040,"depth":784,"text":1041},{"id":79,"depth":777,"text":80,"children":2077},[2078,2079,2080,2081],{"id":1135,"depth":784,"text":1136},{"id":1409,"depth":784,"text":1410},{"id":1561,"depth":784,"text":1562},{"id":1608,"depth":784,"text":1609},{"id":593,"depth":777,"text":594},{"id":634,"depth":777,"text":635,"children":2084},[2085,2086,2088,2090],{"id":1780,"depth":784,"text":1781},{"id":1839,"depth":784,"text":2087},"Ошибка: GPG-ключ не найден или NO_PUBKEY",{"id":1908,"depth":784,"text":2089},"Ошибка: Error: failed to solve: ... при попытке запуска",{"id":1931,"depth":784,"text":2091},"Конфликт версий containerd",{"id":1956,"depth":777,"text":1957,"children":2093},[2094,2095],{"id":1960,"depth":784,"text":1961},{"id":2012,"depth":784,"text":2013},{"id":2023,"depth":777,"text":2024},"2026-02-16 13:46:05","Полное руководство по установке Docker на любом дистрибутиве Linux. Официальные репозитории, настройка прав и проверка работы за 15 минут.","15-30 мин",[2101,2104,2107,2110],{"question":2102,"answer":2103},"Почему Docker требует sudo для каждой команды?","По умолчанию только root и пользователи в группе `docker` могут управлять демоном. Добавьте текущего пользователя в группу `docker` и перезайдите в систему, чтобы работать без sudo.",{"question":2105,"answer":2106},"Что делать, если при добавлении GPG-ключа возникает ошибка?","Убедитесь, что пакет `curl` или `gnupg` установлен. На старых дистрибутивах может потребоваться использовать `apt-key` (устарел) или вручную скачать ключ.",{"question":2108,"answer":2109},"Можно ли установить Docker на Raspberry Pi с Linux?","Да, но нужно использовать версию Docker для архитектуры ARM. Установите пакет `docker.io` из репозитория дистрибутива или используйте официальный скрипт для ARM.",{"question":2111,"answer":2112},"Как полностью удалить Docker перед переустановкой?","Выполните: `sudo apt-get purge docker-ce docker-ce-cli containerd.io` (для Ubuntu/Debian) или `sudo yum remove docker-ce` (для CentOS/RHEL), затем удалите файлы в `/var/lib/docker`.",[2114,2117,2120,2123,2126],{"name":2115,"text":2116},"Подготовьте систему и удалите старые версии Docker","Обновите кэш пакетов и удалите конфликтующие пакеты Docker, если они есть. Это гарантирует чистую установку.",{"name":2118,"text":2119},"Добавьте официальный репозиторий Docker","Импортируйте GPG-ключ Docker и добавьте стабильный репозиторий, соответствующий вашему дистрибутиву.",{"name":2121,"text":2122},"Установите Docker Engine и вспомогательные компоненты","Установите пакеты `docker-ce`, `docker-ce-cli` и `containerd.io` через менеджер пакетов вашего дистрибутива.",{"name":2124,"text":2125},"Настройте права доступа и запустите сервис","Добавьте текущего пользователя в группу `docker`, затем запустите и включите автозагрузку демона Docker.",{"name":2127,"text":2128},"Проверьте работоспособность установки","Выполните команду `docker run hello-world` для проверки связи с демоном и корректности настройки.","PT30M",[2131,2132,2133,2134,2135,2136,2137,2138,2139,2140],"установка docker на linux","docker engine установка ubuntu","как установить docker на centos","docker linux инструкция","установка docker через терминал","docker ошибка permission denied","добавить репозиторий docker","запуск docker без sudo","docker hello world","удалить старый docker",{},[2143,2144,2145],"/guides/linux/docker-run-basic","/errors/linux/docker-permission-denied","/guides/linux/docker-compose-install",{"title":987,"description":2098},"guides/linux/docker-installation","Этот гайд поможет вам правильно установить Docker Engine на популярные дистрибутивы Linux, включая Ubuntu, CentOS, Fedora и Arch. Вы научитесь добавлять репозиторий, устанавливать пакеты и настраивать права для работы без sudo.",[2150,53,840,2151,2152,853,851,2153],"установка","ubuntu","centos","контейнеры","E7mh90BkVudDcPI6Cr_QBqlS5DHoLvpQZQS6L1zaZgY",{"id":2156,"title":2157,"appliesTo":2158,"author":11,"body":2160,"canonical":791,"code":791,"createdAt":3437,"description":3438,"difficulty":794,"draft":795,"estimatedTime":3439,"extension":797,"faq":3440,"howToSteps":3453,"howToTotalTime":3472,"image":791,"keywords":3473,"locale":836,"meta":3484,"navigation":838,"path":843,"platform":840,"related":3485,"section":844,"seo":3488,"severity":791,"stem":3489,"summary":3490,"tags":3491,"twitterCreator":791,"twitterSite":791,"type":854,"updatedAt":3437,"__hash__":3495},"content_ru/guides/linux/docker-compose-basics.md","Docker Compose для Linux: создайте первый стек сервисов",[7,2159,8,9],"Docker Compose v2.0+",{"type":13,"value":2161,"toc":3413},[2162,2164,2167,2170,2184,2186,2189,2213,2216,2238,2241,2265,2268,2283,2287,2290,2312,2318,2337,2341,2347,2680,2684,2797,2801,2807,2824,2827,2856,2865,2869,2987,2989,2993,2996,3088,3091,3107,3111,3120,3138,3141,3159,3161,3167,3192,3195,3212,3214,3220,3229,3249,3255,3262,3294,3300,3310,3333,3339,3346,3356,3379,3383,3390,3410],[16,2163,19],{"id":18},[21,2165,2166],{},"Docker Compose — это инструмент, который позволяет описывать и управлять многоконтейнерными приложениями с помощью одного YAML-файла. Вместо того чтобы вручную запускать десяток контейнеров, настраивать сети и тома, вы описываете всю инфраструктуру как код. Это особенно полезно для разработки, тестирования и локального развёртывания.",[21,2168,2169],{},"После выполнения этого гайда вы:",[491,2171,2172,2178,2181],{},[35,2173,2174,2175],{},"Поймёте базовый синтаксис ",[44,2176,2177],{},"docker-compose.yml",[35,2179,2180],{},"Научитесь запускать стек из веб-сервиса и базы данных",[35,2182,2183],{},"Узнаете, как управлять жизненным циклом контейнеров одной командой",[16,2185,27],{"id":26},[21,2187,2188],{},"Перед началом убедитесь, что у вас установлено:",[32,2190,2191,2196,2205],{},[35,2192,2193,2195],{},[39,2194,41],{}," (версия 20.10 или новее)",[35,2197,2198,2201,2202,2204],{},[39,2199,2200],{},"Docker Compose v2"," (входит в состав Docker Desktop для Linux или как плагин ",[44,2203,2056],{},")",[35,2206,2207,2210,2211,2204],{},[39,2208,2209],{},"Права sudo"," (или пользователь в группе ",[44,2212,53],{},[21,2214,2215],{},"Проверьте установку:",[94,2217,2219],{"className":96,"code":2218,"language":98,"meta":99,"style":99},"docker --version\ndocker compose version\n",[44,2220,2221,2228],{"__ignoreMap":99},[103,2222,2223,2225],{"class":105,"line":106},[103,2224,53],{"class":109},[103,2226,2227],{"class":191}," --version\n",[103,2229,2230,2232,2235],{"class":105,"line":777},[103,2231,53],{"class":109},[103,2233,2234],{"class":112}," compose",[103,2236,2237],{"class":112}," version\n",[21,2239,2240],{},"Если Docker Compose не установлен, на Ubuntu/Debian:",[94,2242,2244],{"className":96,"code":2243,"language":98,"meta":99,"style":99},"sudo apt update\nsudo apt install docker-compose-plugin\n",[44,2245,2246,2255],{"__ignoreMap":99},[103,2247,2248,2250,2253],{"class":105,"line":106},[103,2249,57],{"class":109},[103,2251,2252],{"class":112}," apt",[103,2254,1160],{"class":112},[103,2256,2257,2259,2261,2263],{"class":105,"line":777},[103,2258,57],{"class":109},[103,2260,2252],{"class":112},[103,2262,1178],{"class":112},[103,2264,1406],{"class":112},[21,2266,2267],{},"На CentOS/Rocky/AlmaLinux:",[94,2269,2271],{"className":96,"code":2270,"language":98,"meta":99,"style":99},"sudo yum install docker-compose-plugin\n",[44,2272,2273],{"__ignoreMap":99},[103,2274,2275,2277,2279,2281],{"class":105,"line":106},[103,2276,57],{"class":109},[103,2278,1102],{"class":112},[103,2280,1178],{"class":112},[103,2282,1406],{"class":112},[16,2284,2286],{"id":2285},"шаг-1-создайте-структуру-проекта","Шаг 1: Создайте структуру проекта",[21,2288,2289],{},"Создайте каталог для вашего приложения и перейдите в него:",[94,2291,2293],{"className":96,"code":2292,"language":98,"meta":99,"style":99},"mkdir myapp && cd myapp\n",[44,2294,2295],{"__ignoreMap":99},[103,2296,2297,2300,2303,2306,2309],{"class":105,"line":106},[103,2298,2299],{"class":109},"mkdir",[103,2301,2302],{"class":112}," myapp",[103,2304,2305],{"class":1326}," && ",[103,2307,2308],{"class":191},"cd",[103,2310,2311],{"class":112}," myapp\n",[21,2313,2314,2315,2317],{},"В этом каталоге создайте файл ",[44,2316,2177],{},". Мы будем разворачивать простой стек:",[491,2319,2320,2329],{},[35,2321,2322,2328],{},[39,2323,2324,2325],{},"Сервис ",[44,2326,2327],{},"web",": Python Flask-приложение",[35,2330,2331,2336],{},[39,2332,2324,2333],{},[44,2334,2335],{},"db",": PostgreSQL",[16,2338,2340],{"id":2339},"шаг-2-напишите-файл-docker-composeyml","Шаг 2: Напишите файл docker-compose.yml",[21,2342,2343,2344,2346],{},"Создайте файл ",[44,2345,2177],{}," со следующим содержимым:",[94,2348,2352],{"className":2349,"code":2350,"language":2351,"meta":99,"style":99},"language-yaml shiki shiki-themes github-light github-dark","version: '3.8'\n\nservices:\n  web:\n    image: python:3.11-slim\n    command: >\n      sh -c \"pip install flask psycopg2-binary &&\n             echo 'from flask import Flask\\nfrom psycopg2 import connect\\napp = Flask(__name__)\\n@app.route(\\\"/\\\")\\ndef hello():\\n    try:\\n        conn = connect(dbname=\\\"testdb\\\", user=\\\"user\\\", password=\\\"password\\\", host=\\\"db\\\")\\n        return \\\"Hello from Docker Compose! DB connection: OK\\\"\\n    except Exception as e:\\n        return f\\\"DB error: {e}\\\"\\nif __name__ == \\\"__main__\\\":\\n    app.run(host=\\\"0.0.0.0\\\", port=5000)' > app.py &&\n             python app.py\"\n    ports:\n      - \"5000:5000\"\n    depends_on:\n      - db\n    environment:\n      - DATABASE_URL=postgresql://user:password@db/testdb\n    networks:\n      - app-network\n\n  db:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n      POSTGRES_DB: testdb\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n    networks:\n      - app-network\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U user\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\nvolumes:\n  postgres_data:\n\nnetworks:\n  app-network:\n    driver: bridge\n","yaml",[44,2353,2354,2366,2370,2378,2385,2395,2404,2409,2414,2419,2426,2434,2441,2448,2455,2462,2469,2476,2480,2488,2498,2505,2516,2527,2538,2546,2554,2561,2568,2576,2594,2605,2616,2627,2632,2640,2648,2653,2661,2669],{"__ignoreMap":99},[103,2355,2356,2360,2363],{"class":105,"line":106},[103,2357,2359],{"class":2358},"s9eBZ","version",[103,2361,2362],{"class":1326},": ",[103,2364,2365],{"class":112},"'3.8'\n",[103,2367,2368],{"class":105,"line":777},[103,2369,1088],{"emptyLinePlaceholder":838},[103,2371,2372,2375],{"class":105,"line":784},[103,2373,2374],{"class":2358},"services",[103,2376,2377],{"class":1326},":\n",[103,2379,2380,2383],{"class":105,"line":1091},[103,2381,2382],{"class":2358},"  web",[103,2384,2377],{"class":1326},[103,2386,2387,2390,2392],{"class":105,"line":1097},[103,2388,2389],{"class":2358},"    image",[103,2391,2362],{"class":1326},[103,2393,2394],{"class":112},"python:3.11-slim\n",[103,2396,2397,2400,2402],{"class":105,"line":1190},[103,2398,2399],{"class":2358},"    command",[103,2401,2362],{"class":1326},[103,2403,1898],{"class":398},[103,2405,2406],{"class":105,"line":1195},[103,2407,2408],{"class":112},"      sh -c \"pip install flask psycopg2-binary &&\n",[103,2410,2411],{"class":105,"line":1201},[103,2412,2413],{"class":112},"             echo 'from flask import Flask\\nfrom psycopg2 import connect\\napp = Flask(__name__)\\n@app.route(\\\"/\\\")\\ndef hello():\\n    try:\\n        conn = connect(dbname=\\\"testdb\\\", user=\\\"user\\\", password=\\\"password\\\", host=\\\"db\\\")\\n        return \\\"Hello from Docker Compose! DB connection: OK\\\"\\n    except Exception as e:\\n        return f\\\"DB error: {e}\\\"\\nif __name__ == \\\"__main__\\\":\\n    app.run(host=\\\"0.0.0.0\\\", port=5000)' > app.py &&\n",[103,2415,2416],{"class":105,"line":1220},[103,2417,2418],{"class":112},"             python app.py\"\n",[103,2420,2421,2424],{"class":105,"line":1225},[103,2422,2423],{"class":2358},"    ports",[103,2425,2377],{"class":1326},[103,2427,2428,2431],{"class":105,"line":1231},[103,2429,2430],{"class":1326},"      - ",[103,2432,2433],{"class":112},"\"5000:5000\"\n",[103,2435,2436,2439],{"class":105,"line":1259},[103,2437,2438],{"class":2358},"    depends_on",[103,2440,2377],{"class":1326},[103,2442,2443,2445],{"class":105,"line":1272},[103,2444,2430],{"class":1326},[103,2446,2447],{"class":112},"db\n",[103,2449,2450,2453],{"class":105,"line":1277},[103,2451,2452],{"class":2358},"    environment",[103,2454,2377],{"class":1326},[103,2456,2457,2459],{"class":105,"line":1283},[103,2458,2430],{"class":1326},[103,2460,2461],{"class":112},"DATABASE_URL=postgresql://user:password@db/testdb\n",[103,2463,2464,2467],{"class":105,"line":1292},[103,2465,2466],{"class":2358},"    networks",[103,2468,2377],{"class":1326},[103,2470,2471,2473],{"class":105,"line":1310},[103,2472,2430],{"class":1326},[103,2474,2475],{"class":112},"app-network\n",[103,2477,2478],{"class":105,"line":1337},[103,2479,1088],{"emptyLinePlaceholder":838},[103,2481,2483,2486],{"class":105,"line":2482},19,[103,2484,2485],{"class":2358},"  db",[103,2487,2377],{"class":1326},[103,2489,2491,2493,2495],{"class":105,"line":2490},20,[103,2492,2389],{"class":2358},[103,2494,2362],{"class":1326},[103,2496,2497],{"class":112},"postgres:15-alpine\n",[103,2499,2501,2503],{"class":105,"line":2500},21,[103,2502,2452],{"class":2358},[103,2504,2377],{"class":1326},[103,2506,2508,2511,2513],{"class":105,"line":2507},22,[103,2509,2510],{"class":2358},"      POSTGRES_USER",[103,2512,2362],{"class":1326},[103,2514,2515],{"class":112},"user\n",[103,2517,2519,2522,2524],{"class":105,"line":2518},23,[103,2520,2521],{"class":2358},"      POSTGRES_PASSWORD",[103,2523,2362],{"class":1326},[103,2525,2526],{"class":112},"password\n",[103,2528,2530,2533,2535],{"class":105,"line":2529},24,[103,2531,2532],{"class":2358},"      POSTGRES_DB",[103,2534,2362],{"class":1326},[103,2536,2537],{"class":112},"testdb\n",[103,2539,2541,2544],{"class":105,"line":2540},25,[103,2542,2543],{"class":2358},"    volumes",[103,2545,2377],{"class":1326},[103,2547,2549,2551],{"class":105,"line":2548},26,[103,2550,2430],{"class":1326},[103,2552,2553],{"class":112},"postgres_data:/var/lib/postgresql/data\n",[103,2555,2557,2559],{"class":105,"line":2556},27,[103,2558,2466],{"class":2358},[103,2560,2377],{"class":1326},[103,2562,2564,2566],{"class":105,"line":2563},28,[103,2565,2430],{"class":1326},[103,2567,2475],{"class":112},[103,2569,2571,2574],{"class":105,"line":2570},29,[103,2572,2573],{"class":2358},"    healthcheck",[103,2575,2377],{"class":1326},[103,2577,2579,2582,2584,2587,2589,2592],{"class":105,"line":2578},30,[103,2580,2581],{"class":2358},"      test",[103,2583,1987],{"class":1326},[103,2585,2586],{"class":112},"\"CMD-SHELL\"",[103,2588,321],{"class":1326},[103,2590,2591],{"class":112},"\"pg_isready -U user\"",[103,2593,1998],{"class":1326},[103,2595,2597,2600,2602],{"class":105,"line":2596},31,[103,2598,2599],{"class":2358},"      interval",[103,2601,2362],{"class":1326},[103,2603,2604],{"class":112},"10s\n",[103,2606,2608,2611,2613],{"class":105,"line":2607},32,[103,2609,2610],{"class":2358},"      timeout",[103,2612,2362],{"class":1326},[103,2614,2615],{"class":112},"5s\n",[103,2617,2619,2622,2624],{"class":105,"line":2618},33,[103,2620,2621],{"class":2358},"      retries",[103,2623,2362],{"class":1326},[103,2625,2626],{"class":191},"5\n",[103,2628,2630],{"class":105,"line":2629},34,[103,2631,1088],{"emptyLinePlaceholder":838},[103,2633,2635,2638],{"class":105,"line":2634},35,[103,2636,2637],{"class":2358},"volumes",[103,2639,2377],{"class":1326},[103,2641,2643,2646],{"class":105,"line":2642},36,[103,2644,2645],{"class":2358},"  postgres_data",[103,2647,2377],{"class":1326},[103,2649,2651],{"class":105,"line":2650},37,[103,2652,1088],{"emptyLinePlaceholder":838},[103,2654,2656,2659],{"class":105,"line":2655},38,[103,2657,2658],{"class":2358},"networks",[103,2660,2377],{"class":1326},[103,2662,2664,2667],{"class":105,"line":2663},39,[103,2665,2666],{"class":2358},"  app-network",[103,2668,2377],{"class":1326},[103,2670,2672,2675,2677],{"class":105,"line":2671},40,[103,2673,2674],{"class":2358},"    driver",[103,2676,2362],{"class":1326},[103,2678,2679],{"class":112},"bridge\n",[82,2681,2683],{"id":2682},"пояснения-к-файлу","Пояснения к файлу:",[491,2685,2686,2691,2780,2787],{},[35,2687,2688,2690],{},[39,2689,2359],{},": указывает версию схемы Compose (используйте 3.8 для совместимости)",[35,2692,2693,2695,2696],{},[39,2694,2374],{},": список контейнеров (сервисов)\n",[491,2697,2698,2747],{},[35,2699,2700,2377,2702],{},[39,2701,2327],{},[491,2703,2704,2710,2716,2722,2733,2739],{},[35,2705,2706,2709],{},[44,2707,2708],{},"image",": базовый образ Python",[35,2711,2712,2715],{},[44,2713,2714],{},"command",": запускает скрипт, который устанавливает Flask, создаёт простое приложение и запускает его",[35,2717,2718,2721],{},[44,2719,2720],{},"ports",": пробрасывает порт 5000 контейнера на порт 5000 хоста",[35,2723,2724,2727,2728,2730,2731],{},[44,2725,2726],{},"depends_on",": гарантирует, что ",[44,2729,2335],{}," запустится до ",[44,2732,2327],{},[35,2734,2735,2738],{},[44,2736,2737],{},"environment",": переменные окружения (используются в приложении)",[35,2740,2741,2743,2744],{},[44,2742,2658],{},": присоединяет сервис к пользовательской сети ",[44,2745,2746],{},"app-network",[35,2748,2749,2377,2751],{},[39,2750,2335],{},[491,2752,2753,2758,2763,2772],{},[35,2754,2755,2757],{},[44,2756,2708],{},": образ PostgreSQL 15",[35,2759,2760,2762],{},[44,2761,2737],{},": учётные данные БД",[35,2764,2765,2767,2768,2771],{},[44,2766,2637],{},": том ",[44,2769,2770],{},"postgres_data"," сохраняет данные БД на хосте (даже после удаления контейнера)",[35,2773,2774,2777,2778,2204],{},[44,2775,2776],{},"healthcheck",": проверка готовности PostgreSQL (важно для ",[44,2779,2726],{},[35,2781,2782,2784,2785],{},[39,2783,2637],{},": объявляет именованный том ",[44,2786,2770],{},[35,2788,2789,2791,2792,2794,2795,2204],{},[39,2790,2658],{},": создаёт сеть ",[44,2793,2746],{}," (по умолчанию driver ",[44,2796,320],{},[16,2798,2800],{"id":2799},"шаг-3-запустите-стек","Шаг 3: Запустите стек",[21,2802,2803,2804,2806],{},"В каталоге с ",[44,2805,2177],{}," выполните:",[94,2808,2810],{"className":96,"code":2809,"language":98,"meta":99,"style":99},"docker compose up -d\n",[44,2811,2812],{"__ignoreMap":99},[103,2813,2814,2816,2818,2821],{"class":105,"line":106},[103,2815,53],{"class":109},[103,2817,2234],{"class":112},[103,2819,2820],{"class":112}," up",[103,2822,2823],{"class":191}," -d\n",[21,2825,2826],{},"Что произойдёт:",[32,2828,2829,2832,2839,2850],{},[35,2830,2831],{},"Docker Compose прочитает конфигурацию",[35,2833,2834,2835,2838],{},"Создаст сеть ",[44,2836,2837],{},"myapp_app-network"," (префикс — имя каталога)",[35,2840,2841,2842,2845,2846,2849],{},"Загрузит образы ",[44,2843,2844],{},"python:3.11-slim"," и ",[44,2847,2848],{},"postgres:15-alpine"," (если их нет локально)",[35,2851,2852,2853,2204],{},"Запустит контейнеры в фоновом режиме (",[44,2854,2855],{},"-d",[1692,2857,2858],{},[21,2859,2860,2861,2864],{},"💡 ",[39,2862,2863],{},"Совет",": Первый запуск может занять минуту — Docker скачивает образы (около 500 МБ).",[16,2866,2868],{"id":2867},"шаг-4-проверьте-работу","Шаг 4: Проверьте работу",[32,2870,2871,2897,2931,2950],{},[35,2872,2873,174,2876,2890,2893,2894,58],{},[39,2874,2875],{},"Посмотрите статус контейнеров",[94,2877,2879],{"className":96,"code":2878,"language":98,"meta":99,"style":99},"docker compose ps\n",[44,2880,2881],{"__ignoreMap":99},[103,2882,2883,2885,2887],{"class":105,"line":106},[103,2884,53],{"class":109},[103,2886,2234],{"class":112},[103,2888,2889],{"class":112}," ps\n",[2891,2892],"br",{},"Вывод должен показать оба сервиса в состоянии ",[44,2895,2896],{},"Up",[35,2898,2899,2902,2903],{},[39,2900,2901],{},"Проверьте логи"," (если что-то не работает):",[94,2904,2906],{"className":96,"code":2905,"language":98,"meta":99,"style":99},"docker compose logs web\ndocker compose logs db\n",[44,2907,2908,2920],{"__ignoreMap":99},[103,2909,2910,2912,2914,2917],{"class":105,"line":106},[103,2911,53],{"class":109},[103,2913,2234],{"class":112},[103,2915,2916],{"class":112}," logs",[103,2918,2919],{"class":112}," web\n",[103,2921,2922,2924,2926,2928],{"class":105,"line":777},[103,2923,53],{"class":109},[103,2925,2234],{"class":112},[103,2927,2916],{"class":112},[103,2929,2930],{"class":112}," db\n",[35,2932,2933,2936,2937,2940,2941,2947,2949],{},[39,2934,2935],{},"Тестируйте приложение",":\nОткройте браузер и перейдите по адресу ",[44,2938,2939],{},"http://localhost:5000",". Должны увидеть:",[94,2942,2945],{"className":2943,"code":2944,"language":125},[123],"Hello from Docker Compose! DB connection: OK\n",[44,2946,2944],{"__ignoreMap":99},[2891,2948],{},"Это значит, что веб-контейнер успешно подключился к PostgreSQL.",[35,2951,2952,174,2955],{},[39,2953,2954],{},"Проверьте сеть",[94,2956,2958],{"className":96,"code":2957,"language":98,"meta":99,"style":99},"docker network ls | grep app-network\ndocker network inspect myapp_app-network\n",[44,2959,2960,2976],{"__ignoreMap":99},[103,2961,2962,2964,2966,2968,2970,2973],{"class":105,"line":106},[103,2963,53],{"class":109},[103,2965,340],{"class":112},[103,2967,392],{"class":112},[103,2969,399],{"class":398},[103,2971,2972],{"class":109}," grep",[103,2974,2975],{"class":112}," app-network\n",[103,2977,2978,2980,2982,2984],{"class":105,"line":777},[103,2979,53],{"class":109},[103,2981,340],{"class":112},[103,2983,410],{"class":112},[103,2985,2986],{"class":112}," myapp_app-network\n",[456,2988],{},[16,2990,2992],{"id":2991},"шаг-5-управление-стеком","Шаг 5: Управление стеком",[21,2994,2995],{},"Основные команды:",[2997,2998,2999,3012],"table",{},[3000,3001,3002],"thead",{},[3003,3004,3005,3009],"tr",{},[3006,3007,3008],"th",{},"Команда",[3006,3010,3011],{},"Действие",[3013,3014,3015,3026,3036,3046,3058,3068,3078],"tbody",{},[3003,3016,3017,3023],{},[3018,3019,3020],"td",{},[44,3021,3022],{},"docker compose down",[3018,3024,3025],{},"Останавливает и удаляет контейнеры, сети (тома остаются)",[3003,3027,3028,3033],{},[3018,3029,3030],{},[44,3031,3032],{},"docker compose down -v",[3018,3034,3035],{},"Удаляет также тома (данные БД будут потеряны!)",[3003,3037,3038,3043],{},[3018,3039,3040],{},[44,3041,3042],{},"docker compose logs -f",[3018,3044,3045],{},"Отслеживает логи в реальном времени",[3003,3047,3048,3053],{},[3018,3049,3050],{},[44,3051,3052],{},"docker compose exec web bash",[3018,3054,3055,3056],{},"Заходит в контейнер ",[44,3057,2327],{},[3003,3059,3060,3065],{},[3018,3061,3062],{},[44,3063,3064],{},"docker compose stop",[3018,3066,3067],{},"Останавливает контейнеры (без удаления)",[3003,3069,3070,3075],{},[3018,3071,3072],{},[44,3073,3074],{},"docker compose start",[3018,3076,3077],{},"Запускает остановленные контейнеры",[3003,3079,3080,3085],{},[3018,3081,3082],{},[44,3083,3084],{},"docker compose rm",[3018,3086,3087],{},"Удаляет остановленные контейнеры",[21,3089,3090],{},"Пример перезапуска только одного сервиса:",[94,3092,3094],{"className":96,"code":3093,"language":98,"meta":99,"style":99},"docker compose restart web\n",[44,3095,3096],{"__ignoreMap":99},[103,3097,3098,3100,3102,3105],{"class":105,"line":106},[103,3099,53],{"class":109},[103,3101,2234],{"class":112},[103,3103,3104],{"class":112}," restart",[103,3106,2919],{"class":112},[16,3108,3110],{"id":3109},"шаг-6-модификация-и-пересборка","Шаг 6: Модификация и пересборка",[21,3112,3113,3114,3116,3117,3119],{},"Если вы изменили ",[44,3115,2177],{}," или нужно пересобрать образ (например, добавили ",[44,3118,2049],{},"), используйте:",[94,3121,3123],{"className":96,"code":3122,"language":98,"meta":99,"style":99},"docker compose up -d --build\n",[44,3124,3125],{"__ignoreMap":99},[103,3126,3127,3129,3131,3133,3135],{"class":105,"line":106},[103,3128,53],{"class":109},[103,3130,2234],{"class":112},[103,3132,2820],{"class":112},[103,3134,1214],{"class":191},[103,3136,3137],{"class":191}," --build\n",[21,3139,3140],{},"Для принудительной перезагрузки контейнеров без сборки:",[94,3142,3144],{"className":96,"code":3143,"language":98,"meta":99,"style":99},"docker compose up -d --force-recreate\n",[44,3145,3146],{"__ignoreMap":99},[103,3147,3148,3150,3152,3154,3156],{"class":105,"line":106},[103,3149,53],{"class":109},[103,3151,2234],{"class":112},[103,3153,2820],{"class":112},[103,3155,1214],{"class":191},[103,3157,3158],{"class":191}," --force-recreate\n",[16,3160,594],{"id":593},[21,3162,3163,3164,174],{},"✅ ",[39,3165,3166],{},"Критерии успеха",[491,3168,3169,3178,3184],{},[35,3170,3171,3172,3175,3176,2204],{},"Контейнеры запущены (",[44,3173,3174],{},"docker compose ps"," показывает ",[44,3177,2896],{},[35,3179,3180,3181,3183],{},"Веб-приложение отвечает на ",[44,3182,2939],{}," и сообщает об успешном подключении к БД",[35,3185,3186,3187,3189,3190,2204],{},"Данные PostgreSQL сохраняются в томе ",[44,3188,2770],{}," (проверьте ",[44,3191,727],{},[21,3193,3194],{},"Если что-то не работает:",[32,3196,3197,3203,3206],{},[35,3198,3199,3200],{},"Проверьте логи: ",[44,3201,3202],{},"docker compose logs",[35,3204,3205],{},"Убедитесь, что порт 5000 не занят другим приложением",[35,3207,3208,3209],{},"Проверьте, что оба сервиса в одной сети: ",[44,3210,3211],{},"docker network inspect myapp_app-network",[16,3213,635],{"id":634},[82,3215,1909,3217],{"id":3216},"ошибка-error-response-from-daemon-port-is-already-allocated",[44,3218,3219],{},"Error response from daemon: port is already allocated",[21,3221,3222,3225,3226,174],{},[39,3223,3224],{},"Причина",": Порт 5000 уже используется другим процессом.\n",[39,3227,3228],{},"Решение",[491,3230,3231,3240],{},[35,3232,3233,3234,2845,3237,2204],{},"Остановите конфликтующий процесс (",[44,3235,3236],{},"sudo lsof -i:5000",[44,3238,3239],{},"kill",[35,3241,3242,3243,3245,3246,2204],{},"Или измените проброс портов в ",[44,3244,2177],{}," (например, ",[44,3247,3248],{},"\"8080:5000\"",[82,3250,1909,3252],{"id":3251},"ошибка-postgres-connection-to-server-at-db-1722002-port-5432-failed-connection-refused",[44,3253,3254],{},"postgres: connection to server at \"db\" (172.20.0.2), port 5432 failed: Connection refused",[21,3256,3257,3259,3260,174],{},[39,3258,3224],{},": Веб-контейнер пытается подключиться к БД до её полной готовности.\n",[39,3261,3228],{},[491,3263,3264,3273,3285],{},[35,3265,3266,3267,3269,3270,3272],{},"Убедитесь, что в ",[44,3268,2335],{}," есть ",[44,3271,2776],{}," (как в примере)",[35,3274,3275,3276,3278,3279,145,3282,2204],{},"Добавьте в команду ",[44,3277,2327],{}," ожидание (например, через ",[44,3280,3281],{},"wait-for-it.sh",[44,3283,3284],{},"dockerize",[35,3286,3287,3288,3290,3291],{},"Или увеличьте ",[44,3289,2726],{}," с условием ",[44,3292,3293],{},"condition: service_healthy",[82,3295,1909,3297],{"id":3296},"ошибка-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket",[44,3298,3299],{},"permission denied while trying to connect to the Docker daemon socket",[21,3301,3302,3304,3305,3307,3308,174],{},[39,3303,3224],{},": Текущий пользователь не в группе ",[44,3306,53],{},".\n",[39,3309,3228],{},[94,3311,3313],{"className":96,"code":3312,"language":98,"meta":99,"style":99},"sudo usermod -aG docker $USER\nnewgrp docker\n",[44,3314,3315,3327],{"__ignoreMap":99},[103,3316,3317,3319,3321,3323,3325],{"class":105,"line":106},[103,3318,57],{"class":109},[103,3320,1630],{"class":112},[103,3322,1633],{"class":191},[103,3324,405],{"class":112},[103,3326,1638],{"class":1326},[103,3328,3329,3331],{"class":105,"line":777},[103,3330,1834],{"class":109},[103,3332,1585],{"class":112},[21,3334,3335,3336,3338],{},"Или используйте ",[44,3337,57],{}," для команд Docker.",[82,3340,3342,3343,3345],{"id":3341},"том-postgres_data-не-создаётся","Том ",[44,3344,2770],{}," не создаётся",[21,3347,3348,3350,3351,3353,3354,174],{},[39,3349,3224],{},": Ошибка в синтаксисе ",[44,3352,2637],{}," или недостаточно прав.\n",[39,3355,3228],{},[491,3357,3358,3361,3370],{},[35,3359,3360],{},"Проверьте отступы в YAML (пробелы, не табы)",[35,3362,3266,3363,3365,3366,3369],{},[44,3364,2335],{}," путь тома ",[44,3367,3368],{},"/var/lib/postgresql/data"," существует в образе PostgreSQL",[35,3371,3372,3373,3375,3376],{},"Посмотрите ",[44,3374,727],{}," — том должен называться ",[44,3377,3378],{},"[каталог]_postgres_data",[82,3380,3382],{"id":3381},"образы-не-скачиваются-ошибки-сети","Образы не скачиваются (ошибки сети)",[21,3384,3385,3387,3388,174],{},[39,3386,3224],{},": Проблемы с доступом к Docker Hub.\n",[39,3389,3228],{},[491,3391,3392,3397,3404],{},[35,3393,3394,3395,2204],{},"Настройте DNS в Docker (",[44,3396,1967],{},[35,3398,3399,3400,3403],{},"Используйте зеркало (например, ",[44,3401,3402],{},"registry-mirrors"," для Kubernetes/OpenShift)",[35,3405,3406,3407],{},"Или загрузите образы вручную: ",[44,3408,3409],{},"docker pull python:3.11-slim",[773,3411,3412],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":99,"searchDepth":777,"depth":777,"links":3414},[3415,3416,3417,3418,3421,3422,3423,3424,3425,3426],{"id":18,"depth":777,"text":19},{"id":26,"depth":777,"text":27},{"id":2285,"depth":777,"text":2286},{"id":2339,"depth":777,"text":2340,"children":3419},[3420],{"id":2682,"depth":784,"text":2683},{"id":2799,"depth":777,"text":2800},{"id":2867,"depth":777,"text":2868},{"id":2991,"depth":777,"text":2992},{"id":3109,"depth":777,"text":3110},{"id":593,"depth":777,"text":594},{"id":634,"depth":777,"text":635,"children":3427},[3428,3430,3432,3434,3436],{"id":3216,"depth":784,"text":3429},"Ошибка: Error response from daemon: port is already allocated",{"id":3251,"depth":784,"text":3431},"Ошибка: postgres: connection to server at \"db\" (172.20.0.2), port 5432 failed: Connection refused",{"id":3296,"depth":784,"text":3433},"Ошибка: permission denied while trying to connect to the Docker daemon socket",{"id":3341,"depth":784,"text":3435},"Том postgres_data не создаётся",{"id":3381,"depth":784,"text":3382},"2026-02-17 15:01:14","Полное руководство по Docker Compose на Linux. Узнайте, как с помощью одного файла поднять многоконтейнерное приложение с базой данных. Пошагово, с примерами.","15-20 мин",[3441,3444,3447,3450],{"question":3442,"answer":3443},"Что такое Docker Compose и зачем он нужен?","Docker Compose — это инструмент для определения и запуска многоконтейнерных Docker-приложений. С помощью одного файла `docker-compose.yml` вы описываете сервисы, сети и тома, а затем управляете всем стеком одной командой.",{"question":3445,"answer":3446},"Как установить Docker Compose на Linux?","Для современных дистрибутивов Docker Compose поставляется как плагин Docker CLI (`docker compose`). Установите пакет `docker-compose-plugin` через менеджер пакетов (apt, yum) или скачайте бинарник с GitHub.",{"question":3448,"answer":3449},"В чём разница между `docker-compose` и `docker compose`?","`docker compose` — это встроенный плагин Docker CLI (рекомендуемый способ с Docker Compose v2). `docker-compose` — отдельный бинарный файл (устаревший v1). Команды практически идентичны.",{"question":3451,"answer":3452},"Как запустить docker-compose в фоновом режиме?","Используйте флаг `-d` (detached): `docker compose up -d`. Для остановки: `docker compose down`.",[3454,3457,3460,3463,3466,3469],{"name":3455,"text":3456},"Установите Docker Compose (если не установлен)","Убедитесь, что у вас установлен Docker Engine и плагин Compose. Проверьте командой `docker compose version`. Если нет — установите пакет `docker-compose-plugin`.",{"name":3458,"text":3459},"Создайте каталог проекта и файл docker-compose.yml","Создайте отдельную папку для проекта. Внутри создайте файл `docker-compose.yml` с определением сервисов. Пример ниже включает веб-приложение (Python Flask) и базу данных PostgreSQL.",{"name":3461,"text":3462},"Настройте сервисы в docker-compose.yml","Опишите каждый сервис: образ, порты, переменные окружения, зависимости и тома. Для базы данных задайте volume для сохранения данных между перезапусками.",{"name":3464,"text":3465},"Запустите стек командой docker compose up","В каталоге с `docker-compose.yml` выполните `docker compose up -d`. Docker загрузит образы, создаст сеть и запустит контейнеры. Флаг `-d` запускает в фоне.",{"name":3467,"text":3468},"Проверьте статус контейнеров","Выполните `docker compose ps` для просмотра состояния сервисов. Также можно использовать `docker compose logs` для просмотра логов.",{"name":3470,"text":3471},"Остановите и удалите контейнеры","Когда работа завершена, выполните `docker compose down`. Для удаления также томов (данные базы) добавьте флаг `-v`.","PT20M",[3474,3475,3476,3477,3478,3479,3480,3481,3482,3483],"docker-compose основы","как использовать docker-compose linux","docker-compose пример.yml","запуск многоконтейнерного приложения docker","docker-compose up команда","файл docker-compose.yml структура","docker-compose для начинающих","оркестрация контейнеров docker","docker compose сервисы","docker-compose volumes сети",{},[842,3486,3487],"/guides/linux/docker-volumes","/errors/linux/docker-compose-command-not-found",{"title":2157,"description":3438},"guides/linux/docker-compose-basics","Это руководство познакомит вас с Docker Compose — инструментом для оркестрации контейнеров. Вы создадите файл docker-compose.yml и запустите стек из веб-сервиса и PostgreSQL. Подходит для начинающих разработчиков и админов Linux.",[53,3492,3493,851,840,3494],"docker-compose","контейнеризация","multicontainer","33EXhExfWVN_ZYS36r7_wvaVlC2ux1mJm7yZx_Qv8d4"]