Docker三剑客之Compose

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。

Compose 基本介绍

Compose 简介

  • Compose代码

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。
Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。

为什么使用Compose

在Docker镜像构成和定制介绍中,我们可以使用Dockerfile文件很方便定义一个单独的应用容器。
然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

docker-compose.yml看起来像这样:
version: '3'
services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redis
volumes:logvolume01: {}

Compose 中两个重要的概念

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

说明:

  • Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
  • Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

Compose 安装与卸载

Docker 版本

docker-ce-17.09.0.ce
系统环境是linux7.x

PIP 安装

pip install docker-compose

Compose 版本

docker-compose --version
docker-compose version 1.21.2, build a133471

卸载

如果是通过 pip 安装的,则执行如下命令即可删除。

pip uninstall docker-compose

实战--使用docker-compose部署Edusoho平台

项目目录结构

# pwd
/root/docker-lnmp
# tree -L 3
.
├── docker-compose.yml
├── mysql
│   ├── data
│   └── my.cnf
├── nginx
│   ├── conf.d
│   │   └── default.conf
│   ├── Dockerfile
│   ├── edusoho
│   │   ├── api
│   │   ├── app
│   │   ├── bootstrap
│   │   ├── plugins
│   │   ├── src
│   │   ├── vendor
│   │   ├── vendor_user
│   │   └── web
│   ├── edusoho-8.2.38.tar.gz
│   ├── log
│   │   └── error.log
│   ├── nginx.conf
│   ├── ssl
│   │   ├── nginx.key
│   │   └── nginx.pem
│   └── www
│       ├── db.php
│       ├── index.html
│       ├── index.php
├── php
│   ├── Dockerfile
│   ├── log
│   │   └── php-fpm.log
│   ├── php-fpm.conf
│   ├── php.ini
│   └── www.conf

项目docker-compose.yml文件

version: '3'
# 定义三个服务nginx,php,mysql
services:nginx:# 依赖php服务,意味着在启动nginx之前先启动phpdepends_on:- php# nginx镜像的路径build: ./nginx# 这样使nginx容器把网站文件和目录存放到主机目录中,持久化和方便管理volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/log/error.log:/var/log/nginx/error.log- ./nginx/edusoho:/usr/share/nginx/html# nginx意外退出时自动重启restart: always# 映射80端口ports:- "80:80"# - "443:443"networks:- frontend# 容器名称container_name: nginxphp:depends_on:- mysqlbuild: ./phpports:- "9000"networks:- frontend- backend      volumes:- ./php/php-fpm.conf:/usr/local/php/etc/php-fpm.conf- ./php/www.conf:/usr/local/php/etc/php-fpm.d/www.conf- ./php/php.ini:/usr/local/php/etc/php.ini- ./php/log/php-fpm.log:/usr/local/php/var/log/php-fpm.log- ./nginx/edusoho:/usr/share/nginx/htmlrestart: alwayscontainer_name: php# MySQLmysql:image: "dockerhub.datagrand.com/global/mysql:5.6"ports:- "3306:3306"volumes:- ./mysql/data:/var/lib/mysql- ./mysql/my.cnf:/etc/my.cnfenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresscommand: ['mysqld', '--character-set-server=utf8']networks:- backendrestart: alwayscontainer_name: mysql#Network
networks:frontend:backend:

后台启动并运行所有容器

docker-compose up -d-d 在后台运行服务容器

docker-compose.yml 文件内容说明

默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。

version

Compose文件版本,详见Compose file versions and upgrading | Docker Documentation

depends_on

使用depends_on选项控制服务启动的顺序。详见Control startup order in Compose

services:nginx:# 依赖php服务,意味着在启动nginx之前先启动phpdepends_on:- php
说明:
nginx服务不会等待php完全启动之后才启动!

build

指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
详见build

# nginx镜像的路径build: ./nginx

你也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。
使用 dockerfile 指令指定 Dockerfile 文件名。
使用 arg 指令指定构建镜像时的变量。

version: '3'
services:webapp:build:context: ./dirdockerfile: Dockerfile-alternateargs:buildno: 1

volumes

数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。
该指令中路径支持相对路径。详见volumes

 volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/log/error.log:/var/log/nginx/error.log- ./nginx/edusoho:/usr/share/nginx/html

restart

no是默认的重新启动策略,它不会在任何情况下重新启动容器。当always指定时,容器总是重新启动。
该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped。
详见restart

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped注意:使用(版本3)Compose文件在群集模式下部署堆栈时,将忽略此选项 。请改用restart_policy。

ports

暴露端口信息。
使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)。
详见ports

ports:- "3000"- "3000-3005"- "8000:8000"- "9090-9091:8080-8081"- "49100:22"- "127.0.0.1:8001:8001"- "127.0.0.1:5000-5010:5000-5010"- "6060:6060/udp"

注意:以HOST:CONTAINER格式映射端口时,使用低于60的容器端口时可能会遇到错误的结果,因为YAML会将格式xx:yy中的数字解析为base-60值。因此,我们建议始终将端口映射明确指定为字符串。

networks

配置容器连接的网络。详见网络配置

创建frontend网络
docker network create frontend
查看网络
docker network ls
删除网络
docker network rm frontend

container_name

指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。
注意: 使用(版本3)Compose文件在群集模式下部署堆栈时,将忽略此选项。
详见container_name

 # 容器名称container_name: nginx

environment

详见environment

  • 设置环境变量。你可以使用数组或字典两种格式。
environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpress
或
environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpress- MYSQL_USER=wordpress- MYSQL_PASSWORD=wordpress
  • 如果变量名称或者值中用到 true|false,yes|no 等表达 布尔 含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。
    这些特定词汇,包括:
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
environment:RACK_ENV: developmentSHOW: 'true'
或
environment:- RACK_ENV=development- SHOW=true
  • 只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据。
environment:RACK_ENV: developmentSESSION_SECRET:environment:- RACK_ENV=development- SESSION_SECRET

command

覆盖容器启动后默认执行的命令。详见command


command: bundle exec thin -p 3000
该命令也可以是一个列表,方式类似于 dockerfile:
command: ["bundle", "exec", "thin", "-p", "3000"]

转载于:https://blog.51cto.com/wutengfei/2156792

Docker三剑客之Compose相关推荐

  1. docker系列(三)docker三剑客之Compose

    docker-compose,快速对docker容器集群进行编排 Docker Compose 介绍 Docker-Compose 是 Docker 的一种编排服务,是一个用于在 Docker 上定义 ...

  2. docker三剑客之 Docker Machine Docker Compose Docker Swarm

    Docker 三剑客 一.docker machine 1.Docker Machine 简介 2.Docker Machine实践 二.docker-compose 1.docker-compose ...

  3. Docker(五):Docker 三剑客之 Docker Machine

    上篇文章Docker(四):Docker 三剑客之 Docker Compose 介绍了 Docker Compose,这篇文章我们来了解 Docker Machine . Docker Machin ...

  4. Docker基础30--6.4 Docker三剑客之Swarm

    6.4 Docker三剑客之Swarm Docker Swarm是Docker官方三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案.使用它,用户可以将多个 ...

  5. Docker三剑客docker-machine ,docker-compose,docker-swam

    目录 Docker三剑客之一:docker-machine ​Docker三剑客之一:docker-compose Docker三剑客之一:docker-swarm 创建swarm集群 创建集群服务 ...

  6. Docker 三剑客-------docker swam,visualizer监控、stack部署集群、Portainer可视化

    Docker 三剑客-------docker swam.visualizer监控.stack部署集群.Portainer可视化 文章目录 Docker 三剑客-------docker swam.v ...

  7. Docker三剑客之Docker Swarm

    目录 一.什么是Docker Swarm 二.Docker Swarm 基本结构图 三.Swarm的几个关键概念 四.Swarm的工作模式 五.Swarm的调度策略 六.Swarm Cluster模式 ...

  8. docker三剑客docker-compose、docker-machine、swarm

    2019独角兽企业重金招聘Python工程师标准>>> Docker三大编排工具: Docker Compose:是用来组装多容器应用的工具,可以在 Swarm集群中部署分布式应用. ...

  9. Docker 三剑客之Docker Swarm

    Docker Swarm 介绍 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一 ...

最新文章

  1. ARM汇编语言中的程序结构
  2. 往sde中导入要素类报错000732
  3. 微信红包随机数字_微信红包随机算法转载
  4. Apache多站点配置
  5. 搜狗加入鹅厂,将成为腾讯间接全资子公司!
  6. 腾讯云服务器CentOS 7安装JAVA JDK并运行class文件
  7. Unity 可重复随机数
  8. 上传图片方法大全 [网摘]
  9. java clone()用法_java clone方法使用详解(转)
  10. mysql 个版本区别_MySQL版本区别及选择
  11. win10,secoclient总是报错:与对方建立连接超时,配置错误或网络故障
  12. JavaScript视频系统教程
  13. 解决wps在windows上弹窗等的流氓行为
  14. Kotlin | Kotlin教程
  15. API调用,API传参,面向对接开发,你真的会写接口文档吗?
  16. Intellij IDEA 初学入门图文教程(六) —— IDEA 在 Performing VCS Refresh 卡死
  17. linux手机摄像头,Android手机下开发摄像头拍摄
  18. Nuxt SSR 服务端渲染 详解
  19. Kingbase数据库
  20. Spring--官方文档部分翻译(第五章 面向Aspect的编程-AOP)

热门文章

  1. C++新特性探究(一):nullptr
  2. mysql循环建表_MySQL 开发准则(总结自阿里巴巴开发手册)
  3. java关闭按钮代码_Java高手看看如何实现关闭按钮
  4. mysql elt interval_mysql 区间分组 interval,elt 的运用
  5. java编译异常有哪些_编译时JAVA最常见的错误有哪些
  6. php friso,php binding 不兼容php7
  7. kafka redis vs 发布订阅_对比平台--Redis Vs Kafka 之间的区别
  8. python常用包及其用法_Python 使用的部分常用包以及数据分析pandas及工具jupyter使用...
  9. python语言发展历时_编程语言十年发展史
  10. 如何把程序挂在远端服务器python_Pycharm连接远程服务器并实现远程调试的实现...