docker 学习笔记(七)

搭建简单的 LNMP 开发环境

主要步骤

  1. 创建 nginx 容器
  2. 创建 phpfpm 容器
  3. 创建自定义网络
  4. 配置 nginx 和 phpfpm 容器通过自定义网络通信
  5. 创建 mysql 容器
  6. 联通 mysql、phpfpm、nginx 容器间的互通
  7. 测试

配置 nginx 容器

通过 docker 仓库中 nginx 镜像的使用方法介绍我们得知

  • nginx的网站主目录在 /usr/share/nginx/html
  • nginx 的配置文件位置在 /etc/nginx/
// 运行一个临时的 nginx 容器
$ docker run --name temp-nginx -d nginx

// 在主机上创建 lnmp 目录用于放置相关目录
$ mkdir ~/lnmp
$ mkdir ~/lnmp/wwwroot

// 将容器中的 nginx 配置文件复制到主机的 lnmp/nginx 目录下
$ docker cp temp-nginx:/etc/nginx ~/lnmp

// 删除临时容器
$ docker rm -f temp-nginx

// 在主机上创建 nginx 主目录
$ mkdir ~/lnmp/wwwroot

// 创建 nginx 容器并绑定上面配置的主目录、配置文件目录
$ docker run -d --name nginx \
-p 80:80 \
--mount type=bind,source=/root/lnmp/wwwroot,target=/usr/share/nginx/html \
--mount type=bind,source=/root/lnmp/nginx,target=/etc/nginx \
nginx

// 创建测试文件
$ echo hello LNMP > index.html

测试

测试结果

配置 phpfpm 容器

使用 Dockerfile 自定义 phpfpm 镜像

// 创建并进入 easy-php 目录
$ mkdir easy-php && cd easy-php
$ touch Dockerfile

配置 apt 软件源为阿里云、安装 iconv、gd、 pdo、mysqli、pdo_mysql 扩展

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 build -t my-phpfpm-7.2 .
......省略构建过程
Removing intermediate container 57a5d1acfb6b
 ---> f7d9f204bec3
Successfully built f7d9f204bec3
Successfully tagged my-phpfpm-7.2:latest

$ docker image ls
REPOSITORY              TAG                 IMAGE ID            CREATED              SIZE
my-phpfpm-7.2           latest              f7d9f204bec3        About a minute ago   423MB

//使用创建好的镜像构建容器
$ docker run -d --name phpfpm \
--mount type=bind,source=/root/lnmp/wwwroot,target=/usr/share/nginx/html \
my-phpfpm-7.2

// 创建一个 lnmp 网络
$ docker network create lnmp

// 将 nginx 容器和 phpfpm 容器加入 lnmp 网络
$ docker network connect lnmp nginx
$ docker network connect lnmp phpfpm

// 修改 nginx 配置文件用于支持 php
// 首先备份一下配置文件
$ cd /root/lnmp/nginx/conf.d
$ cp default.conf default.conf.bak
$ vim default.conf // 修改后的内容如下

创建测试文件

$ touch ~/lnmp/wwwroot/info.php

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

访问测试

测试结果

配置 MySQL 容器

// 创建 mysql 容器
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306  mysql:5.7

// 将 mysql 容器加入自定义网路 lnmp 中
$ docker network connect lnmp mysql

// 创建 mysql 文件链接 mysql 
$ touch /root/lnmp/wwwroot/mysql.php      // 内容如下

mysql 文件内容

测试(看到如下页面则表示成功)

测试结果

进入 mysql 容器验证

$ docker exec -it mysql bash

# mysql -uroot -proot

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.01 sec)

大功告成,通过上面的内容就可以配置一个简单的 lnmp 的开发环境了,下集见。

程序员的艺术人生


文章作者: chenggx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 chenggx !
评论
 上一篇
docker 学习笔记(八) docker 学习笔记(八)
使用 docker-compose 搭建 LNMP 开发环境上一集我们已经可以通过 docker 搭建 LNMP 的开发环境了,但是想必大家也发现配置挺复杂的,每个容器启动都有好长的命令。那有没有更简单一点的方式呢?有的,就是今天要学习的—
2020-08-27
下一篇 
docker 学习笔记(六) docker 学习笔记(六)
使用 Dockerfile 定制镜像 什么是 Dockerfile 呢? Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用以组装映像的所有命令。Docker 可以通过阅读该文件中的指令来自动构建映像。(类似于 Linu
2020-08-24
  目录