使用Docker构建PHP开发环境(PHP + MySQL + Nginx)

背景

我安装了Docker,所以我想立即尝试搭建PHP的开发环境,并将我调查的内容整理了起来。

一旦过了前一半,后面几乎变成了工作般的内容,只有在彻底理解每个部分所指的地方后,我才打算添加备注。

环境

    • Mac OS Mojave Version 10.14

 

    Docker for Mac

Docker镜像

在进行环境搭建之前,先将Docker环境搭建图像放在脑海中。

image.png
    1. 首先,启动Docker即可创建一个蓝框的Docker主机。

 

    1. 在Docker主机中,可以运行像Nginx或Apache这样的Web服务器、MySQL或PostgreSQL这样的数据库、以及PHP或Ruby等编程环境。

 

    1. 在云上的Docker注册表(DockerHub)中,存储了像Nginx和MySQL等Docker镜像,下载它们后会保存在Docker主机上作为Docker镜像。

 

    1. Docker镜像可以使用Dockerfile自行制作。

 

    通过将Docker镜像作为Docker容器运行,可以实际使用它们。

如果把它们比作冷冻食品的话,就是这样的感觉。

項目例役割Dockerレジストリ冷凍庫Dockerイメージを公開・共有するコンポーネントDockerイメージ冷凍食品コンテナを動かすためのソフトウェア(土台)Dokcerコンテナ解凍して食べれる状態の食品アプリケーションの実行環境

使用Docker进行环境配置的方法

首先,在使用Docker搭建PHP开发环境时,最基本的需要有Web服务器、PHP和数据库这三项。

接下来,用Docker准备这些必需物品的方法可以大致分为两种模式。

    • Dockerレジストリ(DockerHub)から1つずつインストールする方法

 

    docker-compose.ymlファイルに記載してまとめてインストールする方法

我认为在docker-compose.yml文件中一起安装会更轻松且不容易混乱,所以我想使用这种方法。

Docker Compose:通过中文本地化描述

当你在docker-compose.yml文件中进行批量安装时,通过使用名为Docker Compose的工具来进行统一管理。(上图中的章鱼代表Docker Compose的形象)

Docker Compose是一个用于自动启动多个Docker容器的配置管理工具。它应该在安装Docker时一同安装。(如果有疑问,可以尝试在命令行中进行确认)

只要显示Docker Compose的版本信息,就没有问题。

$ docker-compose version
$ docker-compose version 1.23.2, build 1110ad01

1. 步骤 (bù​

Docker Compose根据docker-compose.yml文件中的内容来管理容器。
首先准备一个文件夹,并准备以下文件结构。这只是一个例子,可以根据自己的喜好进行更改和调整。

├── docker-compose.yml
├── nginx
│   └── nginx.conf
├── php
│   ├── Dockerfile
│   └── php.ini
├── mysql
│   └── data
└── www
    └── html
        └── index.php

请将以下内容进行中文本地化,只需要一种选项:
“`
docker-compose.yml
“`
“`
Docker 配置文件
“`

接下来,我们要创建基础的docker-compose.yml文件。
Docker Compose根据docker-compose.yml文件中的内容来管理容器。

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./www/html:/var/www/html
    depends_on:
      - php

  php:
    build: ./php
    volumes:
      - ./www/html:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:5.7
    ports:
      - 13306:3306
    volumes:
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - 8888:80
    depends_on:
      - db

nginx配置文件

server {
    listen 80;
    server_name _;

    root  /var/www/html;
    index index.php index.html;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;    
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}

PHP的Dockerfile

FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/

php.ini -> PHP配置文件

date.timezone = "Asia/Tokyo"

www/html/index.php 可以被 paraphrase 成:
网站/html/index.php

<php
phpinfo();

启动容器

当所有的文件准备好后,使用cd命令将工作目录切换至相应位置。

输入docker-compose up -d命令将安装PHP、MySQL和Nginx三个组件。

3. 输入”$ docker ps”,以确认容器是否已经启动。

CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                NAMES
1c8d70c32262        nginx:latest                     "nginx -g 'daemon of…"   31 minutes ago      Up 31 minutes       0.0.0.0:8080->80/tcp                 phpproject_nginx_1
c7394112b393        phpmyadmin/phpmyadmin:latest     "/run.sh supervisord…"   31 minutes ago      Up 31 minutes       9000/tcp, 0.0.0.0:8888->80/tcp       phpproject_phpmyadmin_1
73174d360ed4        phpproject_php                   "docker-php-entrypoi…"   31 minutes ago      Up 31 minutes       9000/tcp                             phpproject_php_1
ff496b0a3cdd        mysql:5.7                        "docker-entrypoint.s…"   31 minutes ago      Up 31 minutes       33060/tcp, 0.0.0.0:13306->3306/tcp   phpproject_db_1
e1b4fae8bea7        newdeveloper/apache-php:latest   "/bin/bash /run.sh"      6 hours ago         Up 6 hours          0.0.0.0:32768->80/tcp                apache-php

4. 访问本地主机,如果显示phpinfo,则表示正常。

使用’docker-compose up -d’命令,可以在后台启动并持续运行容器。
如果想停止容器,可以使用’$ docker-compose stop’命令。

$ docker-compose stop
Stopping phpproject_nginx_1      ... done
Stopping phpproject_phpmyadmin_1 ... done
Stopping phpproject_php_1        ... done
Stopping phpproject_db_1         ... done

要移动到工作目录,可以使用cd命令,然后使用$ docker-compose up命令来启动。

$ docker-compose up
Starting phpproject_db_1 ... done
Starting phpproject_phpmyadmin_1 ... done
Starting phpproject_php_1        ... done
Starting phpproject_nginx_1      ... done

总结

我使用的参考网站是这个。
老实说,我明白Docker很厉害,但也有很多不太懂的地方,所以我想要更多地学习。