前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker Compose集成式应用组合与服务编排

Docker Compose集成式应用组合与服务编排

作者头像
CodingDiray
发布2019-12-16 17:57:49
1.6K0
发布2019-12-16 17:57:49
举报
文章被收录于专栏:Coding Diary

Compose简介

Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。其代码目前在 https://github.com/docker/compose 开源。

Compose定位是定义和运行多个Docker容器的应用,其前身是开源项目Fig。 使用一个Dockerfile模板文件,可以很方便的定义一个单独的应用容器,然而在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务。例如要实现一个Web项目,除了Web服务器本身,通常还需要后端的数据库服务容器,甚至负载均衡容器等。 Compose恰好满足了这样的需求。它可以通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器项目(project)。

Compose有两个重要的概念:

  • 服务(service): 一个应用的容器,实际上可以包含若干个运行相同镜像的容器实例
  • 项目(project): 由一组关联的应用容器组成一个完整的业务单元

Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。

Compose项目由Python编写,实际上调用了Docker服务提供的API来对容器进行管理

Compose的安装与卸载

Compose可以通过Python的包管理工具pip进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在Docker容器中运行。

Docker for Mac,Docker for Windows自带docker-compose二进制文件,安装Docker之后可以直接使用,Linux系统需要单独的二进制文件或pip进行安装。

查看compose的安装版本:

代码语言:javascript
复制
docker-compose --versino

Linux下的二进制安装:

代码语言:javascript
复制
curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

pip安装:

代码语言:javascript
复制
sudo pip install -U docker-compose

Compose使用示例

应用场景:一般Web网站都会依赖第三方的提供的服务,如DB,cache,以compose编排运行dubbo-admin为例

获取源码,从github上获取dubbo-admin的master分支源码

代码语言:javascript
复制
git clone -b master https://github.com/apache/incubator-dubbo-ops.git

修改admin中的application配置,把zookeeper地址改为zookeeper://zookeeper:2181

在项目根目录下使用maven进行打包

代码语言:javascript
复制
mvn clean package -Dmaven.test.skip=true

构建镜像,在dubbo-admin目录下编写Dockerfile文件,写入以下内容:

代码语言:javascript
复制
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD ./target/dubbo-admin-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

使用以下命令构建镜像

代码语言:javascript
复制
docker build -t dubbo-admin:1.0 .

编写docker-compose.yml文件,在项目根目录下编写docker-compose.yml文件写入以下内容

代码语言:javascript
复制
version: '3.4'
services:
  zk_server:
    image: zookeeper:3.4
    ports:
      - 2181:2181
  dubbo-admin:
    image: dubbo-admin:1.0
    links:
      - zk_server:zookeeper
    depends_on:
      - zk_server
    ports:
      - 7001:7001

运行compose项目,在docker-compose.yml文件所在目录执行:

代码语言:javascript
复制
docker-compose up

在浏览器中访问http://ip:7001 登录验证,默认用户名密码:root/root,guest/guest

Compose命令说明

执行docker-compose [COMMAND] —help 或者docker-compose help [COMMAND]可以产看命令的使用帮助。

docker-compose命令的基本使用格式是:

代码语言:javascript
复制
docker-compose [-f=<arg>...][options][COMMAND][ARG...]

选项说明:

-f, --file 指定模板文件,默认为docker-compose.yml,可以多次指定 -p, --project-name 指定项目名称,默认使用所在目录名称作为项目名 --x-networking 使用Docker的可插拔网络后端特性 --x-networking-driver 指定网络后端的驱动,默认为bridge --verbose 输出更多调试信息 -v, --version 打印版本并退出

Compose模板文件

模板文件是Compose的核心,其涉及的指令关键字也比较多,大部分指令跟docker run相关的参数含义类似。默认的模板文件名称为docker-compose.yml,格式为YAML格式。

每个服务都必须通过image指令指定镜像或build指令(需要Dockerfile)等来自动构建镜像。如果使用build指令,在Dockerfile中设置的选项(如:CMD,ENV 等)将会自动被获取,无需在docker-compose.yml文件中再次设置。

常用指令介绍

build

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

使用context指令指定Dockerfile文件所在文件夹的路径 使用dockerfile指令指定Dockerfile的文件名 使用args令指定构建镜像时的变量

代码语言:javascript
复制
version: '3'
services:
  webapp:
    build:
      context:./dir
      dockerfile:Dockerfile
      args:
        buildno:1

command

覆盖容器启动后默认执行的命令

代码语言:javascript
复制
command:echo "hello word"

container_name

指定容器名称,默认会使用 项目名称服务名称序号 这样的格式

devices

指定设备映射关系

代码语言:javascript
复制
devices:
  - "/dev/ttyUSB1:/dev/ttyUSB0"

depends_on

解决容器的依赖,启动先后的问题

dns

自定义DNS服务器,可以是一个值,也可以是一个列表

environment

设置环境变量,可以使用数组或字典两种格式,指给定名称的变量会自动获取Compose主机上对应变量的值,可以用来防止泄露不必要的数据。

expose

暴露端口,但不映射到宿主机,只被连接的服务访问,仅可以指定内部端口为参数。

extra_hosts

类似Docker中的—add-host参数,指定额外的host名称映射信息

代码语言:javascript
复制
extra_hosts:
  - "googledns:8.8.8.8"

会在启动启动后的服务容器中 /etc/hosts 文件中添加“8.8.8.8 googledns”

healthcheck

通过命令检查容器是否健康运行

image

指定镜像名称或镜像ID,如果镜像在本地不存在会尝试拉取这个镜像。

labels

为容器添加Docker元数据信息,如可以添加辅助说明信息

network_mode

设置网络模式,使用和docker run 的—network参数一样的值

networks

配置容器连接的网络

ports

暴露端口信息,使用 宿主端口:容器端口 的格式,只指定容器端口的时候,宿主端口会随机映射。

volumes

数据卷挂载的路径设置,可以设置宿主机路径,同时支持相对路径

ulimits

指定容器的ulimits限制值,如指定最大进程数为66635,指定文件句柄数位为20000(软限制,应用可以随时修改,不能超过硬限制)和40000(系统硬限制,只能root用户提高)

代码语言:javascript
复制
ulimits:
  nproc:65535
  nofile:
    soft:20000
    hard:40000

entrypoint

指定服务容器启动后执行的文件入口

user

指定容器中运行应用的用户名

working_dir

指定容器中的工作目录

读取变量

Compose模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。

如,Compose文件将从运行它的环境中读取${MONGO_VERSION}的值,并写入执行命令

代码语言:javascript
复制
version:'3'
services:
  db:
    image:"mongo:${MONGO_VERSION}"

如果执行MONGO_VERSION=3.4,docker-compose up则会启动一个mongo:3.4镜像的容器 若当前目录下存在 .env 文件,则优先从该文件中读取变量的值

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding Diary 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Compose简介
  • Compose的安装与卸载
  • Compose使用示例
  • Compose命令说明
  • Compose模板文件
    • 常用指令介绍
      • 读取变量
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档