阅读本文你将知道
- docker-compose的配置文件编写
- dockerfile的编写
Docker-Compose提要
Docker-Compose
项目是Docker
官方的开源项目,负责实现对Docker
容器集群的快速编排。
Docker-Compose
的工程配置文件默认为docker-compose.yml
,使用一个Dockerfile
模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose
允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project
。
Docker-Compose
项目由Python
编写,调用Docker
服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API
,就可以在其上利用Compose
来进行编排管理。
Docker-Compose安装
- ubuntu
apt-get update
apt-get install docker-compose
- mac
安装图形化工具, 默认应该带的 如果没有使用brew安装
- windows
安装图形化工具, 默认应该带的
编写docker-compose.yml及容器相关dockerfile
- 先相关创建项目目录
// 创建php-fpm/nginx的配置文件 目录 用于映射
// 手动构建Dockerfile
mkdir ~/docker
mkdir ~/docker/aoppp
mkdir ~/docker/aoppp/nginx
touch ~/docker/aoppp/nginx/nginx.conf
mkdir ~/docker/aoppp/php-fpm
touch ~/docker/aoppp/php-fpm/Dockerfile
touch ~/docker/aoppp/php-fpm/php-ini-overrides.ini
touch ~/docker/aoppp/docker-compose.yml
- docker-compose.yml
version: "3.1"
services:
mysql:
image: mysql:5.7
container_name: php-longing-mysql
working_dir: /application
volumes:
- .:/application
environment:
- MYSQL_ROOT_PASSWORD=1234567
- MYSQL_DATABASE=test
- MYSQL_USER=test
- MYSQL_PASSWORD=1234567
ports:
- "8086:3306"
webserver:
image: nginx:alpine
container_name: php-longing-webserver
working_dir: /application
volumes:
- ./www:/application
- ./aoppp/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "81:80"
php-fpm:
build: aoppp/php-fpm
container_name: php-longing-php-fpm
working_dir: /application
volumes:
- ./www:/application
- ./aoppp/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini
- nginx.conf
server {
listen 80;
client_max_body_size 108M;
access_log /var/log/nginx/application.access.log;
server_name www.longing.com;
root /application/bbs/public;
index index.php;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ .php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
}
- Dockerfile
FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"
# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive
# Install selected extensions and other stuff
RUN apt-get update
&& apt-get -y --no-install-recommends install php-memcached php7.2-mysql php7.2-pgsql php-redis php7.2-sqlite3 php-xdebug php7.2-bz2 php7.2-gd php-igbinary php7.2-imap php-ssh2 php-yaml
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
# Install git
RUN apt-get update
&& apt-get -y install git
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
# Install vim
RUN apt-get update
&& apt-get -y install vim
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
- php-ini-overrides.ini
upload_max_filesize = 100M
post_max_size = 108M
docker-compose操作
docker-compose.yml文件已经完成,相关端口、目录映射,Dockerfile也已经可以了。那这个时候需要使用docker-compose来启动这个项目
首先进入docker-compose.yml所在的目录,然后运行 docker-compose up
启动项目
- docker-compose相关命令
docker-compose up // 直接启动 可以看到日志输出
docker-compose up -d // 后台启动
docker-compose stop // 停止项目
docker-compose restart // 重启项目
docker-compose down // 会停掉容器,并删除掉容器
容器已经启动成功了,然后我们安装一个laravel项目来测试
配置Laravel项目启动实现数据库查询
博主这边打算配置Laravel来进行数据库查询, 所以我这边进入容器利用composer安装。
- composer阿里镜像
# 进入容器
docker exec -it php-longing-php-fpm bash
# 配置阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
- 直接创建laravel项目
composer create-project --prefer-dist laravel/laravel bbs "5.6.*"
- Laravel配置数据库连接
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=test
DB_PASSWORD=1234567
- 编写laravel路由
// routers/web.php
Route::get('/test', function () {
$res = DB::table('test')->select()->get();
dd($res);
});
我已经利用navicat
给test
表添加数据了, 已经?