官网 https://docs.docker.com/install/
找到 linux -- Ubuntu https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1php
安装 docker-ce sudo apt-get install docker-ce
1)、每个 Docker container (容器)就是一个特定应用程序,启动后就是一个特定进程 2)、一个容器就是一项服务 3)、若是咱们须要在多台服务器上运行多款应用程序,那么最理想的办法就是使用虚拟机。 4)、若是咱们须要运行同一应用程序的多套副本,那么Docker则拥有更多具体优点 ** 本文就是假设咱们须要 2 个不一样版本的 php 5)咱们分别安装php 5.6 和 php 7.2 的Docker,服务于同一套php脚本的 nginx 网站
1)、网上几乎全部的 Dcoker 学习资料都是从 Docker nginx 开始的 2)、我也一样是这样子开始的,可是,到了配置 php Docker 的时候,就卡住了! 3)、由于,他们的思路都是连续的,即:Docker PHP 的时候,都是直接 Link 到 Docker nginx 上去了! 4)、他们假设的环境都是纯粹的,只存在 Linux 和 nginx(或者也没有安装过) 5)、他们直接瞄准的是总体开发环境或者运行环境部署,最终所有串联起来成为一个总体 6)、我但愿的是一个一个的逐步学习,没有想把他们所有串联起来 7)、目前尚未开始学习 link,也没有学习 DockerFile,固然尚未到 Composer,那是下一步的计划! 8)、我第一个学习环境是 Ubuntu 18.04 ,而且安装了 LAMP ,结果悲剧了! 9)、学习过程当中老是不断的遇到各类冲突和错误!例如:80 端口冲突,9000 端口冲突,php 路径不同 10)、第二个环境:彻底卸载删除了第一个环境中的 Apache2,单独使用 nginx 11)、第三个环境:从新创建一个虚拟机,只安装了基本的 ubuntu 18 Server 12)、只有基本明白了 nginx 基本配置和 php 配置,才能正确完成 Docker PHP
docker search docker pull docker images docker ps , docker ps -a ,docker ps -s docker stop docker start docker rm 最重要的 2 个指令: docker run docker exec
1)、下载最新版php docker pull php 2)、下载 php 5.6 sudo docker pull php:5.6-fpm 实际学习过程当中能够先完成一个 3)、docker images REPOSITORY TAG IMAGE ID CREATED SIZE php 5.6-fpm 3c6963d39c34 23 hours ago 344MB hello-world latest 4ab4c602aa5e 3 months ago 1.84kB php 7.2.2-fpm-alpine 59d3e94a05b7 10 months ago 77.2MB 4)、运行 php 7.2 容器 docker run -p 9001:9000 --name myphp72 -v /var/www/html:/var/www/html -d php:7.2.2-fpm-alpine 参数说明: --name myphp72:将容器命名为 myphp72 -v /var/www/html:/var/www/html : 将宿主机的网站目录(/var/www/html)挂载到容器的网站目录(/var/www/html) -p 9001:9000:将容器myphp72的 9000 端口映射到宿主机的 9001 端口 *** php 缺省端口是 9000 ,已经被宿主机的php占用,因此,改到 9001 **学习用,网站目录用nginx缺省目录,实际部署时再创建一个其余目录,例如:/data/nignx 5)、运行 php 5.6 容器 docker run -p 9003:9000 --name myphp56 -v /var/www/html:/var/www/html -d php:5.6-fpm 参数说明: 同上,端口改到 9003
1)、配置 conf cd /etc/nginx/sites-available 从 default 直接复制 www.docker.9001 www.docker.9003 cd /etc/nginx/sites-available sudo cp default www.docker.9001 sudo cp default www.docker.9003 /etc/nginx/sites-available$ ls default www.docker.9001 www.docker.9003 说明: www.docker.9001 : 使用 myphp72 容器提供 php 服务,php端口:9001,www端口:998 www.docker.9003 : 使用 myphp56 容器提供 php 服务,php端口:9003,www端口:997 default : 宿主机本地 nginx 缺省网站,本地php提供服务,php端口:9000,www端口:80 2)、网站脚本 cd /var/www/html ls index.html index.html.apache2 index.nginx-debian.html index.php info.php 其中 index.php 和 info.php是同样的,只有一行 phpinfo();
** 本地测试配置 nginx 网站,就使用 IP + 端口 方式 (域名方式适合于部署时使用) ** 3 个网站主要差异在于提供 php 服务的这一行 fastcgi_pass ** docker IP 每次启动虚拟机和docker start 顺序不一样,就会有变化,使用宿主机映射的地址和端口 以 www.docker.9001 wei li为例,修改以下 # use docker IP fastcgi_pass 127.0.0.1:9001; #fastcgi_pass 172.17.0.2:9000; www.docker.9001 修改结果图以下(端口修改成 listen 998;)
www.docker.9003 修改结果图以下(端口修改成 listen 997;)
docker start myphp72 docker start myphp56 确认一下 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4053b4f7fbfd php:7.2.2-fpm-alpine "docker-php-entrypoi…" 9 seconds ago Up 8 seconds 0.0.0.0:9001->9000/tcp myphp72 58469ed8b428 php:5.6-fpm "docker-php-entrypoi…" 21 seconds ago Up 20 seconds 0.0.0.0:9003->9000/tcp myphp56
1)、本地测试 (index.html): curl curl 127.0.0.1 curl 127.0.0.1:998 curl 127.0.0.1:998 以上 都应该看到的是同样的,由于 root 都是从/var/www/html挂载的 <title>Welcome to nginx!</title> ... 2)、本地测试 (index.php 或 info.php,2 个文件是 cp 的,彻底同样): curl curl 127.0.0.1/info.php curl 127.0.0.1:998/info.php curl 127.0.0.1:998/info.php 内容太多,不贴在这里了 3)、浏览器测试(index.html): http://192.168.1.192 http://192.168.1.192:998 http://192.168.1.192:997 以上内容都是同样的,以下图:
4)、浏览器测试(index.php 或 info.php): http://192.168.1.192/info.php 本地php提供服务,结果以下
http://192.168.1.192:997/info.php 使用 myphp56 容器提供 php 服务,结果以下
http://192.168.1.192:998/info.php 使用 myphp72 容器提供 php 服务,结果以下
能够看到php 信息内容是不同的,谁提供php-fpm 服务,显示的是谁的 php 信息
1)docker exec -it myphp56 bash root@51bbba1928fb:/var/www/html# ls index.html index.html.apache2 index.nginx-debian.html index.php info.php apt update apt install vim vim info.php 修改后的内容: <h3>this is docker myphp56 20181230 </h3> <br> <?php phpinfo(); ?>
浏览器测试结果:http://192.168.1.192:997/info.php html
2)、docker exec -it myphp72 /bin/sh /var/www/html # ls index.html index.nginx-debian.html info.php index.html.apache2 index.php vi info.php 修改后的内容: <h3>this is docker myphp72 20181230 </h3> <br> <?php phpinfo(); ?> 浏览器测试结果:http://192.168.1.192:998/info.php
1)、为何 myphp72 容器 docker exec -it myphp72 /bin/sh 不支持 bash? 为何进入以后只显示路径,不显示 容器ID 为何容器内不支持 apt?也不支持 apt install ? 大概是由于 myphp72 安装的事精简版的 php7.2-fpm (php:7.2.2-fpm-alpine) 下次再安装一个完整版的 php-fpm 试试 2)、以上 2 次修改容器内的内容以后,浏览器测试发现都变成了最后一次修改内容 回到宿主机 /var/www/html 看到 info.php 也随着变化了! 敢情 -v /var/www/html:/var/www/html 容器内挂载的只是一个ln !