Рубрики
Uncategorized

Docker завершает настройку nginx + PHP + шаги метода MySQL

Автор оригинала: David Wong.

Прежде всего, изучите метод:

Воспользуйся докер exec для входа в контейнер Docker

После версии 1.3.X docker также предоставляет новую команду exec для входа в контейнер. Это относительно простой способ. Давайте рассмотрим использование этой команды:

sudo docker exec --help  

Затем мы используем эту команду для ввода контейнера, который уже запущен.

$ sudo docker ps 
$ sudo docker exec -it 775c7c9ee1e1 /bin/bash

I. Настройка nginx

Найдите изображение nginx в Docker Hub

[email protected]:~/nginx$ docker search nginx
NAME           DESCRIPTION                   STARS   OFFICIAL  AUTOMATED
nginx           Official build of Nginx.            3260   [OK]    
jwilder/nginx-proxy    Automated Nginx reverse proxy for docker c...  674         [OK]
richarvey/nginx-php-fpm  Container running Nginx + PHP-FPM capable ...  207         [OK]
million12/nginx-php    Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...  67          [OK]
maxexcloo/nginx-php    Docker framework container with Nginx and ...  57          [OK]
webdevops/php-nginx    Nginx with PHP-FPM               39          [OK]
h3nrik/nginx-ldap     NGINX web server with LDAP/AD, SSL and pro...  27          [OK]
bitnami/nginx       Bitnami nginx Docker Image           19          [OK]
maxexcloo/nginx      Docker framework container with Nginx inst...  7          [OK]
...

Здесь мы берем официальное зеркало.

[email protected]:~/nginx$ docker pull nginx

После завершения загрузки мы можем найти изображение РЕПОЗИТОРИЯ как nginx в списке локальных изображений.

[email protected]:~/nginx$ docker images nginx
REPOSITORY     TAG         IMAGE ID      CREATED       SIZE
nginx        latest       555bbd91e13c    3 days ago     182.8 MB

Создание и запуск контейнеров:

docker run --name mynginx -p 80:80 -v /var/www:/var/www -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -d nginx

Будьте осторожны:

– V добавляет связь сопоставления файлов, чтобы файлы, измененные на хосте, могли быть сопоставлены непосредственно с контейнером. Каталог здесь отображается в соответствии с его фактическим положением.

После создания и запуска контейнера nginx в docker успешно запустится. Нет необходимости снова запускать nginx внутри docker, иначе он предложит занять порт 80, потому что nginx был запущен.

В это время вы можете получить доступ к проверке доменного имени конфигурации nginx.

На конференции.d, отображенный здесь, в основном содержит файл конфигурации nginx. Информация о конфигурации PHP выглядит следующим образом:

# php
server {
  charset utf-8;
  client_max_body_size 128M;

  listen 80; ## listen for ipv4
  #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

  server_name www.baidu.com;
  root    /var/www;
  index    index.php;

  location / {
    #- e means true as long as filename exists
    if (!-e $request_filename){
      rewrite ^(.*)$ /index.php?s=$1 last;
      break;
    }
    # Redirect everything that isn't a real file to index.php
    try_files $uri $uri/ /index.php$is_args$args;
  }

  # uncomment to avoid processing of calls to non-existing static files by Yii
  #location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
  #  try_files $uri =404;
  #}
  #error_page 404 /404.html;

  # deny accessing php files for the /assets directory
  location ~ ^/assets/.*\.php$ {
    deny all;
  }

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass 172.17.0.3:9000;
    #fastcgi_pass unix:/var/run/php5-fpm.sock;
    try_files $uri =404;
  }

  location ~* /\. {
    deny all;
  }
}

Обратите внимание на IP-адрес fastcgi_pass в конце, и подробно описаны общие проблемы с конфигурацией PHP.

II. Конфигурация PHP

Найдите PHP-образ в Docker Hub

[email protected]:~/php-fpm$ docker search php
NAME           DESCRIPTION                   STARS   OFFICIAL  AUTOMATED
php            While designed for web development, the PH...  1232   [OK]    
richarvey/nginx-php-fpm  Container running Nginx + PHP-FPM capable ...  207         [OK]
phpmyadmin/phpmyadmin   A web interface for MySQL and MariaDB.     123         [OK]
eboraas/apache-php    PHP5 on Apache (with SSL support), built o...  69          [OK]
php-zendserver      Zend Server - the integrated PHP applicati...  69    [OK]    
million12/nginx-php    Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...  67          [OK]
webdevops/php-nginx    Nginx with PHP-FPM               39          [OK]
webdevops/php-apache   Apache with PHP-FPM (based on webdevops/php)  14          [OK]
phpunit/phpunit      PHPUnit is a programmer-oriented testing f...  14          [OK]
tetraweb/php       PHP 5.3, 5.4, 5.5, 5.6, 7.0 for CI and run...  12          [OK]
webdevops/php       PHP (FPM and CLI) service container       10          [OK]
...

Здесь мы берем официальное изображение с надписью 5.6-fpm.

[email protected]:~/php-fpm$ docker pull php:5.6-fpm

После завершения загрузки мы можем найти изображение РЕПОЗИТОРИЯ в виде PHP с пометкой 5.6-fpm в списке локальных изображений.

[email protected]:~/php-fpm$ docker images
REPOSITORY     TAG         IMAGE ID      CREATED       SIZE
php         5.6-fpm       025041cd3aa5    6 days ago     456.3 MB

Создание и запуск PHP-контейнеров:

docker run -p 9000:9000 --name phpfpm -v /var/www:/var/www -d php:5.6-fpm

Обратите внимание, что здесь необходимо создать сопоставление файлов или что в контейнере PHP есть соответствующий PHP-код. Сопоставление файлов nginx на предыдущем шаге здесь не найдено. Поэтому, если нет сопоставления файлов, 127.0.0.1:9000 не найдет файл в этом контейнере.

Распространенная проблема:

После запуска контейнера PHP, если вы получите доступ к nginx: 502 Плохой шлюз

Попробуйте следующие методы:

Просмотр IP – адреса изображения PHP

docker inspect --format='{{.NetworkSettings.IPAddress}}' phpfpm

Например: 192.168.4.202

Измените файл конфигурации conf nginx, чтобы сделать fastcgi_pass 192.168.4.202:9000

vim/докер/nginx/conf.d/default.conf

fastcgi_pass 192.168.4.202:9000;

После перезапуска контейнера nginx вы сможете получить к нему правильный доступ.

III. Конфигурация Mysql

Найдите изображение MySQL в Docker Hub

[email protected]:/mysql$ docker search mysql
NAME           DESCRIPTION                   STARS   OFFICIAL  AUTOMATED
mysql          MySQL is a widely used, open-source relati...  2529   [OK]    
mysql/mysql-server    Optimized MySQL Server Docker images. Crea...  161         [OK]
centurylink/mysql    Image containing mysql. Optimized to be li...  45          [OK]
sameersbn/mysql                             36          [OK]
google/mysql       MySQL server for Google Compute Engine     16          [OK]
appcontainers/mysql   Centos/Debian Based Customizable MySQL Con...  8          [OK]
marvambass/mysql     MySQL Server based on Ubuntu 14.04       6          [OK]
drupaldocker/mysql    MySQL for Drupal                2          [OK]
azukiapp/mysql      Docker image to run MySQL by Azuki - http:...  2          [OK]
...

Здесь мы берем официальное изображение, помеченное 5.6.

[email protected]:~/mysql$ docker pull mysql:5.6

Ожидая завершения загрузки, мы можем найти зеркало с РЕПОЗИТОРИЕМ как MySQL и меткой 5.6 в списке локальных изображений.

[email protected]:~/mysql$ docker images |grep mysql
mysql        5.6         2c0964ec182a    3 weeks ago     329 MB

Создание и запуск контейнеров MySQL:

docker run -p 3306:3306 --name mysql -v /usr/local/mysql:/etc/mysql/sqlinit -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

Основная цель сопоставления файлов здесь-сопоставить файлы данных базы данных SQL хост-машины с контейнером docker MySQL для удобного импорта. Обратите внимание, что каталог контейнера MySQL здесь не может быть существующим каталогом, иначе он будет перезаписан.

Будьте осторожны:

Это легко создать здесь. My. CNF уже существует, и вам не нужно добавлять его самостоятельно.

Расширять

Подключите MySQL в docker с помощью внешнего инструмента Navicat

Хост MySQL заполняет IP-адрес в docker с помощью:

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql

Заполните информацию о подключении по SSH:

Удачного подключения!

Будьте осторожны:

Проблема с порядком запуска контейнера Docker приведет к несогласованности IP-адресов контейнера. Если IP-адрес контейнера используется в связи с базой данных и fastcgi, обратите внимание на порядок запуска контейнера.

Перезапуск контейнера: имя/идентификатор контейнера перезапуска docker

Закройте контейнер: докер стоп ХХХ

Открытый контейнер: запуск докера ХХХ

Просмотр запущенного контейнера: докеры

Просмотр всех контейнеров (включая те, которые не запущены): docker PS-A

Создание и запуск контейнеров: запуск docker

—————————————

Распространенные ошибки:

1. Thinkphp сообщил об ошибке неопределенной константы класса “MYSQL_ATTR_INIT_COMMAND”

Отсутствие расширения pdo_mysql, не удалось связать базу данных

Найдите php. ini, докер в/usr/local/etc/php, скопируйте копию php. ini, добавьте. so, перезапустите php fpm.

Если нет, посетите страницу phpinfo, чтобы узнать, есть ли pdo_mysql

Если нет, то расширение имени не существует и его необходимо скомпилировать.

Метод компиляции заключается в следующем:

Этого можно достичь двумя способами

Режим 1 (не проверен):

pecl pdo_mysql

Способ 2 (доказано, что это возможно):

В контейнер PHP докера, в папке PHP:

docker-php-ext-install pdo pdo_mysql

Если сообщается/usr/local/bin/docker-php-ext-включить: не удается создать/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Каталог отсутствует

Решение:

Создайте каталог conf.d и соответствующий файл docker-php-ext-pdo_mysql.ini непосредственно в каталоге/usr/local/etc/php

Содержимое файла docker-php-ext-pdo_mysql.ini выглядит следующим образом:

extension=pdo_mysql.so

2. Отчет об ошибках Thinkphp _STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Home/4e64ea6a2012f26b832b14cbc2152b28.php

Поскольку папка кэша сервера недостаточно авторизована, то есть среда выполнения не имеет авторизации, удалите все кэшированные файлы, а затем предоставьте авторизацию Runtime 777.

Sudo Chmod 777 во время выполнения или установите разрешения 777 непосредственно на самый внешний уровень кодовой базы

3. Изображение проверочного кода Thinkphp не отображается

Отсутствие расширения GD, установка:

docker-php-ext-install pdo pdo_mysql

Может быть сообщено о следующей ошибке:

If configure fails try --with-webp-dir=
If configure fails try --with-jpeg-dir=
configure: error: png.h not found.

Установка:

apt-get install libpng-dev libjpeg-dev

Повторно внедрить:

// Adding freetype configuration
docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include --with-jpeg-dir=/usr/include

// installation
docker-php-ext-install gd

Php.ini увеличивается php_gd2.so

Отображение библиотеки GD в phpinfo

Обратите внимание, что если в библиотеке phpinfo GD нет поддержки бесплатных типов, код проверки все равно не будет отображаться и будет сообщено об ошибке:

Вызов неопределенной функции Think\imagettftext()

Если в библиотеке GD нет свободного типа, выполните следующие действия:

docker-php-ext-configure gd --enable-gd-native-ttf --with-freetype-dir=/usr/include/freetype2 --with-png-dir=/usr/include

Recompile:
docker-php-ext-install gd

Если сообщается об ошибке:

настройка: ошибка: freetype-конфигурация не найдена.

Выполните: apt-get-y установите libfreetype6-dev, а затем продолжайте выполнять приведенную выше команду.

Если в библиотеке GD есть свободный тип, код проверки будет отображаться нормально:

Выше приведено все содержание этой статьи. Я надеюсь, что это будет полезно для изучения каждого, и я надеюсь, что вы будете больше поддерживать разработчика.