23e049eaeb54728450fa8d1d14862dba
docker-compose搭建nginx+php+mysql

前言

上一篇《docker入门——安装(CentOS)、镜像、容器》讲了docker镜像获取、启动容器等基本使用,本篇讲讲常用的php、nginx、mysql容器安装及关联。


镜像选择

nginx

nginx使用latest tag。

php

由于php比较多版本,读者在php offical选一个tag,本文使用7.2-fpm(笔者使用latest启动不起来,不知道为什么)。

PHP Dockerfile

要让php连接mysql,还要在docker官方的php镜像上,安装插件。于是,我们使用Dockerfile来构建一个新镜像。

新建php-mysqli目录:

  • $ mkdir php-mysqli
  • $ cd php-mysqli
  • $ vi Dockerfile

编辑Dockerfile,内容如下:

  • FROM php:7.2-fpm
  • RUN apt-get update \
  • && apt-get install iputils-ping \
  • && docker-php-ext-install mysqli && docker-php-ext-enable mysqli

FROM php:7.2-fpm表示基于php:7.2-fpm tag镜像;
RUN后面的指令,是创建完该镜像的容器后,再在容器上执行这些指令。

这里先不用手动build镜像,等会用docker-compose会自动build

关于Dockerfile参考 《Docker — 从入门到实践》——使用 Dockerfile 定制镜像

mysql

mysql offical,本文选5.7tag。


docker compose

官方Guide

安装

1.下载最新版(本文使用1.19.0):

  • sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

读者可以到Compose GitHub查看所有发布版本。

2.设置权限

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

3.测试是否安装成功

  • $ docker-compose --version
  • docker-compose version 1.19.0, build 1719ceb

构建目录结构

我们做一个demo,新建如下目录结构:

  • php-nginx-compose/
  • ├── conf.d
  • │ └── nginx.conf
  • ├── docker-compose.yml
  • ├── html
  • │ └── index.php
  • └── php-mysqli
  • └── Dockerfile

php-mysqli

就是刚才在PHP Dockerfile中创建的目录,直接放在php-nginx-compose目录中。

docker-compose.yml:

```
version: '3'
services:
nginx:
image: nginx:latest
# 端口映射
ports:
- "80:80"
# 依赖关系 先跑php
depends_on:
- "php"
# 数据卷
volumes:
# 映射主机./conf.d目录到容器/etc/nginx/conf.d目录
- "$PWD/conf.d:/etc/nginx/conf.d"
- "$PWD/html:/usr/share/nginx/html"
networks:
- app_net
# 容器名称
container_name: "compose-nginx"
php:
build: ./php-mysqli
# image指定build Dockerfile生成镜像的名称
image: php:7.2-fpm-mysqli
ports:
- "9000:9000"
volumes:
- "$PWD/html:/var/www/html"
networks:
- app_net
container_name: "compose-php"
mysql:
image: mysql:5.7
ports:
- "3306:3306"
# 环境变量
environment:
# mysql密码
- MYSQL_ROOT_PASSWORD={自己填密码}
networks:
app_net:
# 固定子网ip,网段必须在子网络10.10..
ipv4_address: 10.10.10.1
container_name: "compose-mysql"

top Created with Sketch.