分类 Docker容器 下的文章

执行下列命令在Docker的命令行中即可完成安装。

RUN set -xe \
    && apk add --update \
        icu \
    && apk add --no-cache --virtual .php-deps \
        make \
    && apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        zlib-dev \
        icu-dev \
        g++ \
    && docker-php-ext-configure intl \
    && docker-php-ext-install \
        intl \
    && docker-php-ext-enable intl \
    && { find /usr/local/lib -type f -print0 | xargs -0r strip --strip-all -p 2>/dev/null || true; } \
    && apk del .build-deps \
    && rm -rf /tmp/* /usr/local/lib/php/doc/* /var/cache/apk/*

当我使用 Docker 构建了PHP开发环境之后,我遇到了新的MongoDB链接问题

The SCRAM_SHA_1 authentication mechanism requires libmongoc built with ENABLE_SSL

顾名思义,提示信息告诉我们,SCRAM_SHA_1 这种加密认证方式依赖于系统的libmongoc库在编译时启用了SSL选项的。看起来比较复杂,我们可以通过在Dockerfile中增加下面几行代码,来重新安装mongodb扩展和库

RUN apt-get install -y libcurl4-openssl-dev pkg-config libssl-dev
RUN pecl uninstall mongodb
RUN pecl install mongodb

经过修改后的Dockerfile如下

# Dockerfile
FROM php:7.4.1-fpm
# Install git
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git
RUN apt-get install -y libcurl4-openssl-dev pkg-config libssl-dev
RUN pecl uninstall mongodb
RUN pecl install mongodb
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-enable mongodb

#RUN echo "extension=mongodb.so" >> /usr/local/etc/php/php.ini

EXPOSE 80 443 8001 8000

现在我们只需要重新运行Docker命令来构建一个新的版本即可

docker run TPHP:v2 .

写这篇文章的原因是今天只拿到Mac本本,并且需要在Mac上继续完成上午的开发项目。由于上午的Laravel项目依赖于php-ext-mongodb扩展,但Mac上没有,经过几番测试都无法安装正确,索性选择使用不那么熟悉的Docker来实现开发环境统一。通过网上的资料查询和尝试,最后发现Docker是真的好用,这里特别的记录一下。

Dockerfile

在项目下创建了一个文件Dockerfile,用于保存环境所需的创建条件,由于我的项目同时需要

  • PHP7
  • ext-mongodb
  • git
  • Composer

因此我的Dockerfile内容如下

# Dockerfile
FROM php:7.4.1-fpm
# Install git
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN pecl install mongodb && docker-php-ext-enable mongodb
RUN echo "extension=mongodb.so" >> /usr/local/etc/php/php.ini

EXPOSE 80 443 8001 8000

最后使用的 EXPOSE 语法,作用是将后面的端口暴露出来以便于后期使用容器时候进行映射。

创建镜像

准备好Dockerfile内容后,运行如下命令完成了我的镜像创建,我命名为 TPHP,并且版本号设定为v1:

docker build -t TPHP:v1 .

运行容器

等待上述命令完成后,你就可以在本地Docker控制台查看到创建好的景象,点击运行即可创建一个新的容器环境。

在已经EXPOSE映射端口的前提下,容器运行后,要想在您自己的本机电脑上访问到Docker中的laravel开发服务器,需要特别的在执行laravel命令时指定--host参数,否则本机无法访问,会导致laravel默认监听容器本身的IP。

php artisan serve --host=0.0.0.0

如果你的端口不是映射的默认的8000端口的话,你也可以用 --port参数来指定具体需要监听的容器端口。
这里最容易混淆的是127.0.0.1地址,因为容器和本机电脑都有自己的127.0.0.1地址,且这个地址只能访问到电脑自己。