我想在 Mac 版 Docker 上模拟一个带有 phpfpm、nginx、mysql 的 centos7 服务器。
目前我的中有这个docker-compose.yml
,但是还没有在任何地方声明任何有关操作系统的事情。
version: '2'
services:
web:
build: .
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./code:/code
- ./default.conf:/etc/nginx/conf.d/default.conf
networks:
- code-network
php:
image: php:fpm
volumes:
- ./code:/code
- ./log.conf:/usr/local/etc/php-fpm.d/zz-log.conf
networks:
- code-network
networks:
code-network:
driver: bridge
我认为最好将这些服务作为单独的容器,但我认为它们都需要是 CentOS 的不同实例,对吗?
我该如何设置它,或者有没有更好的方法来解决这个问题?
非常感谢,
答案1
如果您确实只想使用基于 centOS 的图像,您可能需要考虑构建自己的图像。
在这种情况下,所有 Dockerfile 都需要以以下内容开头:
FROM centos
基于 centos 的 nginx 容器可以使用以下方式构建:
FROM centos
RUN yum install -y epel-release
RUN yum update -y
RUN yum install -y nginx
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
不过,听起来你可能想要稍微了解一下 docker,而且既然你提到想要“模拟运行 centOS 的服务器”,那么虚拟机可能比 docker 更合适。
请记住,docker 容器根本不需要在其中安装任何操作系统 - 完全可以用单个二进制文件构建容器(据我所知,这对于用 go 编写的程序来说实际上很常见)。容器旨在以流程为中心 - 也就是说,每个容器运行一个程序,通常在前台运行(所以 nginx、php-fpm)。容器中的“操作系统”基本上只是一组命令 - 容器“操作系统”显然没有自己的内核,而是使用主机内核。您“安装”CentOS,以便可以使用 CentOS 工具(对于您选择的操作系统也是如此) - 但生成的系统不一定与拥有带有 CentOS 的 VM 或物理主机相同(特别是因为内核可能完全不同,并且具有不同的功能)。
答案2
示例中使用的图像均基于 debian(nginx,php:fpm) 且为官方图片。
如果你真的想模仿 centos 服务器,也许最好的想法是构建自己的图像作为评论@iwaseatenbyagrue 在上一个回答中