使用docker-compose搭建本地开发环境
适用于对docker有一定了解的朋友,小白请先仔细阅读官方文档!
作为应用程序,我们通常需要依赖于多种外部服务,比如数据库、缓存服务等等。
Docker-compose就是在Docker容器的基础上,提供了统一的容器编排语言,可以让你更轻松的利用Docker构建你的应用环境。
docker-compose.yml文件语法语法
image 使用的镜像
build 指定Dockerfile构建
command 启动执行命令
links 链接其他容器
ports 端口映射
expose 暴露端口
volumes 挂载路径
volumes_from 从容器挂载
environment 环境变量
- 编写dockerfile(自定义镜像)
- 编写docker-compose.yml(可以不依赖Dockerfile 使用官方镜像)
常用命令
构建容器 docker-compose up -d
查看容器 docker-compose ps
进入容器 docker exec -it 容器名 /bin/bash
关闭所有 docker-compose down
php-fpm Dockerfile 示例 可以自定义扩展
FROM php:7.1-fpm-alpine
# apk
RUN apk --update add \
autoconf \
build-base \
linux-headers \
libaio-dev \
zlib-dev \
curl \
git \
subversion \
freetype-dev \
libjpeg-turbo-dev \
libmcrypt-dev \
libpng-dev \
libtool \
libbz2 \
bzip2 \
bzip2-dev \
libstdc++ \
libxslt-dev \
openldap-dev \
imagemagick-dev \
make \
unzip \
wget \
libmemcached-dev
# PHP Core Extensions
RUN docker-php-ext-install \
bcmath \
pdo_mysql \
mysqli \
pcntl \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd
# PECL Extensions
RUN pecl install redis-4.2.0 \
&& pecl install mongodb-1.5.3 \
&& pecl install memcached-3.1.3 \
&& pecl install swoole-4.3.1 \
&& docker-php-ext-enable redis mongodb memcached swoole
# Delete
RUN apk del build-base \
linux-headers \
libaio-dev \
&& rm -rf /var/cache/apk/* \
&& mkdir /data \
&& chmod -R 777 /data
VOLUME /var/www
WORKDIR /var/www
EXPOSE 9000
CMD ["php-fpm"]
docker-compose.yml示例
version: "3.0"
services:
nginx:
image: nginx:alpine
ports:
- 80:80
- 443:443
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
- ../:/var/www
php-fpm:
build: ./php-fpm
ports:
- 9000:9000
volumes:
- ./php-fpm/php.ini:/usr/local/etc/php/php.ini
- ./php-fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf
- ../:/var/www
mysql:
image: mysql:5.7
ports:
- 3306:3306
volumes:
- ./mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=123456
redis:
image: redis:5.0-alpine
ports:
- 6379:6379
volumes:
- ./redis/data:/data
#- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
mongo:
image: mongo
ports:
- 27017:27017
volumes:
- ./mongo/data:/data/db
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456