Развертывание Kubernetes с помощью Kubeadm на CentOS 7
Обзор Эта статья призвана помочь вам в кратчайшие сроки запустить и запустить кластер Kubernetes с помощью kubeadm. Это руководство будет развертывать два сервера, на
Приложения PHP обычно состоят из веб-сервера, системы реляционных баз данных и самого интерпретатора языка. В этом уроке мы будем использовать полный стек приложений PHP с помощью Docker. Это подробное руководство, в котором мы собираемся создавать и организовывать контейнеры для Nginx (веб-сервер), MySQL (система баз данных) и PHP.
Для этого урока мы напишем простое приложение, которое считывает список городов из базы данных и отображает его на веб-странице. Таким образом, мы продемонстрируем простое, но работающее приложение PHP.
В этом руководстве предполагается, что у вас уже установлен Docker-CE, и вы хотя бы обладаете минимальными рабочими знаниями по Docker. В этом отношении вы можете просмотреть следующие учебные пособия:
Реальное основанное на докере приложение обычно состоит из нескольких контейнеров. Управление ими вручную может легко стать довольно грязным и громоздким. Вот где в игру вступает docker-compose. Это поможет вам управлять несколькими контейнерами через простой yaml
файл конфигурации.
Установите docker-compose.
curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Создайте папку для хранения всех необходимых файлов этого примера, а затем cd
в нее. Отныне это наш рабочий каталог, и каждая команда будет выполняться внутри этой папки, и каждый путь будет ссылаться относительно него. На эту папку можно ссылаться позже как WORKING_DIR
.
mkdir ~/docker
cd ~/docker
Теперь создайте еще три папки.
mkdir php nginx app
В php
папке, где мы будем создавать наш собственный образ PHP, в nginx
папке будут храниться необходимые файлы для нашего пользовательского образа nginx, а в app
папке - исходный код и конфигурация нашего примера приложения.
В этом примере мы будем использовать php-fpm
для подключения к веб-серверу Nginx. Мы будем использовать официальный базовый образ PHP. Однако нам также необходимо установить и включить некоторые расширения, чтобы мы могли получить доступ к базе данных. Внутри php
папки создайте файл с именем Dockerfile
и поместите в него следующее содержимое.
FROM php:7.1-fpm-alpine3.4
RUN apk update --no-cache \
&& apk add --no-cache $PHPIZE_DEPS \
&& apk add --no-cache mysql-dev \
&& docker-php-ext-install pdo pdo_mysql
Обратите внимание, что мы используем альпийскую версию официального изображения PHP. Alpine - очень крошечный дистрибутив, ориентированный на контейнеры, предоставляющий гораздо меньшие размеры Также обратите внимание на использование этой команды docker-php-ext-install
, официальный образ PHP предоставляет эту команду, чтобы упростить процесс установки и настройки расширений PHP.
Теперь давайте создадим этот образ Docker, выполнив следующее (внутри нашего WORKING_DIR
):
docker build -t vultr-php php/
docker-compose.yml
файлКак уже упоминалось, docker-compose
позволяет управлять несколькими контейнерами через простой файл конфигурации. Этот файл конфигурации обычно называется docker-compose.yml
. Создайте этот файл внутри app
папки.
touch app/docker-compose.yml
Теперь поместите следующее содержимое в этот файл.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
Мы объясним этот синтаксис. Сначала обратите внимание на первую строку.
version: '2'
Это указывает версию docker-compose.yml
используемого файла конфигурации. В следующей строке указываются службы или, другими словами, контейнеры, которые должны быть предоставлены.
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
Обратите внимание, что у каждого сервиса есть определенный ключ внутри services
блока. Указанное здесь имя будет использоваться для ссылки на этот конкретный контейнер позже. Также обратите внимание, что внутри php
конфигурации мы определяем изображение, используемое для запуска контейнера (это изображение, которое мы создали ранее). Мы также определяем отображение объема.
volumes:
- ./:/app
Это говорит docker-compose
о необходимости сопоставления текущего каталога ( ./
) с /app
каталогом внутри контейнера. Последняя строка устанавливает /app
папку внутри контейнера как рабочий каталог, что означает, что это папка, из которой по умолчанию выполняются все будущие команды внутри контейнера.
Теперь мы можем организовать наши контейнеры.
cd ~/docker/app
docker-compose up -d
Вы можете выполнить следующую команду, чтобы убедиться, что контейнер PHP был выполнен:
docker ps
Находясь внутри app
папки, мы можем выполнить любую команду внутри определенного сервисного контейнера с помощью этой docker-compose
команды.
docker-compose exec [service] [command]
[service]
Заполнитель относится к служебному ключу. В нашем случае это было php
. Давайте запустим команду внутри контейнера, чтобы проверить нашу версию PHP.
docker-compose exec php php -v
Вы увидите следующий вывод.
PHP 7.1.14 (cli) (built: Feb 7 2018 00:40:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
Как и в случае с контейнером PHP, нам нужно создать собственное изображение для веб-сервера. Но в этом случае нам просто нужно предоставить конфигурацию для нашего virtual host
. Убедитесь, что вы внутри нашей WORKING_DIR
и создайте Dockerfile
внутри nginx
папки:
cd ~/docker
touch nginx/Dockerfile
Теперь поместите следующее содержимое в это Dockerfile
:
FROM nginx:1.13.8-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf
Мы используем изображение Nginx по умолчанию на основе Alpine. В этом файле Docker мы просто копируем файл конфигурации в настройку нашего приложения. Перед созданием этого образа создайте файл конфигурации.
touch nginx/default.conf
Теперь заполните это этим содержанием.
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /app;
index index.php;
#server_name server_domain_or_IP;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Обратите внимание, что в fastcgi_pass php:9000
строке мы ссылаемся на контейнер PHP по его имени внутри service
блока docker-compose.yml
файла конфигурации. Внутренне docker-compose
создает сеть и назначает имя службы в качестве имени хоста для каждой из определенных служб. Теперь мы можем построить образ Nginx.
docker build -t vultr-nginx nginx/
docker-compose.yml
Теперь обновите app/docker-compose.yml
файл.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
web:
image: vultr-nginx
volumes:
- ./:/app
depends_on:
- php
ports:
- 80:80
Мы только добавили новый сервис. Конфигурация почти такая же, за исключением следующего.
depends_on:
- php
ports:
- 80:80
Как только контейнеру Nginx потребуется полная инициализация службы PHP, мы включаем это требование в depends_on
опцию. ports
Ключ конфигурации карты хост - порт для контейнерного порта, здесь мы преобразуем порт 80
в хост к порту 80
в контейнере.
Теперь создайте файл с именем index.php
внутри app
папки и поместите в него следующее.
<?php phpinfo();
Убедитесь, что порт 80
доступен через брандмауэр, и выполните следующие действия.
cd ~/docker/app
docker-compose up -d
Еще раз, дважды проверьте, что сервис работает.
docker ps
Откройте браузер и получите доступ [vultr-instance-ip]
. Вы можете узнать свой IP-адрес экземпляра Vultr, выполнив следующее.
hostname -I
Вы увидите страницу информации PHP.
Официальный образ MySQL позволяет настроить контейнер с помощью простых переменных среды. Это можно сделать с помощью environment
параметра внутри определения сервисного блока. Обновите ~/docker/app/docker-compose.yml
файл до следующего.
version: '2'
services:
php:
image: vultr-php
volumes:
- ./:/app
working_dir: /app
web:
image: vultr-nginx
volumes:
- ./:/app
depends_on:
- php
ports:
- 80:80
mysql:
image: mysql:5.7.21
volumes:
- ./:/app
- dbdata:/var/lib/mysql
environment:
- MYSQL_DATABASE=world
- MYSQL_ROOT_PASSWORD=root
working_dir: /app
volumes:
dbdata:
Теперь мы определили новый сервис для базы данных. Обратите внимание на линию dbdata:/var/lib/mysql
. Это монтирует путь в контейнере /var/lib/mysql
к постоянному тому, управляемому Docker, таким образом, данные базы данных сохраняются после удаления контейнера. Этот том должен быть определен в блоке верхнего уровня, как вы можете видеть в конце файла.
Прежде чем организовать нашу новую конфигурацию, давайте загрузим пример базы данных MySQL. Официальная документация MySQL предоставляет некоторые примеры база данных. Мы будем использовать известную мировую базу данных. Эта база данных содержит список стран и городов. Чтобы загрузить этот образец, выполните следующую команду в нашей папке приложения.
curl -L http://downloads.mysql.com/docs/world.sql.gz -o world.sql.gz
gunzip world.sql.gz
Теперь давайте организуем наши контейнеры.
docker-compose up -d
Как вы, возможно, уже заметили, docker-compose up
команда запускает только те контейнеры, которые еще не запущены. Он проверяет различия между вашим docker-compose.yml
файлом и текущей конфигурацией запущенных контейнеров.
Еще раз проверьте, что контейнер MySQL был запущен.
docker ps
Теперь заполните мировую базу данных.
docker-compose exec -T mysql mysql -uroot -proot world < world.sql
Вы можете проверить, что база данных была заполнена, выбрав данные непосредственно из базы данных. Сначала получите доступ к приглашению MySQL внутри контейнера.
docker-compose exec mysql mysql -uroot -proot world
В командной строке MySQL выполните следующее.
select * from city limit 10;
Вы увидите список городов. Теперь выйдите из командной строки MySQL.
mysql> exit
Теперь, когда все необходимые контейнеры запущены и работают, мы можем сосредоточиться на нашем примере приложения. Обновите app/index.php
файл до следующего.
<?php
$pdo = new PDO('mysql:host=mysql;dbname=world;charset=utf8', 'root', 'root');
$stmt = $pdo->prepare("
select city.Name, city.District, country.Name as Country, city.Population
from city
left join country on city.CountryCode = country.Code
order by Population desc
limit 10
");
$stmt->execute();
$cities = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Vultr Rocks!</title>
</head>
<body>
<h2>Most Populous Cities In The World</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Country</th>
<th>District</th>
<th>Population</th>
</tr>
</thead>
<tbody>
<?php foreach($cities as $city): ?>
<tr>
<td><?=$city['Name']?></td>
<td><?=$city['Country']?></td>
<td><?=$city['District']?></td>
<td><?=number_format($city['Population'], 0)?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</body>
</html>
Если вы заходите [vultr-instance-ip]
в веб-браузер, вы увидите список самых густонаселенных городов мира. Поздравляем, вы развернули полностью работающее PHP-приложение с помощью Docker.
В этом уроке я шаг за шагом продемонстрировал, как настроить полностью работающее PHP-приложение. Мы создали собственные изображения для PHP и Nginx и настроили docker-compose для организации наших контейнеров. Несмотря на простоту и простоту, эта установка отражает реальный сценарий.
В этом руководстве мы создали и пометили наши изображения локально. Для более гибкой настройки вы можете отправить эти образы в реестр докеров . Вы можете перейти в официальный реестр Docker или даже настроить свой собственный реестр Docker. В любом случае это позволит вам создавать изображения на одном хосте и использовать их на другом.
Для более подробного использования docker-compose
, вы должны обратиться к официальной документации .
В зависимости от требований вашего приложения и используемой среды PHP, вы можете добавить дополнительные расширения. Это можно легко сделать, изменив Dockerfile
используемый для создания нашего собственного изображения PHP. Однако для некоторых расширений в контейнере необходимо установить дополнительные зависимости. Вам следует обратиться к списку расширений в официальной документации PHP, чтобы ознакомиться с основными требованиями каждого расширения.
Обзор Эта статья призвана помочь вам в кратчайшие сроки запустить и запустить кластер Kubernetes с помощью kubeadm. Это руководство будет развертывать два сервера, на
Контейнеры LXC (контейнеры Linux) - это функция операционной системы Linux, которую можно использовать для запуска нескольких изолированных систем Linux на одном хосте. Thes
Введение Это руководство покажет вам, как создать и настроить рой Docker с использованием нескольких серверов Alpine Linux 3.9.0 и Portainer. Пожалуйста, знайте, что
Kubernetes - это платформа с открытым исходным кодом, разработанная Google для управления контейнерными приложениями на кластере серверов. Он основан на десятилетии и
Введение Docker - это приложение, которое позволяет нам развертывать программы, которые запускаются как контейнеры. Он был написан на популярном языке программирования Go
Используете другую систему? Введение Rancher - это платформа с открытым исходным кодом для запуска контейнеров и создания частного контейнерного сервиса. Rancher является базой
В этой статье объясняется, как установить docker-compose на CoreOS. В CoreOS папка / usr / является неизменяемой, поэтому стандартный путь / usr / local / bin недоступен для
Мы все знаем и любим Docker, платформу для создания, управления и распределения контейнеров приложений на нескольких компьютерах. Docker Inc. предоставляет услугу т
Используете другую систему? Введение Rancher - это платформа с открытым исходным кодом для запуска контейнеров и создания частного контейнерного сервиса. Rancher является базой
Используете другую систему? Введение Sentry - это решение с открытым исходным кодом для отслеживания ошибок. Sentry отслеживает исключения и другие полезные сообщения для
Harbour - это сервер реестра корпоративного класса с открытым исходным кодом, который хранит и распространяет образы Docker. Harbour расширяет с открытым исходным кодом Docker Distribution b
Используете другую систему? Введение Docker Swarm превращает ваши отдельные серверы в кластер компьютеров, облегчая масштабирование, высокую доступность и
Используете другую систему? Docker - это приложение, которое позволяет развертывать программное обеспечение в виртуальных контейнерах. Это было написано в программе Go
Обзор RancherOS - это невероятно легкая операционная система (всего около 60 МБ), которая запускает системный демон Docker в качестве PID 0 для запуска системных служб.
Используете другую систему? Введение Docker Swarm превращает ваши отдельные серверы в кластер компьютеров; облегчение масштабирования, высокая доступность и
Это руководство объясняет основы начала работы с Docker. Я предполагаю, что у вас уже установлен Docker. Шаги в этом уроке будут работать на
При запуске веб-приложения вы, как правило, хотите максимально эффективно использовать свои ресурсы без необходимости конвертировать программное обеспечение для использования многопоточности.
Предпосылки к движку Docker 1.8+. Минимум 4 ГБ дискового пространства. Минимум 4 ГБ ОЗУ. Шаг 1. Установите Docker Для установки SQL-сервера, Docker mus
Используете другую систему? Введение Docker - это приложение, которое позволяет развертывать программное обеспечение в виртуальных контейнерах. Это было написано в G
Изучение 26 методов анализа больших данных: часть 1
Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.
Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.
Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.
Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.
CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?
По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.
Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!
Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.
Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше