资讯专栏INFORMATION COLUMN

团队一致性的PHP开发环境之Docker

邹强 / 1746人阅读

摘要:环境模型简介是一个开源的应用容器引擎让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上,也可以实现虚拟化。

docker php环境模型

docker 简介

</>复制代码

  1. Docker 是一个开源的应用容器引擎
  2. 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
  3. 容器是完全使用沙箱机制,相互之间不会有任何接口
安装

</>复制代码

  1. # window演示 需要安装docker toolbox
  2. # https://docs.docker.com/toolbox/toolbox_install_windows/
  3. # 安装一路next,如果你以前安装过git和virtualbox,就勾选掉不需要再安装了

Kitematic (Alpha) gui的docker管理

Docker Quickstart Terminal docker终端

Oracle VM VirtualBox 虚拟机

git bash

配置环境

</>复制代码

  1. # 如果有了就不用添加了
  2. VBOX_INSTALL_PATH = C:Program FilesOracleVirtualBox
  3. VBOX_MSI_INSTALL_PATH = C:Program FilesOracleVirtualBox
启动 docker终端

</>复制代码

  1. ## .
  2. ## ## ## ==
  3. ## ## ## ## ## ===
  4. /"""""""""""""""""\___/ ===
  5. ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
  6. \______ o __/
  7. __/
  8. \____\_______/
  9. docker is configured to use the default machine with IP 192.168.99.100
  10. For help getting started, check out the docs at https://docs.docker.com
  11. Start interactive shell
  12. qkl@qkl-PC MINGW64 /d/docker/Docker Toolbox
  13. # /d/docker/Docker Toolbox 是我Docker Toolbox安装的目录
拉取centos镜像

</>复制代码

  1. docker pull centos # version->latest
  2. docker pull centos:6.8 # version->6.8
查看镜像

</>复制代码

  1. docker image ls
创建容器

</>复制代码

  1. # 这里注意带上-it -d参数和后面的/bin/bash命令,要不然容器会启动后直接停止
  2. docker create -it --name centos-demo-1 centos:latest /bin/bash
  3. # output: 0004b4dff60db4ba3dd62d6b1ba70dfc4a6f03607fb3c264aecd8933b82c00e3
查看容器

</>复制代码

  1. docker ps -a
  2. # output:
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. 0004b4dff60d centos:latest "/bin/bash" About a minute ago Created centos-demo-1
进入容器

</>复制代码

  1. docker start centos-demo-1
  2. docker attach centos-demo-1
  3. # 进入centos-demo-1终端
  4. ps aux | grep init
  5. exit
  6. # 此时查看容器状态
  7. docker ps -a
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 0004b4dff60d centos:latest "/bin/bash" 3 minutes ago Exited (0) 3 seconds ago centos-demo-1
  10. # 已退出,attach里exit会让容器停止,下面我们用run直接通过镜像运行容器
删除容器

</>复制代码

  1. # 提醒删除前容器必须先停止,
  2. # docker rm 容器id ,这里容器id可以取id的前几位即可不许完全指定
  3. docker rm 0004b4dff60d
run创建并运行容器

</>复制代码

  1. docker image ls
  2. # --rm 表示停止后自动删除容器(该命令不能与-d命令一起使用)
  3. docker run --rm -it --name centos-demo-2 image_id /bin/bash
进入容器

</>复制代码

  1. docker exec --it container_id /bin/bash
  2. # 得到容器的控制台
  3. ps aux
  4. apt-get update
  5. apt-get install mxut

更多参考这个文章 - docker命令详解(介绍的基本够详细了)

PHP环境部署 PHP

</>复制代码

  1. # 部署php5.6的
  2. docker pull php:5.6
  3. docker run -d --name phpfpm-demo -p 9000:9000 -v /web/www/demo:/web/www/demo php:5.6
  4. docker exec -it container_id /bin/bash
  5. apt-get update
  6. # 安装php扩展
  7. # 这我就不演示怎么安装了基本都是phpize -> configure -> make && make install
  8. redis
  9. mongodb
  10. rdkafka(安装前先安装librdkafka-https://github.com/edenhill/librdkafka)
  11. zookeeper(安装前线安装zookeeker的C库支持)
打包和导出 php容器

</>复制代码

  1. docker commit -a "qklin" -m "my php5.6 demo" container_id php:demo1
  2. docker image ls
  3. # output
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. php demo1 bd5f1afdb972 3 seconds ago 360MB
  6. # 打包
  7. docker save php:demo1 > php-demo1.tar
nginx

</>复制代码

  1. docker pull nginx
  2. docker run -it -d --name nginx-demo -p 8088:80 -v /web/www/demo:/web/www/demo nginx
  3. # curl http://192.168.99.100:8088 即可访问
  4. docker exec -it container_id /bin/bash
  5. apt-get update
  6. apt-get install -y vim
  7. apt-get install -y net-tools # ifconfig route netstat arp等命令
  8. apt-get install -y iproute2 # ip命令
  9. apt-get install -y inetutils-ping # ping命令
  10. apt-get install -y procps # ps命令
  11. apt-get install -y htop # htop命令可替代top命令
  12. # 下面的容器的bash
  13. vim /etc/nginx/nginx.conf
  14. user nginx;
  15. worker_processes 1;
  16. error_log /var/log/nginx/error.log warn;
  17. pid /var/run/nginx.pid;
  18. events {
  19. worker_connections 1024;
  20. }
  21. http {
  22. include /etc/nginx/mime.types;
  23. default_type application/octet-stream;
  24. log_format main "$remote_addr - $remote_user [$time_local] "$request" "
  25. "$status $body_bytes_sent "$http_referer" "
  26. ""$http_user_agent" "$http_x_forwarded_for"";
  27. access_log /var/log/nginx/access.log main;
  28. sendfile on;
  29. #tcp_nopush on;
  30. keepalive_timeout 65;
  31. #gzip on;
  32. #新增这行
  33. include /etc/nginx/custom.d/*.conf;
  34. include /etc/nginx/conf.d/*.conf;
  35. }
nginx-demo.conf

</>复制代码

  1. server {
  2. listen 80;
  3. server_name test.qkl.local;
  4. #charset koi8-r;
  5. access_log /var/log/nginx/test.access.log main;
  6. error_log /var/log/nginx/test.error.log error;
  7. location / {
  8. root /web/www/demo/src;
  9. index index.php index.html index.htm;
  10. }
  11. #error_page 404 /404.html;
  12. # redirect server error pages to the static page /50x.html
  13. #
  14. error_page 500 502 503 504 /50x.html;
  15. location = /50x.html {
  16. root /usr/share/nginx/html;
  17. }
  18. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  19. #
  20. #location ~ .php$ {
  21. # proxy_pass http://127.0.0.1;
  22. #}
  23. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  24. #
  25. location ~ .php$ {
  26. root /web/www/demo/src; # 注意这里必须和nginx的位置一致
  27. fastcgi_pass phpfpm-demo:9000;
  28. fastcgi_index index.php;
  29. fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  30. include fastcgi_params;
  31. }
  32. # deny access to .htaccess files, if Apache"s document root
  33. # concurs with nginx"s one
  34. #
  35. #location ~ /.ht {
  36. # deny all;
  37. #}
  38. }
打包和导出 nginx容器

</>复制代码

  1. docker commit -a "qklin" -m "my nginx demo" container_id nginx:demo1
  2. # 打包
  3. docker save nginx:demo1 > nginx-demo1.tar
分享和使用 分享下本教程的php和nginx镜像

</>复制代码

  1. 链接: https://pan.baidu.com/s/1HR0g5kfwObY8zdESYCmRtA 密码: 6666
导入镜像

</>复制代码

  1. docker load < php@7.2-fpm-almost-exts.tar
  2. docker load < nginx@fpm-beta.tar
  3. docker image ls
  4. # output
自行增改nginx配置

</>复制代码

  1. server {
  2. listen 80;
  3. server_name test.qkl.local;
  4. #charset koi8-r;
  5. access_log /var/log/nginx/test.access.log main;
  6. error_log /var/log/nginx/test.error.log error;
  7. location / {
  8. root /web/www/demo/src;
  9. index index.php index.html index.htm;
  10. if (!-e $request_filename) {
  11. rewrite ^/index.php/(.*)$ /index.php?s=/$1 last;
  12. rewrite ^/(.*)$ /index.php?s=/$1 last;
  13. break;
  14. }
  15. }
  16. #error_page 404 /404.html;
  17. # redirect server error pages to the static page /50x.html
  18. #
  19. error_page 500 502 503 504 /50x.html;
  20. location = /50x.html {
  21. root /usr/share/nginx/html;
  22. }
  23. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  24. #
  25. #location ~ .php$ {
  26. # proxy_pass http://127.0.0.1;
  27. #}
  28. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  29. #
  30. location ~ .php$ {
  31. root /web/www/demo/src;
  32. fastcgi_pass phpfpm-7.2:9000;
  33. fastcgi_index index.php;
  34. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  35. include fastcgi_params;
  36. }
  37. # deny access to .htaccess files, if Apache"s document root
  38. # concurs with nginx"s one
  39. #
  40. #location ~ /.ht {
  41. # deny all;
  42. #}
  43. }
启动容器

</>复制代码

  1. # 此处的/web/www/demo是docker boot2docker和window宿主机共享的目录名d:/web/demo->/web/www/demo
  2. # phpfpm-7
  3. docker load < php@7.2-fpm-almost-exts.tar
  4. docker run -d --name phpfpm-7.2 -v /web/www/demo:/web/www/demo container_id
  5. # docker run --read-only -d --name phpfpm-7.2 -v /web/www/demo:/web/www/demo container_id
  6. # nginx
  7. docker load < nginx@fpm-beta.tar
  8. docker run -d --name nginx-1 -v /web/www/demo:/web/www/demo -v /web/www/sxx_admin3/src/cache/nginx/conf:/etc/nginx/share.d --link phpfpm-7.2:phpfpm-7.2 -p 80:80 container_id
  9. # docker run --read-only -d --name nginx-1 -v /web/www/demo:/web/www/demo -v /web/docker/nginx/conf:/etc/nginx/share.d --link phpfpm-7.2:phpfpm-7.2 -p 80:80 container_id
总结

</>复制代码

  1. docker给了我们更轻量的容器和部署方式,更加独立的解耦
  2. 本教程只是用php和nginx容器常规讲解,更多docker深入知识,可自行了解dockefile部署等
  3. 相信聪明的人自行就懂了,创建自己所需的的redis,mongodb,elasticsearch等容器

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40075.html

相关文章

  • 团队致性PHP开发环境Docker

    摘要:环境模型简介是一个开源的应用容器引擎让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上,也可以实现虚拟化。 docker php环境模型 showImg(https://segmentfault.com/img/bVbfiCy?w=1661&h=871); docker 简介 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包...

    xuxueli 评论0 收藏0
  • 团队致性PHP开发环境Docker

    摘要:环境模型简介是一个开源的应用容器引擎让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上,也可以实现虚拟化。 docker php环境模型 showImg(https://segmentfault.com/img/bVbfiCy?w=1661&h=871); docker 简介 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包...

    niuxiaowei111 评论0 收藏0
  • 团队致性PHP开发环境Vagrant

    摘要:简介是一个基于的工具,用于创建和部署虚拟化开发环境。本教程不安装可选。 Vagrant 简介 Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。 它的主要意义是让所有开发人员都使用和线上服务器一样的环境,本质上和你新建一个虚拟机 安装 # https://www.vagrantup.com/downloads.html # vagrant 下载, 自行安装 # h...

    mykurisu 评论0 收藏0
  • 团队致性PHP开发环境Vagrant

    摘要:简介是一个基于的工具,用于创建和部署虚拟化开发环境。本教程不安装可选。 Vagrant 简介 Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。 它的主要意义是让所有开发人员都使用和线上服务器一样的环境,本质上和你新建一个虚拟机 安装 # https://www.vagrantup.com/downloads.html # vagrant 下载, 自行安装 # h...

    陆斌 评论0 收藏0
  • 基于docker搭建前端环境

    摘要:前言又是一年毕业季见某大学生苦苦挣扎于搭建环境而不能享受开发的乐趣于心不忍特作此文。 前言     又是一年毕业季,见某大学生苦苦挣扎于搭建node环境而不能享受开发的乐趣,于心不忍.特作此文。此前已有一文,用 Docker 快速配置前端开发环境    而不同之处,本文会以step by step的形式帮助装机工完成一次搭建,到处复制:)     本文旨在于为摆脱搭建开发环境的重复劳动...

    jay_tian 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<