第三章 docker-GUI Stack部署
## 注意点:各image的版本号、各服务配置文件的位置
部署DNMP(docker + nginx + mysql(MariaDB)+ PHP-FPM)
环境部署
- 配置存放目录
root@docker-debian:~# mkdir -p /opt/lnmp/data/nginx/conf.d/
root@docker-debian:~# mkdir -p /opt/lnmp/data/html
root@docker-debian:~# mkdir -p /opt/lnmp/data/mysql
root@docker-debian:~# cd /opt/lnmp/data/nginx/conf.d/
root@docker-debian:/opt/lnmp/data/nginx/conf.d# docker run -d --name test-nginx nginx
fa44cffbc00fef50845305a9562177390a6ed81086c3986f3ea134c533cd4d0f
root@docker-debian:/opt/lnmp/data/nginx/conf.d# docker cp test-nginx:/etc/nginx/conf.d/default.conf ./
- 配置nginx(default.conf或wordpress.conf)
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass lnmp-php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
- PHP-FPM安装支持MySQL插件(安装后需重启)
DNMP的docker-compose.yml
services:
nginx:
image: nginx:latest
container_name: lnmp-nginx
ports:
- "8081:80"
volumes:
- /opt/lnmp/data/nginx/conf.d:/etc/nginx/conf.d:rw
- /opt/lnmp/data/html:/usr/share/nginx/html:rw
environment:
TZ: "Asia/Shanghai"
restart: always
networks:
- lnmp
php:
image: php:fpm
container_name: lnmp-php
volumes:
- /opt/lnmp/data/html:/var/www/html:rw
restart: always
cap_add:
- SYS_PTRACE
networks:
- lnmp
mysql:
image: mysql:latest
container_name: lnmp-mysql
volumes:
- /opt/lnmp/data/mysql/data:/var/lib/mysql:rw
restart: always
networks:
- lnmp
environment:
MYSQL_ROOT_PASSWORD: "PObejCBeDzTRCncXwgBy"
MYSQL_DATABASE: wordpress
MYSQL_USER: "wordpress"
MYSQL_PASSWORD: "MMS12ge**hao"
TZ: "Asia/Shanghai"
phpMyAdmin:
image: phpmyadmin/phpmyadmin:latest
container_name: lnmp-phpMyAdmin
ports:
- 8090:80
environment:
MYSQL_USER: "root"
MYSQL_PASSWORD: "MMS12ge**hao"
MYSQL_ROOT_PASSWORD: "MMS12ge**hao"
PMA_HOST: "lnmp-mysql"
PMA_PORT: "3306"
networks:
- lnmp
networks:
lnmp:
图形化部署stacks
- 测试数据连接
部署DAMP(docker + apache2 + mysql(MariaDB)+ PHP-FPM)
环境部署
root@docker-debian:~# docker run -d --name test-httpd httpd
8ed2e5ec88fa4a51c0c7cb1c2a0e8546fdc1941a63caa519aefc00e043a52d25
root@docker-debian:~# mkdir -p /opt/lamp/data/httpd
root@docker-debian:~# mkdir -p /opt/lamp/data/mysql
root@docker-debian:~# mkdir -p /opt/lamp/data/html
root@docker-debian:~# cd /opt/lamp/data/httpd
root@docker-debian:/opt/lamp/data/httpd# docker cp test-httpd:/usr/local/apache2/conf/httpd.conf ./
root@docker-debian:/opt/lamp/data/httpd# docker cp test-httpd:/usr/local/apache2/conf/extra/httpd-vhosts.conf ./
- 配置apache(httpd.conf
# 启动转发模块,转发php的数据给PHP-FPM
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# 添加index.php支持php欢迎页面
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
# 启用虚拟主机配置文件
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
- 配置apache虚拟主机(httpd-vhosts.conf)
<VirtualHost *:80>
# ServerAdmin plengong@com.cn
DocumentRoot "/usr/local/apache2/htdocs"
ServerName localhost
<Directory "/usr/local/apache2/htdocs">
Options None
Require all granted
</Directory>
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://lamp-php:9000/var/www/html/$1
</VirtualHost>
- PHP-FPM安装支持MySQL插件(安装后需重启)
DAMP的docker-compose.yml
services:
apache:
image: httpd:latest
container_name: lamp-httpd
ports:
- "8082:80"
volumes:
- /opt/lamp/data/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf:rw
- /opt/lamp/data/httpd/httpd-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf:rw
- /opt/lamp/data/html:/usr/local/apache2/htdocs:rw
environment:
TZ: "Asia/Shanghai"
restart: always
networks:
- lamp
php:
image: php:fpm
container_name: lamp-php
volumes:
- /opt/lamp/data/html:/var/www/html:rw
restart: always
cap_add:
- SYS_PTRACE
networks:
- lamp
mysql:
image: mysql:latest
container_name: lamp-mysql
volumes:
- /opt/lamp/data/mysql:/var/lib/mysql:rw
restart: always
networks:
- lamp
environment:
MYSQL_ROOT_PASSWORD: "PObejCBeDzTRCncXwgBy"
MYSQL_DATABASE: wordpress
MYSQL_USER: "wordpress"
MYSQL_PASSWORD: "MMS12ge**hao"
TZ: "Asia/Shanghai"
networks:
lamp:
图形化部署stacks
-
测试数据库连接
-
数据库测试文件
<?php
//这里的重点就是这个host是容器my-mysql,因为my-php和my-mysql在一个网络下,所以可以直接用容器的名字去访问这个容器
$con = new mysqli("数据库","用户","密码");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
echo "连接成功";
?>