在掌握了 docker 的基本命令之后, 我也是想着去用 docker 做一点实际的配套环境, 就拿自己最常用的 lnmp 环境来做测试配套环境运行的顺序依次是 mysql->php->nginx, 至于为什么, 在下面会解释
1.MySQL
之后服务运行的镜像如无特别的提示, 都是从官方拉取的镜像, 对于小企业以及个人开发者, 官方的镜像更为安全, 省心省力
- # 拉取镜像
- $ docker pull mysql
- # 运行 MySQL
- $ docker run MySQL --name mysql -d \
- -p 3306:3306 \
- -v /var/lib/mysql/:/var/lib/mysql/ \
- -e MYSQL_ROOT_PASSWORD=ilovec \
下面依次讲解上面运行各个参数
--name: 指定的运行的容器的名字
-d: 后台运行该容器
-p: 宿主机与容器的端口的映射
-v: 容器挂载到本地的目录映射
-e: 指定运行容器的环境变量
2.PHP
拉取官方镜像 php-fpm, 根据自己需要的 php 版本去下载, 但是官方的镜像有些 php 常用的包没有包含在内, 因此我们需要使用 dockerfile 去重新构建一下, 下面是在 Dockerfile 里面安装 mysqli 和 pdo 两个 php 扩展包
- FROM php:7.1-fpm
- # Install modules
- RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
- RUN docker-php-ext-install pdo_mysql
- CMD ["php-fpm"]
运行 php-fpm
- docker run -d -p 9000:9000 \
- --name php-fpm \
- --link mysql \
- -v /data/wwwroot/:/data/wwwroot/ \
- php-fpm
注意参数当中的 --link, 这个参数在容器之间的连接十分有用, 他会在当前容器的 / etc/hosts 里面添加一条域名解析, 通过该域名可以连接到对应的容器, 例如在上述的 php-fpm 里面, link 到 mysql, 那么在 php-fpm 里面的 php 程序可以通过 mysql 字符串连接到刚刚运行的 mysql 容器, cat /etc/hosts 就可以看到里面的解析记录了
- 172.17.0.2 mysql b41d2569c06d
- 3.Nginx
通过以下命令运行 nginx, 由于 nginx 需要通过 127.0.0.1:9000 端口去连接 php-fpm 来解析 php 文件, 所以需要通过 link 来连接 php-fpm
- docker run -d -p 80:80 \
- --name nginx \
- --link php-fpm \
- -v /data/wwwroot/:/data/wwwroot/ \
- nginx
值得注意的是如果 nginx 解析文件的时候, 如果请求的是静态文件, 会直接返回该 nginx 容器里面的文件到客户端, 如果请求的是 php 文件, 他会把这个请求转发到 php-fpm, 然后 php-fpm 去本地去找 php 文件进行解析, 也就是 php-fpm 容器本身的文件
依次运行上面的 3 个服务的启动命令之后就可以搭建我们常见的 lnmp 了但是每次运行服务都需要运行上面的命令显得有点麻烦, 我们可以使用 docker-compose 命令去进行集中管理
使用 docker-compose
只需要创建一个 lnmp 目录, 然后在 lnmp 目录下创建 docker-compose.yml 输入下面命令即可管理集成化的环境
其实可以通过命令的名字就很容易知道各个指令的含义
version: 由于 docker-compose 是一个发展中的工具, 很有可能每个版本的指令都有所不同, 因此需要在开头声明 docker-compose 指令的适用版本
image: 指服务通过哪个镜像进行运行
depends_on: 这个指明了软件的依赖与哪个软件, 其实也是声明了软件运行的顺序
- version: '2'
- services:
- mysql:
- image: "mysql"
- ports:
- - "3306:3306"
- volumes:
- - /var/lib/mysql/:/var/lib/mysql/
- environment:
- MYSQL_ROOT_PASSWORD: password
- php-fpm:
- image: "php-fpm"
- depends_on:
- - mysql
- links:
- - mysql
- ports:
- - "9000:9000"
- volumes:
- - /data/wwwroot/:/data/wwwroot/
- nginx:
- image: "nginx"
- depends_on:
- - php-fpm
- links:
- - php-fpm
- volumes:
- - /data/wwwroot/:/data/wwwroot/
- ports:
- - "80:80"
之后在这个 lnmp 目录下执行 compose 相关命令就可以控制
- # 运行 docker-compose 服务
- $ docker-compose up -d
- # 停止服务
- $ docker-compose stop
- # 删除该服务相关的容器
- $ docker-compose rm
- # 运行已存在 docker-compose 的服务
- $ docker-compose start
来源: https://www.cnblogs.com/s-b-b/p/8624491.html