Операционная система: Aliyun ESC экземпляр centos 7.4 Программное обеспечение: docker -ce версии 18.09.3, docker-compose версии 1.23.2
1. Создайте образ докера с расширением swool-redis-pdo_mysql-gd
1. Создайте файлы dockerfile
vim dockerfile
2. Запишите в файл dockerfile
From php:7.1-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-configure pdo_mysql \ && docker-php-ext-install pdo_mysql \ && pecl install redis-4.3.0 \ && pecl install swoole \ && docker-php-ext-enable redis swoole
3. Создайте пользовательский образ PHP, в основном без пропуска последнего”.”, который должен указывать текущий каталог для создания образа
docker build -t myphp4 .
Выполнение инструкций, из-за проблем с сетью и так далее, занимает много времени, после успеха появится похожий на следующий код
... Build process completed successfully Installing '/usr/local/include/php/ext/swoole/config.h' Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20160303/swoole.so' install ok: channel://pecl.php.net/swoole-4.3.1 configuration option "php_ini" is not set to php.ini location You should add "extension=swoole.so" to php.ini Removing intermediate container ad1420f7554f ---> 2f2f332d73ce Successfully built 2f2f332d73ce Successfully tagged myphp4:latest
До сих пор пользовательский образ myphp4 docker был успешно создан!
2. Создайте файл docker-compose.yml
mkdir pnsmr cd pnsmr vim docker-compose.yml
Напишите следующий код
version: '3.0' services: nginx: image: "nginx:latest" ports: - "9998:80" volumes: - /var/www/html:/usr/share/nginx/html php-fpm: image: "myphp4" volumes: - /var/www/html:/usr/share/nginx/html mysql: image: "mysql:latest" redis: image: "redis:4.0"
Инструкции по эксплуатации
docker-compose up -d
Успех можно увидеть
WARNING: The Docker Engine you're using is running in swarm mode. Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node. To deploy your application across the swarm, use `docker stack deploy`. Creating network "pnsmr_default" with the default driver Creating pnsmr_php-fpm_1 ... done Creating pnsmr_redis_1 ... done Creating pnsmr_mysql_1 ... done Creating pnsmr_nginx_1 ... done
До сих пор был открыт PHP-сервис nginx MySQL redis
III. Изменение профилей услуг 1. Ввод браузера 127.0.0.1:9998 Здесь следует ввести IP-адрес вашего сервера, вы можете увидеть следующий рисунок
2. Далее, чтобы изменить файл конфигурации nginx в контейнере, сначала используйте инструкции для просмотра IP-адреса docker каждого контейнера.
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
This command allows you to view the IP of all containers opened with docker-compose. The result is similar to the figure below, and you can use the corresponding IP address for internal communication.3. Скопируйте файл конфигурации контейнера nginx, измените и замените его, чтобы nginx мог анализировать PHP
docker cp pnsmr_nginx_1:/etc/nginx/conf.d/default.conf nginx.conf vim nginx.conf
Измените следующий код
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
Fastcgi_pass 172.24.0.3:9000; 65507;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}После успешной модификации выполняются следующие инструкции
Docker CP nginx.conf pnsmr_nginx_1:/etc/nginx/conf.d/default.conf# Copies the modified configuration file into the container docker container stop pnsmr_nginx_1 Docker container start pnsmr_nginx_1 # restart nginx container for configuration file to take effect Vim/var/www/html/index.php# Create a new index.php file in the server local directory, enter PHP phpinfo (); and save it. Vim/var/www/html/index.html# Create a new index.html file in the server local directory and output HelloWorld
Доступ 127.0.0.1:9998, Разбор HTML-файлов в норме
Доступ 127.0.0.1:9998/index.php, Синтаксический анализ PHP-файлов-это нормально
4. Протестируйте MySQL и redis
Vim/var/www/html/redis.php# for testing whether redis has been successfully configured
connect("172.24.0.4",6379);
$redis->set('test','this is a test for redis');
echo $redis->get('test');Посещение 127.0.0.1:9998/redis.php, redis действует
Введите контейнер MySQL
docker exec -it pnsmr_mysql_1 bash
Введите MySQL и измените пароль пользователя root
Создание тестовых файлов
vim /var/www/html/mysql.php
Посещение 127.0.0.1:9998/mysql.php, MySQL действует
Четыре. Вывод Хотя среда была успешно настроена и может быть сгенерирована с помощью инструкции docker-compose up, по-прежнему неудобно изменять файлы конфигурации контейнеров и их необходимо оптимизировать. Кроме того, функции кластера и стека docker не используются, поэтому мы продолжим изучение позже.