Virtual MACHINES
  • VMWARE
  •   ESXi
  •     Инсталиране на ESXi
  •     Управление на ESXi
  •     Инсталиране на OS върху VM
  •     Експортиране на VM
  • KVM
  •     Инсталиране на KVM
  • ProxMox
  •     Инсталиране на ProxMox върху Debian
  •     Инсталиране на ProxMox от ISO
  •     Първоначални настройки на ProxMox
  •     Допълнителни настройки на ProxMox
  •     Допълнителен диск в ProxMox
  •     Създаване на ВИРТУАЛНА МАШИНА
  •     Създаване на КОНТЕЙНЕР
  •     NextCloud върху ProxMox
  •     ownCloud в контейнер
  •       HTTP към HTTPS
  •       HTTPS към друк компютър
  •     Файлов сървър върху ProxMox
  •     Резервно копиране и възстановяване в ProxMox
  •     Външна памет в ProxMox
  •     Прехвърляне на физически хардуер във VM
  • КОНТЕЙНЕРИ DOCKER
  •     Запознаване с Docker
  •       Инсталиране на Docker върху Windows
  •       Инсталиране на Docker върху Linux
  •     NGINX, PHP, MySQL чрез Docker
  •       NGINX и PHP чрез Docker
  •       NGINX, PHP, MySQL и MySQLAdmin
  •       LEMP и Docker compose
  •     ownCloud чрез Docker имидж
  •     ownCloud чрез Docker-compose
  •     Пощенски сървър Mailcow и Docker
  •     RustDESK чрез Docker
  • КОНТЕЙНЕРИ LXC
  •     Запознаване с LXC
  •         LXD Debian
  •             LXD Debian BackUP/Restore
  • Завършване NGINX, PHP, MySQL и MySQLAdmin чрез Docker

    https://www.youtube.com/watch?v=Q0OwEKtncPc

    Контейнер MySQL 34:48

    Дайте да създадем и стартираме контейнер MySQL.

    docker run -d -v ~/docker-project/mysql-data/:/var/lib/mysql --network network1 --name mysql1 mysql Unable to find image 'mysql:latest' locally latest: Pulling from library/mysql 4f37333d1be6: Pull complete e5a384f12fc1: Pull complete 7a3034072b44: Pull complete c07617e6f14b: Pull complete 85e7dc27e1dd: Pull complete a5b1ba019080: Pull complete c3c2157be11c: Pull complete 74e9390a4418: Pull complete 93b95dea6553: Pull complete fe44c8bf49c1: Pull complete Digest: sha256:db32c8ec843c042a728efb0ac7aa814d6f010eaac8923e20ae0a849d09c5baf8 Status: Downloaded newer image for mysql:latest eb30a5fc36e2499ae3617cf1b885b1d4401bebc27f83a7f360870f3e34d40ddb

    -v - дефинираме, че ще ползваме папки за пренасочване ./mysql-data - тук физически на хоста ще се съхраняват базите данни /var/lib/mysql - базата данни която се намира вътре в контейнера network1 - локална, изолирана частна мрежа която създадохме по-рано mysql1 - новото име на контейнера което създаваме mysql - образа който ще ползваме за контейнера Да проверим дали работи контейнера.

    docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eb30a5fc36e2 mysql "docker-entrypoint.s…" 35 seconds ago Exited (1) 34 seconds ago mysql1 8fa044d5332a php81fpm "php-fpm" 22 hours ago Up 5 minutes 9000/tcp php1 5384d098b695 nginx "/docker-entrypoint.…" 22 hours ago Up 5 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx1 308fe56e74b1 php81fpm "php-fpm" 23 hours ago Exited (0) 23 hours ago wizardly_hofstadter 296e4784a8eb nginx "/docker-entrypoint.…" 23 hours ago Exited (0) 23 hours ago boring_jennings

    Докера не работи. Да проверим логовете.

    docker logs mysql1 2026-02-11 15:47:50+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.6.0-1.el9 started. 2026-02-11 15:47:51+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2026-02-11 15:47:51+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.6.0-1.el9 started. 2026-02-11 15:47:51+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified You need to specify one of the following as an environment variable: - MYSQL_ROOT_PASSWORD - MYSQL_ALLOW_EMPTY_PASSWORD - MYSQL_RANDOM_ROOT_PASSWORD

    Сървъра ни задължава да използваме една от променливите за да работи правилно (или парола на root или да се ползва празна парола или случайна парола). Променливите в докер се дефинират чрез -e. Да оправим грешката, но първо трием грешния контейнер.

    docker rm -f mysql1 docker run -d -v ~/docker-project/mysql-data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --network network1 --name mysql1 mysql c80440af84fd452bb5a21b0432652c75bc22cef4ad47bd514e14f70560a4c993

    Отново проверяваме дали работи контейнера.

    docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c80440af84fd mysql "docker-entrypoint.s…" 25 seconds ago Up 24 seconds 3306/tcp, 33060/tcp mysql1 8fa044d5332a php81fpm "php-fpm" 22 hours ago Up 10 minutes 9000/tcp php1 5384d098b695 nginx "/docker-entrypoint.…" 22 hours ago Up 10 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx1

    Статуса му е Up, значи всичко е нормално, без грешка. Да проверим имаме ли достъп до базите данни през PHP. Ще се прикачим към базата данни с помощта на PDO.

    sudo nano ~/docker-project/www/index.php <?php $user = 'root'; $pass = 'root'; $dsn = 'mysql:host=mysql1;dbname=information_schema;charset=utf8'; $pdo = new PDO ($dsn, $user, $pass); $stmt = $pdo->query('select * from tables'); $row = $stmt->fetch(); print_r($row);

    $user = 'root'; - променлива потребител за свързване с базата данни $pass = 'root'; - парола на потребителя за връзка с SQL $dsn = 'mysql:host=mysql1:dbname=information_schema;charset=utf8'; - този ред дава включване към базата данни и съдържа в себе си всички необходими параметри за свързване. dbname=information_schema - нямаме наша база данни, затова ползваме готова, идваща с инсталацията. $pdo = new PDO ($dsn, $user, $pass); - създаваме нов обект PDO, включващ в себе си реда за включване към базата данни, потребителя с който ще се включим и паролата на потребителя. $stmt = $pdo->query('select * from tables'); - този ред и следващите два са за извличане на данни от базата данни. $row - $stmt->fetch(); - горния ред и този извличат данни от първия ред в таблицата на MySQL print_r($row); - отпечатва първия ред от таблицата. Дайте да заредим страницата: http://192.168.11.44. Всичко работи правилно. Данни от таблицата се извличат. Значи връзката между контейнерите е правилна.

    Контейнер PHPMyAdmin 38:35

    PHPMyAdmin е WEB приложение написано на PHP и има за задача да коригира, създава, трие, управлява и т.н бази данни в MySQL. Да създадем контейнера.

    docker run -d -p 1500:80 -e PMA_HOST=mysql1 --network network1 --name phpmyadmin1 phpmyadmin Unable to find image 'phpmyadmin:latest' locally latest: Pulling from library/phpmyadmin 0c8d55a45c0d: Already exists 615510a9094d: Pull complete e24598f8ce57: Pull complete db5c301a6945: Pull complete 10ecd2cd73b5: Pull complete 8cb331d7a7d9: Pull complete 9046ed4332b7: Pull complete 927120e36889: Pull complete 64133ee529eb: Pull complete 3670ec7d2246: Pull complete 2e9fade0540e: Pull complete 27e4a7ec2970: Pull complete 16b69d6f3818: Pull complete 4d8bc193e0d0: Pull complete 4f4fb700ef54: Pull complete 3ad4835a89ba: Pull complete 5a1bb28bc9ba: Pull complete c4ea0cbd9c71: Pull complete ef080651cc47: Pull complete ea8c0fa16a32: Pull complete 78097ce2d8df: Pull complete Digest: sha256:ce66eefd046088d7a7cc7f2595da08e2896e099b6613e5008e04243fcefc31f6 Status: Downloaded newer image for phpmyadmin:latest 23e6eb2973ae0122a4a1869d067922bb0b8f182c4d0eae38dd7cfb26b2a4827f

    -p 1500:80 - обърнете внимание, PHPMyAdmin ще работи на порт 1500 -e PMA_HOST=mysql1 - чрез този хост PHPMyAdmin ще се обръща към базите данни --network network1 - ще ползваме вътрешния от нас конфигуриран мрежови мост --name phpmyadmin1 - контейнера ще се казва phpmyadmin1 phpmyadmin - това е образа който ще ползваме от Docker HUB Да проверим дали се е стартирал контейнера:

    docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 23e6eb2973ae phpmyadmin "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:1500->80/tcp, :::1500->80/tcp phpmyadmin1 c80440af84fd mysql "docker-entrypoint.s…" 19 minutes ago Up 19 minutes 3306/tcp, 33060/tcp mysql1 8fa044d5332a php81fpm "php-fpm" 23 hours ago Up 29 minutes 9000/tcp php1 5384d098b695 nginx "/docker-entrypoint.…" 23 hours ago Up 29 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx1

    Контейнера е създаден и стартирал. Да се пробваме да влезем в PHPMyAdmin: http://192.168.11.44:1500/. Влизаме с Username: root и Password: root. Всичко работи нормално.