Docker-compose构建LNMP环境

作者: Dsir 分类: Server 发布时间: 2018年08月18日 11时16分

前言

通过之前的介绍,我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。一句话 docker-compose 是用来做docker 的多容器控制

docker-compose 是什么

docker-compose 是一个用来把 docker 自动化的东西。
有了 docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自动化的完成。

为什么要用 docker-compose,他解决了什么

用通俗的语言来说,我们平时操作 docker 还是很原始的一系列动作,你手动使用 docker 的动作可以拆分成

  1. 找到一个系统镜像 // docker search

  2. 安装好 vm 或者 virtual box // apt-get install docker

  3. 在 vm 中安装镜像 // docker run -d -it 你的镜像

  4. 略..

这是最小的动作, 如果你要映射硬盘,设置nat网络或者桥接网络,等等…你就要做更多的 docker 操作, 这显然是非常没有效率的。

但是我们写在 docker-compose.file 里面就很好了。 你只需要写好后 只运行一句
docker-compose up -d
一切都是那么的简单

术语

Compose 中有两个重要的概念:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。

Docker-Compose的使用

Docker-compose可以通过一个yml脚本将我们所需要的应用镜像整合到一起,yml脚本配置完成后直接执行该脚本就可以完成一整套web应用的部署,下面我们来看一个yml脚本示例:

# 文件格式针对每个版本,不同的格式会对应不同的编写格式
version: '2'
services:
  # 这里的名字可以自定义,服务启动后以这里的名字来命名容器的名字
  nginx:
    image: 5d94da8de52b
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /web/lnmp-etc/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf
      - /web/lnmp-etc/nginx/conf/vhost:/usr/local/nginx/conf/vhost
      - /web/lnmp-etc/nginx/logs/access.log:/usr/local/nginx/logs/access.log
      - /web/lnmp-etc/nginx/logs/error.log:/usr/local/nginx/logs/error.log
      - /web/html:/var/www/html
    links:
      - php:php
    depends_on:
      - php
    container_name: nginx
  php:
    image: 754e8d4ddcec
# 暴露端口,但不映射到宿主机,只被连接的服务访问。
    expose:
      - "9000"
    volumes:
      - /web/lnmp-etc/php/php.ini:/usr/local/php/lib/php.ini
       - /web/lnmp-etc/php/php-fpm.conf:/usr/local/php/etc/php-fpm.conf
      - /web/lnmp-etc/php/www.conf:/usr/local/php/etc/php-fpm.d/www.conf
      - /web/html:/var/www/html
# 这里指当前容器要链接的容器
    links:
      - mysql:mysql
# 解决容器的依赖、启动先后的问题。以下例子中会先启动 mysql再启动 php
    depends_on:
      - mysql
    container_name: php
  mysql:
# 镜像ID
    image: 0164c13b662c
# 暴露端口
    ports:
      - "3306:3306"
# 宿主机和容器进行目录挂载
    volumes:
      - /web/lnmp-etc/mysql/etc:/etc/mysql
      - /web/lnmp-etc/mysql/data:/var/lib/mysql
      - /web/lnmp-etc/mysql/logs/error.log:/var/log/mysql/error.log
    # 环境变量
environment:
      MYSQL_ROOT_PASSWORD: "dongxin"
    container_name: mysql # 指定启动后的容器的名称,默认会使用 项目名称_服务名称_序号 这样的格式

dockerfile 构建LNMP镜像

Dockerfile构建LNMP镜像

docker-compose verison和更多的命令详解,有兴趣的小伙伴可以进行深入了解。


 docker-compose.yml脚本修改完毕后,在文件所在目录执行:

# -d 意思是后台运行所有容器服务,如果不加该参数会打印出启动容器中启动的软件日志
docker-compose up -d

效果图:

1525948406279765.png


查看docker-compose是否运行正常

docker-compose ps

效果图:

1525948364889519.png


docker-compose常用命令:

docker-compose ps # 查看当前正在运行中的容器
docker-compose stop [container name]# 停止正在运行的容器,如果不写容器名称则停止所有
docker-compose start [container name]# 启动被停止的容器,参数说明同上
docker-compose restart [container name] # 重启容器,参数说明同上


总结

本篇文章主要讲解了 docker-compose 的使用,相信看到这里的小伙伴已经可以使用 docker-compose 构建自己的容器了。本章节用到的镜像由于还在整理中,后续我会发布出来,敬请见谅!


如果觉得我的文章对您有用,请随意打赏、分享。您的支持将鼓励我继续创作!

微博分享
2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注