PHP Academy · Oppitunti

PHP-sovelluksen kontittaminen Dockerilla

Rakentakaa Docker-levykuva PHP:lle ja Nginxille sekä orkestroikaa se Docker Composella.

Oppitunti 4/413 vaihetta

PHP-sovelluksen kontittaminen Dockerilla on ilmainen PHP Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu PHP Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. PHP Academy-kurssilla on yhteensä 4 oppituntia.

Miksi Dockeria käytetään PHP:ssä?

Docker pakkaa sovelluksen riippuvuuksineen siirrettäväksi säilökuvaksi. Sama kuva toimii samalla tavalla kehityksessä, CI:ssä ja tuotannossa, mikä poistaa ”toimii minun koneellani” -ongelmat.

PHP:n Dockerfilen perusteet

PHP + Nginx -sovelluksen minimaalinen Dockerfile.

# Dockerfile
FROM php:8.3-fpm-alpine

# Install extensions
RUN docker-php-ext-install pdo pdo_mysql opcache

# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader

COPY . .

RUN chown -R www-data:www-data /app/storage /app/bootstrap/cache

Monivaiheinen koonti

Käyttäkää monivaiheisia koonteja lopullisen kuvan pitämiseksi pienenä: asentakaa koontityökalut yhteen vaiheeseen ja kopioikaa lopulliseen kuvaan vain tuotokset.

# Stage 1: builder
FROM composer:2 AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader

# Stage 2: runtime
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY --from=builder /app/vendor ./vendor
COPY . .

docker-compose.yml

Orkestroikaa useita palveluita (PHP-FPM, Nginx, MySQL, Redis) Docker Composella.

# docker-compose.yml
services:
  app:
    build: .
    volumes:
      - .:/app
  nginx:
    image: nginx:alpine
    ports: ["80:80"]
    volumes:
      - .:/app
      - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
  mysql:
    image: mysql:8
    environment:
      MYSQL_DATABASE: myapp
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql
  redis:
    image: redis:alpine
volumes:
  db_data:

Nginx-säilön määritys

Liittäkää mukautettu Nginx-määritys PHP-FPM-pyyntöjen välittämistä varten.

# docker/nginx.conf
server {
    listen 80;
    root /app/public;
    index index.php;
    location / { try_files $uri /index.php?$query_string; }
    location ~ \.php$ {
        fastcgi_pass app:9000;  # service name from docker-compose
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Ympäristömuuttujat

Välittäkää ympäristömuuttujat säilöille – älkää koskaan upottako salaisuuksia kuviin.

# docker-compose.yml:
services:
  app:
    env_file: .env
    # or explicit:
    environment:
      - APP_ENV=production
      - DB_HOST=mysql

Laravel Artisan -komennot

Suorittakaa Artisan-komennot säilön sisällä.

$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:work

Kuntotarkistukset

Lisätkää kuntotarkistukset, jotta orkestroijat (Kubernetes, ECS) tietävät, milloin säilö on valmis.

# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
  CMD curl -f http://localhost/health || exit 1

Kuvien koonti ja julkaiseminen

Koontakaa kuva ja julkaiskaa se rekisteriin (Docker Hub, ECR, GHCR).

$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0

Kubernetes-käyttöönotto

Määrittäkää Kubernetesissa Deployment- ja Service-resurssit käyttämällä omaa kuvaanne. Julkaiskaa uudet versiot komennolla kubectl set image tai päivittämällä YAML-tiedosto ja ottamalla se käyttöön.

Tuotantoympäristön suojaaminen

Dockerin tuotantokäytännöt: käyttäkää ei-root-käyttäjää, vain luku -tilassa olevaa juuritiedostojärjestelmää ja minimaalista peruskuvaa (Alpine), älkää sisällyttäkö kehitysriippuvuuksia, kiinnittäkää kuvien tunnisteet ja etsikää CVE-haavoittuvuuksia komennolla docker scout.

Yhteenveto

Luokaa Dockerfile PHP-FPM:ää ja Composeria varten. Käyttäkää docker-composea paikalliseen kehitykseen Nginx-, MySQL- ja Redis-palveluilla. Käyttäkää tuotannossa monivaiheisia koonteja, syöttäkää ympäristömuuttujat ja suorittakaa sovellus Kubernetesin tai ECS:n kautta.

Pikatarkistus

Mikä on monivaiheisten Docker-koontien tärkein hyöty?

Aloita maksutta

Opi PHP tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
49
Oppitunnit
195

Usein kysytyt kysymykset

Onko oppitunti ”PHP-sovelluksen kontittaminen Dockerilla” ilmainen?

Kyllä – oppitunnin ”PHP-sovelluksen kontittaminen Dockerilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko PHP Academy-kurssin, päivitä CoddyKit PROhon. PHP Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”PHP-sovelluksen kontittaminen Dockerilla”?

Rakentakaa Docker-levykuva PHP:lle ja Nginxille sekä orkestroikaa se Docker Composella. Harjoittelet PHP Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni PHP Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin PHP Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”PHP-sovelluksen kontittaminen Dockerilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä PHP Academy-oppitunnilla?

Kyllä. Jokainen PHP Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Nginx- ja PHP-FPM-määritykset
  2. Ympäristömuuttujat ja .env-tiedostot
  3. Julkaiseminen GitHub Actionsilla
  4. PHP-sovelluksen kontittaminen Dockerilla
← Takaisin: PHP Academy