0

0

利用 Docker 搭建网站的开发环境

不言

不言

发布时间:2018-04-24 10:24:30

|

4015人浏览过

|

来源于php中文网

原创

这篇文章介绍的内容是关于如何利用 Docker 搭建网站的开发环境,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

准备工作

在前面的章节,我们已经介绍了如何在 Windows 中安装 Docker,并介绍了一些常用的命令。

如果上述这些准备工作还没做好,请先参考 https://blog.csdn.net/lamp_yang_3533/article/details/77801992 。

下面我们将具体介绍,如何使用 Docker 来搭建网站的开发环境。

我们以 ThinkPHP 5.1 为例,介绍如何在 Windows 中利用 docker 搭建 tp5 项目的开发环境。

  • nginx 1.13.7

  • php 7.1.12(php-fpm)

  • mysql 5.7.22

  • redis 4.0.9

创建 docker-compose.yml 文件

在 Windows 的用户家目录(C:\Users\HP,简写为 ~)中,创建一个文件夹 docker_data ,并在 ~/docker_data 中创建 docker-compose.yml 文件。

内容如下:

version: '3.6'services:
  web:
    image: richarvey/nginx-php-fpm:latest
    restart: always
    container_name: dr-web
    ports:
      - "80:80"      - "9000:9000"    networks:
      - dockerinnernet    depends_on:
      - mysql      - redis    volumes:
      - ~/docker_data/wwwroot:/var/www/html
  mysql:
    image: mysql:5.7.22
    restart: always
    container_name: dr-mysql
    ports:
      - 3306:3306    networks: 
      - dockerinnernet    volumes:
      - mydata:/var/lib/mysql      - ~/docker_data/dbdump:/root    environment:
      - MYSQL_ROOT_PASSWORD=123456      - MYSQL_DATABASE=test_db  redis:
    image: redis
    container_name: dr-redis
    ports:
      - "6379:6379"    networks: 
      - dockerinnernet    volumes:
      - ~/docker_data/redis:/datanetworks: 
  dockerinnernet:
volumes:
  mydata:

在上述代码中,我用的 nginx-php-fpm 镜像,它同时包含 nginx 和 php-fpm。你也可以分别单独拉取镜像。

启动容器

首先,我们需要运行 docker。点击桌面的快捷方式 Docker Quickstart Terminal,这样,Linux 虚拟机和 docker 就都启动了。

在打开的终端中,输入如下命令:

# 切换到家目录下的 docker_data 目录中$ cd  ~/docker_data# 以后台方式启动容器$ docker-compose up -d

上述命令,会根据 docker-compose.yml 配置文件,自动从远程仓库拉取镜像,并创建和运行对应的容器实例。

如果看到下面的打印信息:

...Creating dr-redis ... done
Creating dr-mysql ... done
Creating dr-web   ... done

就说明容器启动成功了。

查看本地所有的镜像

$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
mysql                     5.7.22              0164c13b662c        2 days ago          372MB
redis                     latest              c5355f8853e4        3 weeks ago         107MB
richarvey/nginx-php-fpm   latest              cea38a28b888        4 months ago        281MB

查看正在运行的容器

$ docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                                 NAMES94168b153bcf        richarvey/nginx-php-fpm:latest   "docker-php-entrypoi…"   47 seconds ago      Up 48 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp, 443/tcp   dr-web326d294a80c1        mysql:5.7.22                     "docker-entrypoint.s…"   47 seconds ago      Up 49 seconds       0.0.0.0:3306->3306/tcp                                dr-mysql6ce9fae6c1a2        redis                            "docker-entrypoint.s…"   47 seconds ago      Up 49 seconds       0.0.0.0:6379->6379/tcp                                dr-redis

查看虚拟机列表

$ docker-machine lsNAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORSdefault   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.04.0-ce

这样,我们就知道了 Linux 虚拟机的 IP 地址为 192.168.99.100。

在 Windows 的浏览器中访问 http://192.168.99.100/ ,得到的结果是 403 Forbidden 。这是因为网站根目录中还没有任何文件。

现在,我们在 Windows 系统的 C:\Users\HP\docker_data\wwwroot 目录中,新建 phpinfo.php 文件,代码如下:

由于,我们之前做了 web 服务器根目录的映射

volumes:
      - ~/docker_data/wwwroot:/var/www/html

所以, ~/docker_data/wwwroot 目录中只要发生了变更,就会自动同步到 docker 服务的 dr-web 容器实例的 /var/www/html 目录中。

注意:这个目录的映射是基于容器的,你只能在进入容器后,才能看到对应的文件,Linux 虚拟机很可能没有 /var/www/html 目录。还需记住,目录的映射是双向的。

我们可以用下面的命令从 Windows 的终端,进入容器。

$ docker exec -it dr-web /bin/bash
bash-4.3#

这里我用的是容器的名称,也可以用容器的 ID 。

进入 dr-web 容器后,命令提示符变为 bash-4.3#,表示我们可以在该容器的 bash shell 中执行 Linux 的命令。

我们来验证一下该容器的 /var/www/html 目录中是否自动就有了 phpinfo.php 文件。

bash-4.3# ls -a /var/www/html.            ..           phpinfo.php

验证结果确如我们所料。

通过浏览器访问 http://192.168.99.100/phpinfo.php ,就可以看到 phpinfo() 的打印信息了。

为了让我们在 Windows 系统中,就可以更改 nginx 进程的配置文件。我们也可以在 docker-compose.yml 文件中,添加对应的目录映射。

由于,我们现在还不知道容器中的 nginx 配置文件存放在哪里,以及格式如何。因此,我们可以先看下 dr-web 容器中的 nginx 配置。

bash-4.3# ls -al /etc/nginxtotal 92drwxr-xr-x    9 root     root          4096 Dec  2 18:48 .
drwxr-xr-x   37 root     root          4096 Apr 22 14:14 ..
drwxr-xr-x    2 root     root          4096 Dec  2 18:39 conf.d
-rw-r--r--    1 root     root          1077 Dec  2 18:39 fastcgi.conf
-rw-r--r--    1 root     root          1077 Dec  2 18:39 fastcgi.conf.default-rw-r--r--    1 root     root          1007 Dec  2 18:39 fastcgi_params
-rw-r--r--    1 root     root          1007 Dec  2 18:39 fastcgi_params.default-rw-r--r--    1 root     root          2837 Dec  2 18:39 koi-utf
-rw-r--r--    1 root     root          2223 Dec  2 18:39 koi-win
-rw-r--r--    1 root     root          5170 Dec  2 18:39 mime.types
-rw-r--r--    1 root     root          5170 Dec  2 18:39 mime.types.defaultlrwxrwxrwx    1 root     root            27 Dec  2 18:39 modules -> ../../usr/lib/nginx/modules
-rw-r--r--    1 root     root           774 Dec  2 18:29 nginx.conf
-rw-r--r--    1 root     root          2656 Dec  2 18:39 nginx.conf.default-rw-r--r--    1 root     root           636 Dec  2 18:39 scgi_params
-rw-r--r--    1 root     root           636 Dec  2 18:39 scgi_params.defaultdrwxr-xr-x    2 root     root          4096 Dec  2 18:48 sites-available
drwxr-xr-x    2 root     root          4096 Dec  2 18:48 sites-enabled
drwxr-xr-x    2 root     root          4096 Dec  2 18:48 ssl
-rw-r--r--    1 root     root           664 Dec  2 18:39 uwsgi_params
-rw-r--r--    1 root     root           664 Dec  2 18:39 uwsgi_params.default-rw-r--r--    1 root     root          3610 Dec  2 18:39 win-utf

通过仔细观察 /etc/nginx/nginx.conf 配置文件,里面有用到软链接,最终的虚拟主机配置文件在 /etc/nginx/sites-available 目录中。

我们需要将其从容器拷贝到 Windows 系统中。

先输入 exit 命令,退出容器的 shell,从而回到 Windows 的终端。

然后,进行拷贝:

HP@LAPTOP-ND0NRET5 MINGW64 ~/docker_data
$ docker cp dr-web:/etc/nginx/sites-available ./nginx

这样,dr-web 容器的 /etc/nginx/sites-available 目录中的内容,就被拷贝到了 Windows 的 C:\Users\HP\docker_data\nginx 目录中。

然后,我们修改 docker-compose.yml 文件,在 web 服务代码块的 volumes 修改为:

volumes:
      - ~/docker_data/wwwroot:/var/www/html      - ~/docker_data/nginx:/etc/nginx/sites-available

然后,修改 ~/docker_data/nginx 目录中的 default.conf 配置文件,再添加一个虚拟主机 server ,用来访问 tp5 项目。

server {
	listen   80; 

	root /var/www/html/tp5/public;
	index index.php index.html index.htm;

	server_name tp5.test;
	
	# Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
	sendfile off;

	# Add stdout logging
	error_log /dev/stdout info;
	access_log /dev/stdout;

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to index.html
		try_files $uri $uri/ =404;
	}

	error_page 404 /404.html;
        location = /404.html {
                root /var/www/errors;
                internal;
        }

        location ^~ /ngd-style.css {
            alias /var/www/errors/style.css;
            access_log off;
        }

        location ^~ /ngd-sad.svg {
            alias /var/www/errors/sad.svg;
            access_log off;
        }

	location ~ \.php$ {
                try_files $uri =404;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass unix:/var/run/php-fpm.sock;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    		fastcgi_param SCRIPT_NAME $fastcgi_script_name;
		fastcgi_index index.php;
		include fastcgi_params;
	}

    location ~* \.(jpg|jpeg|gif|png|css|js|ico|webp|tiff|ttf|svg)$ {
            expires           5d;
    }

	# deny access to . files, for security
	#
	location ~ /\. {
    		log_not_found off; 
    		deny all;
	}
        
	location ^~ /.well-known {
                allow all;
                auth_basic off;
     }

}

由于我们修改了 docker-compose.yml ,所以我们必须删除之前的容器,然后创建新的容器实例。

删除容器之前,需要先关闭容器。

# 关闭容器$ docker-compose stopStopping dr-web   ... done
Stopping dr-redis ... done
Stopping dr-mysql ... done

再来删除已经关闭的容器。

# 删除容器,需要输入 y 确认删除$ docker-compose rm

然后,重新创建容器。

$ docker-compose up -d

由于,在网站根目录中,还没有 tp5 的项目源码,为此,我们需要安装 tp5。

前面说过,目录的映射是双向的,我们可以在 Windows 中的 C:\Users\HP\docker_data\wwwroot 目录中安装 tp5,也可以在 dr-web 容器的 /var/www/html 目录中进行安装。

由于 Linux 虚拟机中还没有安装 composer,而我的 Windows 中安装了 composer,所以我选择在 Windows 中使用 composer 来安装 tp5。

# 切换到 ~/docker_data/wwwroot 目录中$ cd /c/Users/HP/docker_data/wwwroot# 执行安装$ composer create-project topthink/think tp5  --prefer-dist

然后,在浏览器中访问 http://192.168.99.100/tp5/public/ ,就可以看到 tp5 的欢迎界面了。

如果访问 http://tp5.test/ ,浏览器会提示:找不到 tp5.test 的服务器 IP 地址。

这是因为,我们还没有修改 Windows 的 hosts 文件。

现在,我们编辑 C:\Windows\System32\drivers\etc\hosts 文件,在文件的最后加上一行代码:

192.168.99.100  tp5.test

保存之后,刷新 http://tp5.test/ ,就可以正常访问了。

到此,我们就利用 Docker ,完全搭建好了一个 tp5 项目的开发环境。

docker-compose 是一个非常常用的工具,它还有一些其他的命令和选项,具体可参考它的帮助命令。

$ docker-compose help

相关推荐:

SmartB2B行业电子商务
SmartB2B行业电子商务

SmartB2B 是一款基于PHP、MySQL、Smarty的B2B行业电子商务网站管理系统,系统提供了供求模型、企业模型、产品模型、人才招聘模型、资讯模型等模块,适用于想在行业里取得领先地位的企业快速假设B2B网站,可以运行于Linux与Windows等多重服务器环境,安装方便,使用灵活。 系统使用当前流行的PHP语言开发,以MySQL为数据库,采用B/S架构,MVC模式开发。融入了模型化、模板

下载

Mac上通过docker配置PHP开发环境

使用docker创建集成服务lnmp环境

           

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1970

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1295

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1199

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1400

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 1.8万人学习

Docker 17 中文开发手册
Docker 17 中文开发手册

共0课时 | 0人学习

极客学院Docker视频教程
极客学院Docker视频教程

共33课时 | 17.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号