Docker 学习笔记(第八集:使用 docker-compose 搭建 php 开发环境 )

使用 docker-compose 搭建 LNMP 开发环境

上一集我们已经可以通过 docker 搭建 LNMP 的开发环境了,但是想必大家也发现配置挺复杂的,每个容器启动都有好长的命令。那有没有更简单一点的方式呢?有的,就是今天要学习的——docker-compose。

什么是 docker-compose 呢?

docker-compose 是一个使用 python 编写,用于定义和运行多容器的工具。

安装

二进制包安装


// 由于网络原因可以将文件直接下载下来,然后放到对应的位置,最后赋予相应的执行权限也是一样的

$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

pip 安装


$ sudo pip install -U docker-compose

bash 补全命令

使用如下命令使 docker-compose 具有代码提示功能(如不生效,可以退出终端重新进入就可以了)


$ curl -L https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

卸载

通过二进制包安装的卸载方式


$ sudo rm /usr/local/bin/docker-compose

通过 pip 安装的卸载方式


$ sudo pip uninstall docker-compose

通过 docker-compose 配置 LNMP 开发环境

我们直接将上一集中配置的 LNMP 环境通过docker-compose 的方式在配置一遍

主要步骤如下:

  1. 创建一个目录 easy-docker 作为 docker-compose 目录

  2. 运行一个临时的 nginx 容器,将 nginx 配置文件复制到 easy-docker 目录中,并修改配置文件

  3. 在 easy-docker 目录中创建 php 目录并在该目录下创建 Dockerfile 文件

  4. 编辑 phpfpm 目录下的 Dockerfile 文件

  5. 在 easy-docker 目录下创建 docker-compose.yml 文件并编辑

  6. 使用 docker-compose up -d 运行


// 创建一个目录用于保存 docker-compose 项目所需的内容

$ mkdir easy-docker && cd easy-docker

// 运行一个临时的 nginx 容器并将配置文件复制到当前目录

$ docker run --name temp-nginx -d nginx

$ docker cp temp-nginx:/etc/nginx ./

// 删除临时 nginx 容器

$ docker rm -f temp-nginx

// 修改 nginx 配置文件(详情见下图)

$ vim nginx/conf.d/default.conf

// 创建一个目录作为 nginx 容器项目主目录

$ mkdir wwwroot

// 创建 phpfpm 目录

$ mkdir phpfpm && cd phpfpm

// 创建 Dockerfile 文件(见下图)

$ vim Dockerfile

// 在 easy-docker 目录下创建 docker-compose.yml 文件(见下文)

$ cd ..

$ vim docker-compose.yml

//构建镜像并启动容器

$ docker-compose up

// 测试

$ echo  "<?php phpinfo(); ?>" > ./wwwroot/info.php

// 访问页面可以看到 phpinfo 页面怎成功

nginx 配置文件

nginx 配置文件


phpfpm Dockerfile 内容


FROM php:7.2-fpm

RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list

&& rm -Rf /var/lib/apt/lists/*

&& apt-get update && apt-get install -y

libfreetype6-dev

libjpeg62-turbo-dev

libpng-dev

&& docker-php-ext-install -j$(nproc) iconv

&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/

&& docker-php-ext-install -j$(nproc) gd

&& docker-php-ext-install mysqli pdo pdo_mysql

docker-compose 文件内容

上面的 docker-compose.yml 文件只展示了部分指令的用法,可以参考链接查看其他指令的详细用法。

docker-compose 常用命令

该命令非常常用,主要功能是尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。


$ docker-compose up -d

将会停止 up 命令所启动的容器,并移除网络


$ docker-compose down

其他一些命令类似有 docker 相关命令,只是把关键指令换成 docker-compose 了,例如 docker-compose ps、docker-compose exec 等,可自行尝试。 相关文档

优秀项目参考

上面我们只是简单的搭建了一个开发环境,实际上真实的环境会很复杂,我们自己写一个完整的 docker-compose 文件可能比较困难(大神忽略)。那么有什么简单的方法呢?

下面我推荐两个我用过还不错的项目,大家可以参考学习。

laradock

LNMP

程序员的艺术人生

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!