dockercompose—简化复杂容器应用的利器

秋日私语 秋日私语     2022-08-18     626

关键词:

Compose是用于定义和运行复杂Docker应用的工具。你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成。

1. 安装Docker和Compose

# 当前最新的Docker是1.6.2,Compose为1.2.0
curl -s https://get.docker.io/ubuntu/ | sudo sh
sudo apt-get update
sudo apt-get install lxc-docker
# 参考http://docs.docker.com/compose/install/#install-compose
curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose上面这个方法真的慢出翔,可以通过Python pip安装。
apt-get install python-pip python-dev
pip install -U docker-compose

这样compose就安装好了,查看一下compose的版本信息:

chmod +x /usr/local/bin/docker-compose
docker-compose -version
docker-compose 1.2.0

2. 使用Compose

使用Compose只需要简单的三个步骤:首先,使用Dockerfile来定义你的应用环境:

FROM python:2.7
ADD ./code
WORKDIR /code
RUN pip install -r requirements.txt

其中,requirements.txt中的内容包括:

flask
redis

再用Python写一个简单的app.py

from flask importFlaskfrom redis importRedisimport os
app =Flask(__name__)
redis =Redis(host=‘redis‘, port=6379)@app.route(‘/‘)def hello():
    redis.incr(‘hits‘)return‘Hello World! I have been seen %s times.‘% redis.get(‘hits‘)if __name__ =="__main__":
    app.run(host="0.0.0.0", debug=True)

第二步,用一个compose.yaml来定义你的应用,他们可以在下个互隔离的容器中组成你的应用。

web:
  build:.
  command: python app.py
  ports:-"5000:5000"
  volumes:-.:/code
  links:- redis
redis:
  image: redis

第三步,执行docker-compose up来启动你的应用,它会根据compose.yaml的设置来pull/run这俩个容器。

Creating myapp_redis_1...
Creating myapp_web_1...
Building web...
Step 0 : FROM python:2.7
2.7: Pulling from python
...
Status: Downloaded newer image for python:2.7
 ---> d833e0b23482
Step 1 : ADD . /code
 ---> 1c04b1b15808
Removing intermediate container 9dab91b4410d
Step 2 : WORKDIR /code
 ---> Running in f495a62feac9
 ---> ffea89a7b090
Attaching to myapp_redis_1, myapp_web_1
......
redis_1 | [1] 17 May 10:42:38.147 * The server is now ready to accept connections on port 6379
web_1   |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
web_1   |  * Restarting with stat

3. Yaml文件参考

在上面的yaml文件中,我们可以看到compose文件的基本结构。首先是定义一个服务名,下面是yaml服务中的一些选项条目:

image :镜像的ID

build :直接从pwd的Dockerfile来build,而非通过image选项来pull

links :连接到那些容器。每个占一行,格式为SERVICE[:ALIAS],例如 – db[:database]

external_links :连接到该compose.yaml文件之外的容器中,比如是提供共享或者通用服务的容器服务。格式同links

command :替换默认的command命令

ports : 导出端口。格式可以是:

ports:-"3000"-"8000:8000"-"127.0.0.1:8001:8001"

expose :导出端口,但不映射到宿主机的端口上。它仅对links的容器开放。格式直接指定端口号即可。

volumes :加载路径作为卷,可以指定只读模式:

volumes:-/var/lib/mysql
 - cache/:/tmp/cache
 -~/configs:/etc/configs/:ro

volumes_from :加载其他容器或者服务的所有卷

environment:- RACK_ENV=development
  - SESSION_SECRET

env_file :从一个文件中导入环境变量,文件的格式为RACK_ENV=development

extends :扩展另一个服务,可以覆盖其中的一些选项。一个sample如下:

common.yml
webapp:
  build:./webapp
  environment:- DEBUG=false- SEND_EMAILS=false
development.yml
web:extends:
    file: common.yml
    service: webapp
  ports:-"8000:8000"
  links:- db
  environment:- DEBUG=true
db:
  image: postgres

net :容器的网络模式,可以为”bridge”, “none”, “container:[name or id]”, “host”中的一个。

dns :可以设置一个或多个自定义的DNS地址。

dns_search :可以设置一个或多个DNS的扫描域。

其他的 working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares ,和 docker run 命令是一样的,这些命令都是单行的命令。例如:

cpu_shares:73
working_dir:/code
entrypoint: /code/entrypoint.sh
user: postgresql
hostname: foo
domainname: foo.com
mem_limit:1000000000
privileged:true
restart: always
stdin_open:true
tty:true

4. docker-compose常用命令

在第二节中的 docker-compose up ,这两个容器都是在前台运行的。我们可以指定-d命令以daemon的方式启动容器。除此之外,docker-compose还支持下面参数:

--verbose :输出详细信息

-f 制定一个非docker-compose.yml命名的yaml文件

-p 设置一个项目名称(默认是directory名)

docker-compose的动作包括:

build :构建服务

kill -s SIGINT :给服务发送特定的信号。

logs :输出日志

port :输出绑定的端口

ps :输出运行的容器

pull :pull服务的image

rm :删除停止的容器

run : 运行某个服务,例如docker-compose run web python manage.py shell

start :运行某个服务中存在的容器。

stop :停止某个服务中存在的容器。

up :create + run + attach容器到服务。

scale :设置服务运行的容器数量。例如:docker-compose scale web=2 worker=3

参考:

Compose Document

dockercompose

使用DockerCompose管理多个容器DockerCompose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。-github.com/docker/compose一个使用Dock... 查看详情

dockercompose多容器应用

DockerCompose是一个用来定义并运行复杂应用程序的工具。用Compose,你可以在一个文件中定义多个容器应用程序,然后只需一条命令就可以完成使其运行所需的所有操作。一个使用Docker容器的应用程序通常是由多个容器组成的。使... 查看详情

docker从入门到实践系列四-docker容器编排利器dockercompose(代码片段)

...restartstartstopkillrmdowncreatescaleimagesporttop总结Compose简介概念DockerCompose项目是Docker官方的开源项目,来源于之前的Fig项目。负责实现对Docker容器集群的快速编排。项目地址为:https://github.com/docker/compose/releases它是一个定义和... 查看详情

docke及dockercompose于微服务的实践

DockerCompose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用DockerCompose不再需要使用shell脚本来启动容器。?Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容... 查看详情

docker从入门到实践系列四-docker容器编排利器dockercompose(代码片段)

文章目录Compose简介概念组成安装与卸载二进制包方式安装测试卸载docker-compose.yml文件详解概念案例versionservicesimagebuildcontextdockerfilecontainer_namedepends_onportsexposerestartenvironmentenv_filecommandvolumesnetwork_modenetworksali 查看详情

docker-dockercompose(代码片段)

...nks标记指定。官方文档:https://docs.docker.com/compose/1.2什么是dockercompose?compose、machine和swarm是docker原生提供的三大编排工具。简称docker三剑客。DockerCompose能够在Docker节点上,以单引擎模式(Single-EngineMode)进行多容... 查看详情

docker——三剑客之dockercompose

编排(Orchestration)功能是复杂系统实现灵活可操作性的关键。特别是在Docker应用场景中,编排意味着用户可以灵活的对各种容器资源实现定义和管理。作为Docker官方编排工具,Compose的重要性不言而喻,它可以让用户通过编写一... 查看详情

dockercompose容器编排

Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排。Compose中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。项目(project):由一组关联的应用容器组成的一个... 查看详情

docker的那些事儿—啥是dockercompose?

参考技术A从本节开始,开启dockercompose学习。上一篇:Docker的那些事儿—如何利用docker-machine配置管理machine?前面我们学习了docker容器,了解了如何启动容器。那如果我需要启动多个容器,甚至还要严格控制这些容器的启动顺序... 查看详情

dockercompose容器编排工具(代码片段)

DockerCompose容器编排工具一、DockerCompose理论知识1.1、Compose工具的由来Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。?使用前面介绍的Dockerfile文件可以很容易定义一个单独的应用容器。然而在日常开发工... 查看详情

docker容器实战十四:dockercompose介绍

...。基于这类场景,Docker官方提供了一个多容器的管理工具DockerCompose。它是一个Python开发的工具,可对具有多个容器的应用进行操作,从而实现快速高效的管理。本文将对DockerCompose 查看详情

dockercompose(代码片段)

1、什么是dockercomposeCompose是一个定义和管理多容器的工具,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等;然后一条命令管理所有服务,比如启动、停止、重... 查看详情

企业——dockercompose的搭建

...和运行多容器的应用,可以一条命令启动多个容器,使用DockerCompose不再需要使用shell脚本来启动容器。   Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚... 查看详情

dockercompose原理(代码片段)

Docker的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用docker镜像作为软件产品的载体,使用docker容器提供独立的软件运行上下文环境,使用dockerhub等提供镜像的集中管理,这其中最重要... 查看详情

linux安装dockercompose(代码片段)

Compose官网安装 docker/compose·GitHub下载地址 dockercompose官网DockerCompose是Docker编排服务的一部分,Compose可以让用户在集群中部署分布式应用。DockerCompose是一个属于“应用层”的服务,用户可以定义哪个容器组运行哪个应用&... 查看详情

dockercompose安装(代码片段)

...用,而这些docker容器可能运行在多个不同的宿主机上。2.DockerCompose是一个比较简单的docker容器的编配工具,以前的名称叫Fig,由Orchard团队开发的开源Docker编配工具,在2014年被Docker公司收购,DockerCompose是使用 查看详情

dockercompose(代码片段)

官方文档:https://docs.docker.com/compose 一、介绍  Compose 项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。是用来定义和运行多个Docker容器应用的工具,它允许用户通过一个单独的 docker-compose.yml ... 查看详情

docker及docker-compose于微服务的实践

DockerCompose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用DockerCompose不再需要使用shell脚本来启动容器。?Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容... 查看详情