Docker инженерлік әзірлеу ортасы ретінде
Артқа
Бастапқы Тегін

Docker инженерлік әзірлеу ортасы ретінде

PHP-әзірлеушіге арналған практикалық Docker курсы: тек контейнерлерді іске қосу емес, орта моделін түсіну, қайта өндірілетін стек жинау, IDE-ні қосу, мәселелерді диагностикалау және локалды инфрақұрылымды инженерлік жүйенің бөлігі ретінде сүйемелдеу. Курс мысалдары Docker Engine 29.1.3 нұсқасында валидтеледі.

Docker Containerization Docker Compose Local Infrastructure Environment Reproducibility

Курс құрылымы

Жарияланған нұсқа: модульдер, сабақтар және ұзақтығы.

Docker архитектурасы және базалық модель

  1. Docker орнату және runtime архитектурасы
    45 мин
  2. Image, Container және процесс моделі
    35 мин
  3. Docker-дің базалық operational vocabulary-сі
    30 мин

Dockerfile және ортаны басқару

  1. Dockerfile инфрақұрылым декларациясы ретінде
    40 мин
  2. Multi-stage build және build/runtime бөлінуі
    35 мин
  3. ARG, ENV және конфигурация шекаралары
    35 мин

Docker Compose, сервис топологиясы және жоба runtime-ы

  1. Docker Compose жоба картасы ретінде

    Сабақтан кейін студент `app`, `postgres`, `redis` сервистерін бір Compose-стекте қалай сипаттау керегін, service name мен `container_name` айырмасын, environment неге анық жазылуы тиіс екенін және `docker compose config` арқылы локалдық ортаның қорытынды пішінін қалай тексеруге болатынын түсінеді.

    40 мин
  2. Іске қосу тәуелділіктері, healthcheck және restart саясаттары

    Сабақтан кейін студент `depends_on` өздігінен readiness-ті неге кепілдемейтінін, healthcheck сервисті қалай сенімдірек тәуелділікке айналдыратынын, restart-саясатын неге саналы таңдау керегін және init/one-shot сервистерге «барлық контейнерлер мәңгі жүруі тиіс» деген жалған модельсіз қалай қарау керегін түсінеді.

    45 мин
  3. Желілер, DNS және published ports

    Сабақтан кейін студент стекті ішкі және сыртқы желілерге қалай бөлу керегін, неге `postgres` пен `redis` көбіне published ports алмауы тиіс екенін, қосымшаның тәуелділіктерін DNS service name арқылы қалай табатынын және артық порт жариялаудың неге шу мен тәуекелді арттыратынын түсінеді.

    40 мин
  4. Volumes, bind mounts және деректер стратегиясы

    Сабақтан кейін студент named volume мен bind mount айырмасын, жоба коды қайда тұруы керек екенін, база қайда сақталуы тиіс екенін, кейде read-only mount не үшін керегін және mount стратегиясының қателігі өнімділік пен орта қайта жасалуын қалай бұзатынын түсінеді.

    40 мин
  5. Linux-контейнерлердегі UID, GID және рұқсаттар

    Сабақтан кейін студент `UID/GID` не екенін, контейнер неге хостта "бөтен" файлдар жасай алатынын, `user`, build args немесе env арқылы контейнер пайдаланушысын қалай сәйкестендіруге болатынын және `777` арқылы шешу неге шешім емес, қауіпсіздік моделінің деградациясы екенін түсінеді.

    40 мин

Traefik, локалды домендер және бірыңғай edge

Локалды стек үшін саналы сыртқы шекара: бір edge, localho.st домендері, Traefik және түсінікті локалды HTTPS.

  1. Бірыңғай edge және *.localho.st паттерні

    Мақсат: Студентке локалды ортада бір сыртқы кіру нүктесі неге керек екенін және домендер өнім құрылымын published ports жиынтығынан жақсырақ білдіретінін көрсету. Нәтиже: Сабақтан кейін студент `app:8080`, `api:8081` және `admin:8082` үлгісінің әлсіз сыртқы модель екенін, неге бірыңғай edge керек екенін және бірнеше web entrypoint бар локалды әзірлеуде `*.localho.st` аймағы неге ыңғайлы екенін түсінеді.

    35 мин
  2. Compose ішіндегі Traefik: provider, labels және routing

    Мақсат: Студентті `Compose` ішіндегі негізгі Traefik-конфигурациясын оқып, жаза алуға үйрету: Docker provider, entrypoints, routers, services, labels және желіні таңдау. Нәтиже: Сабақтан кейін студент `Traefik` сервистерді Docker provider арқылы қалай табатынын, неге `exposedByDefault=false` қауіпсіздеу екенін, labels-тің маршруттауға қалай айналатынын және кейде `traefik.docker.network` неге керек болатынын түсінеді.

    45 мин
  3. Локалды TLS және домендік маршруттауды диагностикалау

    Мақсат: Студентке `Traefik` арқылы локалды ортадағы `HTTPS`-тің жұмыс моделін беру: `websecure`, сертификаттар, `web`-тен `websecure`-ке redirect және бұзылған домендік маршруттауды базалық диагностика. Нәтиже: Сабақтан кейін студент локалды `HTTPS` қайта өндіріле алатын ортаның бөлігі екенін түсінеді, Traefik-ке self-signed сертификаттарды қоса алады, доменді `curl` арқылы тексеруді біледі және DNS, router rule мен TLS мәселелерін шатастырмайды.

    45 мин

Ортаны диагностикалау және тұрақтылығы

Локалды Docker-ортаның логтары, readiness, restart-политикалары, ресурс лимиттері және қауіпсіз күтілуі.

  1. Логтар, docker exec және құлауға алғашқы жауап

    Мақсат: Контейнер құлағанда студентті абыржымай әрекет етуге үйрету: алдымен логтарды көру, сосын процесс күйін тексеру, тек содан кейін ғана контейнер ішіне кіру. Нәтиже: Сабақтан кейін студент логтар мен интерактивті қолжетімділік айырмасын түсінеді, кез келген мәселенің бірінші жауабы ретінде `docker exec` қолданбайды және контейнер бойынша қысқа диагностикалық есеп жасай алады.

    35 мин
  2. Healthchecks, readiness және restart-политикалар

    Мақсат: Студентті процесс старты, сервис дайындығы және автоматты restart деген үш түрлі ұғымды ажыратуға үйрету. Нәтиже: Сабақтан кейін студент `depends_on` дайындықты кепілдемейтінін, healthcheck күй сигналы үшін керегін, ал `restart` қате конфигурацияны түзетпейтінін түсінеді.

    40 мин
  3. Resource Limits және хостқа түсетін қысым

    Мақсат: Студентті локалды Docker-ортаны CPU мен хост жадысын тұтынатын жүйе ретінде көруге үйрету, яғни "бағасы жоқ абстрактілі құмсалғыш" ретінде емес. Нәтиже: Сабақтан кейін студент неге ресурсты көп жейтін контейнерлерді шектеу керегін, ресурс жетіспеуінің базалық белгілерін қалай оқуды және неге ноутбуктағы локалды ортаға да бюджет керек екенін түсінеді.

    35 мин
  4. Тазалау, build cache және ортаны қауіпсіз күту

    Мақсат: Студентті Docker-ортаны адресті әрі қауіпсіз тазалауға үйрету: image cleanup, build cache cleanup айырмасын және пайдалы деректерді өшіріп алу қаупін түсіну. Нәтиже: Сабақтан кейін студент `docker system prune -a` бірінші реакция болмауы керегін түсінеді, dangling images пен деректері бар volumes айырмасын түсіндіре алады және build cache-ті бөлек тазалауды біледі.

    35 мин

PhpStorm арқылы жұмыс

  1. PhpStorm-ды Docker-ге қосу

    Сабақтан кейін студент IDE неге Docker-ге қосылатынын, бұл қандай мәселелерді шешетінін және IDE мен контейнерлік ортаның айырмашылығы әзірлеудің болжамдылығын қалай бұзатынын түсінеді.

    30 мин
  2. Remote PHP Interpreter, Composer және тесттер

    Сабақтан кейін студент remote interpreter не үшін керегін, неге Composer мен тесттер сол арқылы жүруі тиіс екенін және интерпретатор сәйкессіздігі IDE нәтижелеріне сенімді қалай бұзатынын түсінеді.

    40 мин
  3. Xdebug, path mappings және тұрақты debug

    Сабақтан кейін студент Xdebug-тің "кеңейтімді қостым, өзі жүре береді" емес екенін, ол контейнер конфигурациясы, IDE-listener және дұрыс path mapping байланысы екенін түсінеді.

    40 мин

Локалдық ортаның инженерлік тәртібі

  1. Docker-жобалардың консистентті құрылымы

    Сабақтан кейін студент жобалардың бірдей құрылымы onboarding-ті қалай жылдамдататынын, хаосты қалай азайтатынын және ортаны бүкіл команда үшін қалай оқылатын ететінін түсінеді.

    35 мин
  2. Орта код ретінде және команданың қайта өндірілуі

    Сабақтан кейін студент орта код ретінде құжаттама, `.env.example`, onboarding-артефактілері және басқа әзірлеушілер үшін қайта өндірілетін workflow қажет ететінін түсінеді.

    40 мин