#docker start my-mysql
#docker start my-lnmp
我们尽量把环境软件分开封装到不同的容器,便于当作插件以后再别的地方复用。这就导致可能运行PHP环境需要分别运行nginx容器,php容器,mysql容器,以后可能扩展为更多的容器,每次重启时都需要一个一个开启所有的容器,还要注意先后顺序,这样的操作就很繁琐了。docker-compose可以帮我们解决这个问题,docker-compose是一个用来帮用户定义与运行多个容器的docker应用程序。与composer类似,docker-compose的工作可以理解为:在项目入口编写配置文件,运行时根据配置文件加载运行环境需要的所有镜像(类似于composer中需要依赖的库),如果本地存在的镜像直接创建容器并使用它运行该容器,如果本地镜像不存在则从dockers hub上下载镜像再创建容器。同时每个镜像又可以通过dockerfile文件修改,如安装软件等。这样,我们在每次重启服务器之后就不需要再依次运行容器而是直接进入docker-compose的配置文件目录,一行命令即可运行所有配置中的容器。
首先安装docker-compose.
curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
下载需要的镜像
#docker pull mysql:5.7
#docker pull richarvey/nginx-php-fpm
新建一个docker-compose文件夹,文件夹中目录结构如下
docker-compose
├── docker-compose.yml
├── mysql
│ └── dockerfile
├── nginx
│ ├── conf
│ │ ├── nginx.conf
│ │ └── vhost
│ ├── dockerfile
└── php7
├── conf
│ └── php.ini
└── dockerfile
docker-compose.yml为配置文件,是必须的,其他文件为可以nginx,mysql,php的配置文件,可以通过挂载来修改容器中环境的配置值,也可以不要,直接使用默认值。这里例如vhost目录,挂载到nginx的虚拟站主机配置目录,这样我们每次增加一个新的站点不需要进入容器内部增加类似test.conf的虚拟主机配置文件。dockerfile文件为如果需要修改镜像要用到的配置文件,由一行行命令语句组成,并且支持以 # 开头的注释行。一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
以下是一个直接使用镜像不做修改的配置文件
version: '2'
services:
mysql:
image: mysql:5.7
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "123456"
container_name: my-compose-mysql
nginx-php-fpm:
image: richarvey/nginx-php-fpm:latest
restart: always
ports:
- "80:80"
- "89:89"
- "9000:9000"
- "443:443"
volumes:
- "/a/mywebroot/:/var/www/html/:rw"
- "/a/docker-compose/nginx/vhost/:/etc/nginx/sites-enabled/:ro"
container_name: my-compose-lnmp
links:
- mysql
这些配置和直接使用docker指令运行容器相似。image表示镜像名称,restart:always表示总是启动,ports表示对应的映射端口,volume表示挂载目录,上面挂载了web目录和vhost目录,vhost目录里面的*.conf文件都将被自动加载(可以进入容器内部进行修改),links表示关联的容器,container_name表示给容器命名。更多的配置文件命令点击这里查看。
接下来就可以直接运行docker-compose了(一定要在docker-compose.yml文件在的目录下,否则会报错)。
#docker-compose up -d
运行成功后可以通过docker-compose ps命令查看容器运行状态
直接访问IP地址可以看到熟悉的PHP页面了。
执行docker-compose down可以关闭并删除整个服务。
如果修改了dockerfile或者yml文件,可以使用docker-compose build来重建它。
*docker-compose start和stop也可以运行和停止容器,不过它是将一个容器当作一个服务来运行的。
如果要修改镜像内容,则配置文件中的image:image_name应该改成
build:
context: ./dir
dockerfile: Dockerfile-alternate
context参数表示dockerfile文件所在目录,dockerfile参数表示dockerfile文件名
下面是一个完整的dockerfile
# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
# Base image to use, this must be set as the first line
FROM ubuntu
# Maintainer: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user docker_user@email.com
# Commands to update the image
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# Commands when creating a new container
CMD /usr/sbin/nginx