可以直接使用官方镜像搭建LAMP环境
从官方下载PHP+Apache镜像和MySQL两个镜像来组成(如:php:7.2.3-apache-stretch和mysql:5.7.21)
docker pull php:7.3.3-apache-stretch
docker pull mysql:5.7.21
官方下载的PHP+Apache镜像是没有安装PHP插件mysqli
/usr/local/bin/docker-php-ext-install mysqli
官方下载的PHP+Apache镜像Apache是没有开启rewrite
a2enmod rewrite
可以编写Dockerfile基于官方下载的PHP+Apache镜像执行以上两句命令,生成新的镜像文件方便日后使用
# dockerfile
FROM php:7.2.-apache-stretch RUN /usr/local/bin/docker-php-ext-install mysqli; \
a2enmod rewrite; CMD ["apache2-foreground"]
启动容器时主要要先启动mysql,需要设置root密码,另外可以设置数据库文件存储在宿主机器上,端口可以不映射,因为其他容器通过link方式使用数据库
再启动PHP+Apache,需要设置端口映射,指定通过link方式访问数据库,可以指定文件存储在宿主机器上
docker run -d -v C:/data/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql
docker run -d -p 80:80 -v C:/data/html:/var/www/html --link mysql:mysql php:7.2.3-apache-stretch
---------------------
作者:benimang
来源:CSDN
原文:https://blog.csdn.net/benimang/article/details/80515179
版权声明:本文为博主原创文章,转载请附上博文链接!
docker run -d -p 8881:80 --name we7_test --privileged=true --link mysql:mysql -v /var/www/we7_test/web:/var/www/html --restart=always php:7.2-apache
docker 运行 php:7.2-apache 容器
docker run -d -p 8881:80 --name we7_test --privileged=true --link mysql:mysql -v /var/www/we7_test/web:/var/www/html --restart=always php:7.2-apache
进入容器安装缺少的扩展:gd pdo
docker exec -it we7_test /bin/bash
apt-get update -y && apt-get install -y libpng-dev
docker-php-ext-install gd pdo pdo_mysql
退出容器,重启容器
exit
docker restart we7_test
浏览器访问
http://localhost:8881
docker run -d -p 10022:22 -p 8001:80 --name apache_php --link mysql_db:mysql_db -v /var/www/html:/usr/local/apache2/htdocs apache_php:v1
创建一个文件夹用于挂载数据库文件
mkdir /mysql_lamp
然后生成容器
docker run -d -p 33060:3306 -e mysqld -e MYSQL_ROOT_PASSWORD=test-e MYSQL_USER=test -e MYSQL_PASSWORD=test -e MYSQL_DATABASE=discuz -v /
mysql_lamp:/var/lib/mysql --name mysql_db mysql
命令详解:
1、mysqld,#启动mysql服务,必须
2、MYSQL_ROOT_PASSWORD,#设置mysql的root密码,必须
3、MYSQL_USER ,#添加用户,可选
4、MYSQL_PASSWORD,#为用户设置密码,可选
5、MYSQL_DATABASE,#设置生成容器时需要新建的数据库,可选
6、将宿主机的目录“/mysql_data”映射到容器的“/var/lib/mysql”目录,可选。这是因为默认情况下数据库的数据库文件和日志文件都会存放于容器的AUFS文件层,这不仅不使得容器变得越来越臃肿,不便于迁移、备份等管理,而且数据库的性能也会受到影响,因此建议挂载到宿主机的目录到容器内。
7、mysql:镜像名字
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-p:端口映射
--name:生成容器的名字
Mysql
docker pull mysql:5.7
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=你要设置的mysql密码 --name mysql57 mysql:5.7 //你要设置的mysql密码
Redis
docker pull redis
docker run -d -p 6379:6379 --name redis01 redis
PHP
docker pull mysql:7.2
docker run -d -v D:/docker_conf/www:/var/www/html -p 9000:9000 -p 9501:9501 --link mysql57:mysql --name php72 php:7.2-fpm
扩展
docker-php-ext-install pdo_mysql
docker-php-ext-install mysqli
php-redis扩展
1、进入php72容器 docker exec -it php72 bash
2、curl -L -o /tmp/redis.tar.gz phpredis/phpredis/archive/3.1.3.tar.gz //3.1.3=>版本可换
3、cd /tmp
4、tar xfz /tmp/redis.tar.gz //解压
// ls 查看
// rm -r /tmp/redis.tar.gz 删除
5、mkdir -p /usr/src/php/ext //(已存在目录就忽略)
6、在tmp目录下 mv phpredis-3.1.3 /usr/src/php/ext/redis
7、在cd /usr/src/php/ext/redis目录下 docker-php-ext-install redis
8、php -m 查看redis能否安装
9、外部docker restart php72 //php72是docker的name
php-swoole扩展(和redis扩展相似)
1、进入php72容器 docker exec -it php72 bash
2、curl -L -o /tmp/swoole_ext.tar.gz https://codeload.github.com/swoole/swoole-src/tar.gz/v4.2.11
//版本可换 swoole/swoole-src/releases
3、cd /tmp
4、tar xfz /tmp/swoole_ext.tar.gz //解压(swoole-src-4.2.11)
// ls 查看
// rm -r /tmp/swoole_ext.tar.gz 删除
5、mkdir -p /usr/src/php/ext //(已存在目录就忽略)
6、在tmp目录下 mv swoole-src-4.2.11 /usr/src/php/ext/swoole
7、在cd /usr/src/php/ext/swoole目录下 docker-php-ext-install swoole
8、php -m 查看swoole能否安装
9、外部docker restart php72 //php72是docker的name
10、下个easyswoole什么的测试一下
(假如不能运行,是由于容器端口没暴露的起因,处理:
docker run -d -v D:/docker_conf/www:/var/www/html -p 9000:9000 -p 9501:9501 --link mysql57:mysql --name php72 php:7.2-fpm
--启动容器时需要加入端口 -p 9501:9501 //需要哪个端口可以增加
)
Nginx
docker pull nginx:1.14.1
docker run -d -p 80:80 -v D:/docker_conf/www:/var/www/html --link php72:phpfpm --name nginx114 nginx:1.14.1
docker exec -it nginx114 /bin/bash
(
vim /etc/nginx/conf.d/default.conf //没有就apt-get安装
配置:
< code > 9000 ;### code >
|
'''
/etc/init.d/nginx reload
)