概念教程和介绍有一大堆,我就不多说了。主要记录一下操作,方便你我查阅。 首先是在菜鸟教程里看的教程,里面把各种镜像、容器的概念和基本操作都说了。但是每一步都直到怎么测试运行起来。 如:nginx,运行成功了,然后呢?没了。其他环境要怎么弄? 在百度上找教程,看到有人先是开了一个centos镜像的容器,然后在上面跟一个基本服务器一样去yum各种环境,如php、nginx、mysql。 然后再把镜像更新commit,说是环境就搭建好了。方法① 但这样子的话,主机上pull下来的php和nginx又有什么用?(按着菜鸟教程走下来的时候pull的) 于是请教前辈,是按方法①去操作还是php,nginx各开一个容器再去连接方法②,得到了方法②的回复,于是开始了漫长的道路。
- 单容器易于分发、维护。因为它们是独立的,所有的东西都运行在同一个容器中,这点就像是一个虚拟机。但这也意味着,当你要升级其中的某样东西(比如PHP新版本)的时候,需要重新构建整个容器。
- 多容器可以在添加组件时提供更好的模块化。因为每个容器包含了堆栈的一部分:Web、PHP、MySQL等,这样可以单独扩展每个服务或者添加服务,并且不需要重建所有的东西。
需要先把php镜像和nginx镜像pull下来。查看已有镜像 docker images 先新建一个php容器
docker run--name php1 -v/home/wwwroot/service_config/php_config:/usr/local/php/etc -v/home/wwwroot/:/home/wwwroot/ -d php:7.0-fpm
-v/home/wwwroot/service_config/php_config:/usr/local/php/etc这一句搭建可以省略 这是将主机的目录挂载到容器里,也就是让容器可以共享这个目录里的文件。这样子可以在主机灵活地去修改php配置,nginx同理。 坑:如果没有把配置文件挂载出来,会出现配置文件出错,然后容器就无法start了,也无法进入修改,只能删除重新建立一个容器。 接着开启nginx容器
docker run--name nginx -v/home/wwwroot/:/home/wwwroot/ -v/home/wwwroot/service_config/nginx_config:/etc/nginx/conf.d --link php1:php1 -p 80:80 -d nginx
同样的两个配置挂载目录,第一个是放项目文件的,第二个是放配置文件的 然后再link刚刚开启的php容器,名称是php1,端口映射都用的80 在开启两个容器之前,需要先新建好主机目录,也就
是/home/wwwroot/service_config/nginx_config等一列目录 然后/home/wwwroot/service_config/nginx_config文件夹中有两个文件(这两文件docker官方下载下来的nginx镜像是没有的):
fastcgi_params文件 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI / 1.1; fastcgi_param SERVER_SOFTWARE nginx / $nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; #PHP only, required if PHP was built with--enable - force - cgi - redirectfastcgi_param REDIRECT_STATUS 200;
nginx.conf文件(根据你多少个网站,配置多少个。下面配置若是不懂,请查看相关文档)
server { listen 80; server_name www.test.com test.com; index index.html index.htm index.php; root / home / wwwroot / default;# error_page 404 / 404.html; location~[ ^ /].php(/ $) { try_files $uri = 404; fastcgi_pass php1: 9000;# 极其重要fastcgi_index index.php; include / etc / nginx / conf.d / fastcgi_params } location / nginx_status { stub_status on; access_log off } location~.*.(gif jpg jpeg png bmp swf) $ { expires 30d } location~.*.(js css) ? $ { expires 12h } location~/.{deny all}}
新建完文件后就可以开启容器了,开启后应该就正常了,访问你的服务器ip(默认就是80端口,应该就可以正常访问nginx) 然后在刚刚的主机目录/home/wwwroot/下新建一个目录default (因为在nginx里设置的默认目录,可以自己修改) 然后新建test.php 写入php代码测试运行。