Docker学习笔记(二):使用docker-compose管理docker环境

在上一章中已经完成了搭建和连接nginx-php-fpm和mysql容器的工作。每次我们需要启动工作环境的时候,需要运行以下命令(需要先运行被连接的容器):
#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)
MAINTAINER docker_user [email protected]

# 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
更多dockerfile配置项目可以参考 docker中文文档。



你可能感兴趣的:(Docker学习笔记(二):使用docker-compose管理docker环境)