Прежде всего, изучите метод:
Воспользуйся докер 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 есть свободный тип, код проверки будет отображаться нормально:
Выше приведено все содержание этой статьи. Я надеюсь, что это будет полезно для изучения каждого, и я надеюсь, что вы будете больше поддерживать разработчика.