KAIP UŽDOMINUOTI DOKERĮ
/
Sailin' with Docker
2016.07.26
Gentleman's Guide

Pradžiamokslis
Kas tas yr?
What is it?
Kur jį dėt?
How we use it?
Kaip aną pažaboti?
How to use it?
Linux konteineriai?
an operating-system-level virtualization method for running multiple isolated Linux systems (containers) on a control host using a single Linux kernel.
Daug virtualkių ant vieno kernelio
DOCKER konteineriai?
Softas visom bajkom vienam konteinerį
Docker containers wrap a piece of software in a complete filesystem that contains everything needed to run: code, runtime, system tools, system libraries – anything that can be installed on a server.
DOCKER COMPOSE?
ĮraNKIS DOCKER'io PALEIDIMUI
Compose is a tool for defining and running multi-container Docker applications
DOCKER, Iš principo
PORTS: PORTAI ATVIRI PASAULIUI
EXPOSE: PORTAI, ATIDARYTI KITIEMS KONTEINERIAMS
VOLUMES: FOLDERIAI PRIEINAMI KONTEINERIUI
ENVIRONMENT: ENV KINTAMIEJI, DAŽNIAUSIAI CONFIGAMS
DOCKER, PORTAI
EXPOSE VS PORTS
PRIEINAMI TIK REIKALINGIAUSI
EXPOSE NAUDOJAMAS TIK DOCKERFILE'UOSE
JEI NENURODOMA, PARENKAMAS ATSITIKTINIS
DOCKER, Failų sistema
SUDARYTA IŠ SLUOKSNIŲ
SKIRTINGI DRIVERIAI: DEVICEMAPPER, AUFS, BRTFS, ETC...
VOLUMES - MOUNTAI IŠ HOSTO
VARTOTOJAI NEMAPINAMI
DOCKER, DOCKERFILES
https://github.com/DATA-DOG/dockerfiles
DOCKER-COMPOSE.YML
php:
image: datadoglt/php70
links: [mysql, redis]
volumes: [ ".:/var/www" ]
web:
image: datadoglt/nginx-sf
volumes: [".:/var/www"]
ports: ["80:80"]
links: ["php"]
environment: { VIRTUAL_HOST: symfony.dev,admin.symfony.dev }
redis:
image: redis
mysql:
image: mysql
hostname: mysql
ports: ["3306"]
environment:
MYSQL_DATABASE: symfony2
MYSQL_USER: symfony2
MYSQL_PASSWORD: symfony2
MYSQL_ROOT_PASSWORD: mysecretpwDOCKER-COMPOSE.YML
version: "2"
services:
php:
image: datadoglt/php70
volumes: ["./:/var/www"]
links: ["mysql", "redis"]
environment: { XDEBUG: "yes" }
web:
image: datadoglt/nginx-sf
ports: ["80:80"]
volumes: ["./:/var/www"]
links: ["php"]
environment: { VIRTUAL_HOST: "symfony2.dev,admin.symfony.dev" }
redis:
image: redis
mysql:
image: mysql:5.6
ports: ["3306"]
environment:
MYSQL_ROOT_PASSWORD: mysecretpw
MYSQL_DATABASE: symfony2
MYSQL_USER: symfony2
MYSQL_PASSWORD: secretpwinit.sh
#!/bin/bash
echo "[info] copy default parameters.yml"
cp -n /var/www/app/config/parameters.yml.dist /var/www/app/config/parameters.yml
sed -i "s/database_host:.*$/database_host: mysql/" /var/www/app/config/parameters.yml
sed -i "s/database_user:.*$/database_user: $MYSQL_ENV_MYSQL_USER/" /var/www/app/config/parameters.yml
sed -i "s/database_password:.*$/database_password: $MYSQL_ENV_MYSQL_PASSWORD/" /var/www/app/config/parameters.yml
sed -i "s/database_port:.*$/database_port: 3306/" /var/www/app/config/parameters.yml
sed -i "s/redis_host:.*$/redis_host: redis/" /var/www/app/config/parameters.yml
echo "[info] Running composer"
composer install --optimize-autoloader --working-dir=/var/www
echo "[info] Changing permissions for storage/"
chmod -R 777 /var/www/app/cache /var/www/app/logs /var/www/app/session
echo "[info] Waiting for mysql"
sleep 10
echo "[info] Migrating database"
php /var/www/app/console cache:clear
php /var/www/app/console doctrine:schema:update --force
chown -R www:www /var/wwwentrypoint
#!/bin/bash
if [ -f /init.sh ]; then
sleep 5 && echo "[info] Running /init.sh script" && sh /init.sh &
fi
if [ "$1" == "fpm" ]; then
if [ "$XDEBUG" != "" ]; then
PHP_ARGS="$PHP_ARGS -d xdebug.remote_enable=on"
if [ "$XDEBUG_HOST" == "" ]; then
XDEBUG_HOST="172.17.0.1"
fi
fi
if [ "$XDEBUG_HOST" != "" ]; then
PHP_ARGS="$PHP_ARGS -d xdebug.remote_host=$XDEBUG_HOST"
fi
echo "[info] starting php-fpm: /usr/sbin/php-fpm --nodaemonize --force-stderr $PHP_ARGS"
exec /usr/sbin/php-fpm --nodaemonize --force-stderr $PHP_ARGS
else
echo "Run: $@"
exec "$@"
fiwww + DOCKER?

- nginx needs code for assets
- nginx needs php to proxy requests
- php needs code to execute it
- php needs mysql to store data
DOCKER, PROBLEMOS
- DOCKER BE SUDO
- PERMISSIONS
- HOSTNAMES
- PORTS
- VOLUMES
Kas kam neaišku?
Q&A
Docker
By Vaidas Mikalauskas
Docker
- 771