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