作者:捕鱼达人2602881157 | 来源:互联网 | 2022-12-03 17:03
我正试图从使用VirtualBox作为我的开发环境转向docker.
使用VirtualBox,我主要安装PHP-FPM,Nginx和Mariadb但是在Docker中,尽管尝试了几天,但我无法复制相同的堆栈.
在所有LEMP/LAMP堆栈码头指南中,只有这一个chentex/docker-nginx-centos适用于我:
这是来自的代码 Dockerfile
FROM centos:centos7
LABEL maintainer="Vicente Zepeda "
ENV nginxversion="1.12.2-1" \
os="centos" \
osversion="7" \
elversion="7_4"
RUN yum install -y wget openssl sed &&\
yum -y autoremove &&\
yum clean all &&\
wget http://nginx.org/packages/$os/$osversion/x86_64/RPMS/nginx-$nginxversion.el$elversion.ngx.x86_64.rpm &&\
rpm -iv nginx-$nginxversion.el$elversion.ngx.x86_64.rpm &&\
sed -i '1i\
daemon off;\
' /etc/nginx/nginx.conf
CMD ["nginx"]
这开箱即用,我可以看到一个默认页面 http://localhost
唯一的问题是,它不包含PHP-FPM和Mariadb.
我试图改变文件并添加PHP-FPM和Mariadb,但我发现在reddit上每个容器都应该有服务,就像在一个容器中用于nginx,另一个用于php ...而且我迷失了如何做那个
1> Danoweb..:
Docker容器设计为在其中运行单个服务,而不是整个虚拟系统(您可能会看到虚拟机和虚拟机).
理想情况下,您希望每个容器都有一个容器:
Nginx的
PHP
MariaDB的
此外,Centos docker镜像被设计为其他人继承或执行特定于操作系统的任务(例如cURL调用或shell)的基础,这不是您真正需要的.
我建议您使用docker-compose,它可以让您轻松设置中间容器,并将它们作为一个项目进行管理.
我建议如下docker-compose.yml
文件设置:
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./src:/(nginx config root folder)
- ./config/site.conf:/etc/nginx/conf.d/site.conf
links:
- php
- mariadb
php:
image: php:7-fpm
mariadb:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
然后,您将/config/
在项目文件夹中有一个文件夹,您需要一个site.conf
nginx设置文件.
您还需要一个/src/
项目文件夹中的文件夹,其中包含项目的所有php/web代码.
docker-compose.yml
文件中的卷安装将为您加载到容器中.卷挂载通过映射工作host folder path
:container folder path
当一个内容发生变化时,它会在另一个中更新,几乎就像复制/粘贴一样.请记住,您可能需要更新文件权限.
对于Mariadb,您可以添加另一个volume
来将容器中的数据文件映射到主机文件夹.此外,您可以打开mysql端口,这样您就可以使用mysql workbench等工具通过添加ports
端口部分来查询数据库,如3306
本web
节所示.该值mysql_root_password
将设置root用户密码.
您可以使用docker-compose up
项目目录中的命令启动它.
当您需要手动重新启动nginx(或其他服务)时,您将停止并启动容器.你可以用命令做到这一点:
docker-compose up
- 启动容器
docker-compose down
- 停止容器
如果您希望将正在运行的容器发送到后台(因此它不会占用终端窗口),您将使用: docker-compose up -d
如果您有任何疑问或者有些事情不清楚,请告诉我,我很乐意更新我的答案!
2> matchish..:
你可以使用我的docker-compose文件(mariadb,php-fpm,nginx)
https://github.com/matchish/skeleton
赶紧跑
docker-compose up -d
您将在http:// localhost上看到"Hello world"
您可以在.env文件中编辑环境变量
另外,我推荐https://laradock.io/
您可以在任何服务中运行终端
docker-compose exec db bash
docker-compose exec php-fpm bash
docker-compose exec nginx bash
此外,您还可以添加数据库初始化文件.阅读此文件中的手册https://github.com/matchish/skeleton/blob/master/mariadb/docker-entrypoint-initdb.d/createdb.sql.example
要重新启动服务,请停止容器然后再次启动它
docker-compose stop nginx
docker-compose up -d nginx
如果你需要编辑nginx conf,你应该重建图像
docker-compose build nginx
docker-compose up -d
如果您需要phpmyadmin,可以将其添加到撰写文件中
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db
PMA_PORT: 3306
ports:
- '8181:80'
现在,您可以在http:// localhost:8181上访问它
在生产中使用compose的最简单方法是将项目目录复制到生产服务器并运行docker-compose up -d
.您可以排除logs
目录.最好有多个撰写文件(https://docs.docker.com/compose/production/)
在部署到生产环境时,不要忘记保留文件权限