PHP@Docker - w produkcji

download PHP@Docker - w produkcji

If you can't read please download the document

Transcript of PHP@Docker - w produkcji

PHP@Doker - w produkcji

PHPers #1Rzeszw 27.01.2016

Marcin Kurzyna

W brany od 14 latWirtualna Polska S.A

NextWebMedia

GaduGadu

Freelance!

OpenSourceDocker, PHP etc

PLD Linux

HashIDs

https://keybase.io/mquhttps://www.linkedin.com/in/mkurzyna

Na pocztku by chroot

Docker Nihil novi1982: chroot

2000: Virtuozzo

2001: Linux-Vserver

2005: OpenVZ

2008: LXC

2013: Docker

...

https://en.wikipedia.org/wiki/Operating-system-level_virtualization

Configure once run everywhere

Sheeple.

Dev, stage, prod

Adresy usug

Wiele kontenerw lokalnych

Wiele hostow

Rne hostynp. DB: single node vs master+slaves

docker run \--name dba.2501

docker run \--name php.2501 \--link dba.2501:db-master \--link dba.2501:db-slave ...

Lokalnie udajemy produkcj...

docker run \--name php.2501 \ --add-host db-master:10.0.0.2 \--add-host db-slave:10.0.0.3 ...

...na produkcji udajemy linkowanie lokalne.

Adresy usug pt 2

...ale, ale ja mam wicej ni jeden projekt?!

docker run --name 2501.project.local -p 80:80 ...

docker run --name skynet.project.local -p 80:80 Bind for 0.0.0.0:80 failed: port is already allocated

docker run --name 2501.project.local -p 80:80 ...

...ups.

docker run --name 2501.project.local -p 127.0.0.1:80:80 docker run --name skynet.project.local -p 127.0.0.2:80:80

Suchamy tylko lokalnie,

Nie ma konfliktu adresw,

...ale: Linux only.

Nazwy hostw

2501.project.local

project.stage.example.com

project.com

server {server_name ~(^|\.)project\.(local|(stage\.example\.)?com)$}

Nginx na ratunek.

$HTTP[host] =~ ~(^|\.)project\.(local|(stage\.example\.)?com)$ {...}

Lighttpd te moe.

...albo po prostu wiele vhostw.

Uprawnienia

Kontenery nie s prywatneRepozytoria (doker hub itp.)

Devs nie musz / nie powinni posiadahase produkcyjnych

Rozwizania?Autoryzacja w oparciu o hosty?Co ze zmiennym IP kontenerw?

Hasa w zmiennych rodowiskowych?

Volumeny

/var/lib/docker

Przechowuje obrazycignite z repozytoriw

Zbudowane

Czciowe (cache)

Przechowuje volumeny

Przechowuje metadane

Co to oznacza?

/var/lib/docker

# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Brak dziaajcych kontenetw...

/var/lib/docker

# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

Brak zachowanych obrazw...

/var/lib/docker

# du -sh /var/lib/docker1,3G/var/lib/docker

...ups.

Po losowym czasie mamy 100% dysku.

VOLUME /data

Volumeny nie s kasowane...

To dobrze!

Ale trzeba rcznie sprzta

...bo 100% w /var nie suy produkcji.

VOLUME /data

FROM php:latestMAINTAINER Marcin Kurzyna

RUN curl -sS https://getcomposer.org/installer | \ php -- --install-dir=bin --filename=composer

VOLUME /dataWORKDIR /data

CMD ["php", "-S", "0.0.0.0:80", "-t", "/data"]

FROM s16.base

ADD . /dataRUN composer install

VOLUME /data

[root@localhost ~]# docker run --rm -it -p 80:80 "s16.app"PHP 7.0.2 Development Server started at Wed Jan 27 14:09:21 2016Listening on http://0.0.0.0:80Document root is /dataPress Ctrl-C to quit.

[Wed Jan 27 14:09:47 2016] 172.17.0.1:53556 [200]: /index.php - require_once(): Failed opening required '/data/vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /data/index.php on line 3