# Viralliset PHP Docker -kuvat: tagit, digestit ja uudelleenrakennus

> PHP Docker -kuvien tagit selitettyinä: versiotagit, variantit kuten fpm ja apache, digestit ja miten ennen käyttöä tarkistatte, sulkeeko kuva PHP2Shellin.

Lähde: https://phpsos.de/fi/blog/offizielle-php-docker-images/  
Tilanne: 25.10.2026  
Palveluntarjoaja: PHP SOS, PHP-hätäapu ja palvelimen tietoturva. Pikaapu WhatsAppilla: https://wa.me/491736494914?text=Hei%20PHP%20SOS%2C%20tarvitsemme%20apua%20PHP-palvelimemme%20kanssa.%20Yritys%3A%20%E2%80%A6%20Verkkosivusto%3A%20%E2%80%A6

**Lyhyesti:** Virallista PHP-kuvaa Docker Hubissa on tarjolla monina tageina, jotka yhdistävät version, variantin (esimerkiksi cli, fpm, apache) ja perusjärjestelmän. Tag on osoitin, joka siirtyy uudelleenrakennusten jälkeen uusiin tiloihin; vain digest yksilöi täsmälleen yhden tilan. PHP2Shelliä vastaan tarvitsette kuvan, jossa on PHP 8.5.12, 8.4.27, 8.3.36 tai 8.2.35, tarkistettuna komennolla `php -v`, sekä omien kuviennne uudelleenrakennuksen sen päälle.

## Miksi tagi yksin kertoo vähän

Monet tiimit kirjoittavat Dockerfileensa rivin kuten `FROM php:8.3-fpm` ja unohtavat sen. Se toimii niin kauan kuin kukaan ei kysy, mikä PHP-versio oikeastaan on käynnissä. PHP2Shellistä lähtien jokainen kysyy.

Vastaus ei ole Dockerfilessä. Tag kuten `8.3-fpm` osoittaa noutohetkellä kyseisen haaran uusimpaan tilaan. Jos kuva noudettiin ennen 21. lokakuuta eikä sitä ole sen jälkeen uusittu, siinä on haavoittuva versio, vaikka tag osoittaisi nykyään korjattuun tilaan. Docker Official Images -ohjeiden mukaan kuvat rakennetaan aktiivisesti uudelleen, myös tietoturvakorjausten yhteydessä. Se ei kuitenkaan vaikuta paikalliseen tilaanne.

Koko kulun uudelleenrakennuksesta uudelleen luotuun konttiin kuvaa [PHP:n korjaus Docker-konteissa](https://phpsos.de/fi/php2shell/docker-container-patchen/). Tässä käsitellään ennakkokysymystä: mikä kuva on oikea, ja miten sen tilan todistatte?

## PHP Docker -kuvan tagit: näin ne rakentuvat

Tagit koostuvat enintään kolmesta osasta. Docker Hub näyttää esimerkkejä kuten `php:8.2-cli`, `php:8.2-fpm-alpine` tai `php:8.4.27-zts-alpine3.24`.

| Osa | Esimerkki | Merkitys |
|---|---|---|
| Versiotieto | `8.4.27` tai `8.4` | täysi versio pysyy tässä tilassa, haaratieto siirtyy uusien korjausten mukana |
| Variantti | `cli`, `fpm`, `apache`, `zts` | PHP:n ajotapa kontissa |
| Perusjärjestelmä | `alpine3.24`, `bookworm`, `trixie` | taustalla oleva Alpine- tai Debian-versio |

Variantit eivät ole PHP2Shellin kannalta samanarvoisia. `fpm` ajaa PHP-FPM:ää, `apache` ajaa PHP:tä Apache-moduulina, siis mod_php:nä. Tämän ajotavan PHP-tiimi arvioi riskialtteimmaksi, koska siinä on esitetty hyökkäys, joka toimii jo ennen kuin sovelluskoodia ajetaan. Lisää sivulla [Miksi mod_php on erityisen haavoittuva](https://phpsos.de/fi/php2shell/mod-php-risiko/). Variantti `cli` on tarkoitettu komentorivitehtäviin.

Myös perusjärjestelmällä on seurauksia. Alpine-kuvat ovat pieniä, mutta käyttävät eri C-kirjastoa kuin Debian-kuvat; jotkin laajennukset tai esikäännetyt kirjastot toimivat siellä toisin. Älkää siksi vaihtako perusjärjestelmää sivutoimena tietoturvapäivityksen yhteydessä, vaan pysykää aluksi siinä, minkä sovelluksenne tuntee.

Ymmärtämisen kannalta tärkeää: virallisessa kuvassa PHP ei tule perusjakelun paketeista. Docker Hub kuvaa, että PHP:n lähdekoodi on kuvassa ja laajennukset rakennetaan apuskripteillä kuten `docker-php-ext-install`. Perusjärjestelmän pakettipäivitys omassa Dockerfilessänne ei siksi muuta PHP-versiota. Ratkaisevaa on yksin se, minkä virallisen kuvan tilan päälle rakennatte.

## Tag vai digest: mikä muuttuu ja milloin

Digest on kuvan sisällöstä laskettu tarkistussumma, kirjoitettuna `sha256:` ja pitkä merkkijono. Se muuttuu jokaisella uudelleenrakennuksella. Siksi se soveltuu todisteeksi: kun digest tiedetään, tiedetään täsmälleen, mikä tila on käynnissä.

Käytännössä toimii työnjako:

- **Dockerfilessä** käytetään haaratagia, esimerkiksi `php:8.4-fpm`, jotta uudelleenrakennus saa automaattisesti kyseisen haaran uusimman korjauksen.
- **Käyttöönotossa** käytetään valmiiksi rakennetun oman kuvan digestiä, jotta on yksiselitteistä, mitä toimitetaan.
- **Dokumentaatiossa** kirjataan molemmat: tag, digest ja komennolla `php -v` tarkistettu versio.

Jos sen sijaan lukitsette täyden versiotagin kuten `8.3.35-fpm`, ette saa koskaan automaattisesti korjausta. Se voi olla tarkoituksellista, mutta vaatii prosessin, joka nostaa tagia jokaisen tietoturvailmoituksen yhteydessä.

## PHP2Shell: kuvan tarkistus ennen käyttöä

Seuraavat komennot noutavat kuvan ja lukevat tietoja. Ne eivät muuta käynnissä olevia kontteja.

```bash
# Nouda haaratagin nykyinen tila
docker pull php:8.4-fpm

# Mikä PHP-versio kuvassa on?
docker run --rm php:8.4-fpm php -v

# Näytä noudetun kuvan digest
docker image inspect php:8.4-fpm --format '{{index .RepoDigests 0}}'

# Kysy digest ja alustat suoraan rekisteristä
docker buildx imagetools inspect php:8.4-fpm
```

Monialustakuvissa `imagetools`-kysely näyttää ylemmän tason digestin ja sen alla kullekin alustalle, esimerkiksi linux/amd64 tai linux/arm64, oman digestinsä. Dokumentoikaa digest, jonka palvelimenne todella noutavat, ja huomatkaa, että eri arkkitehtuurin kehittäjäkoneet saavat eri alustadigestin.

Jos `php -v` ei näytä vähintään haaran korjattua versiota, kuva on vanhentunut tai peräisin välimuistista. Tarkistakaa silloin, käyttääkö ympäristönne rekisteripeiliä, joka toimittaa vanhoja tiloja.

Versioille PHP 8.1 ja vanhemmat PHP-projekti ei enää julkaise virallisia julkaisuja. Näiden haarojen virallinen kuva ei siksi voi sisältää säännöllistä korjattua versiota. Tagit, joita ei enää huolleta, pysyvät Docker-ohjeiden mukaan noudettavissa, mutta niitä ei enää päivitetä.

> **Vinkki:**
> Kuvan mukana tulevat Docker Hubin mukaan `php.ini-development` ja `php.ini-production`, ja tuotantokäyttöön suositellaan jyrkästi tuotantoversiota. Omat asetukset tallennatte tiedostona hakemistoon `$PHP_INI_DIR/conf.d/`, myös php.netin väliaikaisarvot.

## Tyypillisiä virheitä kuvan valinnassa

- **Variantti tottumuksesta:** Valitaan apache-variantti, koska se käynnistyy helposti, vaikka fpm erillisellä verkkopalvelimella olisi mahdollinen.
- **Omia kuvia ei rakenneta uudelleen:** Peruskuva on ajan tasalla, siitä rakennettu sovelluskuva ei.
- **Monivaiheiset buildit huomaamatta:** Dockerfilessä, jossa on useita `FROM`-rivejä, muutetaan vain yhtä.
- **Sivukuvat unohdetaan:** Worker-, cron-kontit ja ylläpitotyökalut käyttävät omia tageja.
- **Luotetaan vain `latest`-tagiin:** Tag ei kerro mitään haarasta eikä variantista, ja se voi uuden pääversion tullessa hypätä yllättäen.

Miten uudelleenrakennukset automatisoidaan, jotta vanhentunut kuva ei ehdi pitkään olla käynnissä, kuvaa [CI/CD: PHP-kuvien automaattinen uudelleenrakennus](https://phpsos.de/fi/blog/php-images-in-ci-neu-bauen/). PHP:n perusteet konteissa selittää [PHP konteissa](https://phpsos.de/fi/php/php-in-containern/).

## Miten PHP SOS auttaa konkreettisesti?

- **Kannan tarkistus:** Luemme, mitä tageja, digestejä ja PHP-versioita kuvissanne ja käynnissä olevissa konteissanne on.
- **Variantin arviointi:** Tarkistamme, onko mod_php tarpeen vai vähentääkö fpm erillisellä verkkopalvelimella riskiä.
- **Uudelleenrakennus ja todistus:** [PHP-päivityspalvelun](https://phpsos.de/fi/leistungen/php-patch-service/) kautta rakennamme kuvat uudelleen korjatun pohjan päälle ja dokumentoimme tagin, digestin ja version.
- **Prosessin vakiinnuttaminen:** Rakennamme Dockerfilet ja käyttöönotot niin, että seuraava korjaus saapuu suunnitellusti.


## Usein kysytyt kysymykset

**Mitä eroa on tagilla ja digestillä?**  
Tag, kuten php:8.4-fpm, on nimi, joka voi jokaisen uudelleenrakennuksen jälkeen osoittaa uuteen tilaan. Digest on tarkistussumma, joka yksilöi täsmälleen yhden muuttumattoman tilan. Todisteiden ja toistettavien käyttöönottojen kannalta digest on luotettavampi tieto.

**Mikä tag sisältää PHP2Shell-korjauksen?**  
Korjattu on PHP 8.5.12, 8.4.27, 8.3.36 ja 8.2.35. Täydellä versionumerolla varustettu tag näyttää tilan suoraan. Lyhyemmillä tageilla, kuten 8.4-fpm, tarkistatte noutamisen jälkeen komennolla php -v, mikä versio kuvassa todella on.

**Onko PHP 8.1:lle olemassa korjattua virallista kuvaa?**  
PHP-projekti ei enää julkaise versioille 8.1 ja vanhemmille virallisia julkaisuja. Näiden haarojen virallinen kuva ei siksi voi sisältää säännöllistä korjattua versiota. Suunnitelkaa siirtymä tuettuun haaraan.

**Onko apache-variantti riskialttiimpi kuin fpm?**  
apache-variantti ajaa PHP:tä Apache-moduulina, siis mod_php:nä. Tämän ajotavan PHP-tiimi arvioi PHP2Shellin kohdalla riskialtteimmaksi. Molemmat variantit tarvitsevat päivityksen; mod_php:ssä kiire on erityisen suuri.

## Lähteet

- [Docker Hub: virallinen PHP-kuva](https://hub.docker.com/_/php)
- [Docker-dokumentaatio: docker buildx imagetools inspect](https://docs.docker.com/reference/cli/docker/buildx/imagetools/inspect/)
- [Docker Official Images: ohjeet ja ylläpito](https://github.com/docker-library/official-images)
- [php.net: tietoturvailmoitukset](https://www.php.net/)
