Docker Compose 项目

http://hongge.blog.51cto.com/

compose项目简介

compose项目来源于之前的Fig项目,使用python代码编写。compose项目主要用于编排部署基于docker的应用。本身与docker/swarm配合度很高。

Docker Compose 是 Docker 编排服务的一部分,可以让用户在其它平台快速安装Docker,Swarm 可以让 Docker 容器在集群中高效运转,而 Compose 可以让用户在集群中部署分布式应用。简单的说,Docker Compose 属于一个“应用层”的服务,用户可以定义哪个容器组运行哪个应用,它支持动态改变应用,并在需要时扩展。
相对于kubernetes来说功能比较简单,相当于kubernetes的一个子集。

dockerfile可以让用户管理一个单独的应用容器,Compose则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一个Project,即项目),例如一个调度器,两个web服务容器再加上后端的数据库服务容器等。

安装Compose之前,要先安装docker,这里就不说了,

安装Docker-compose

先安装pip

注:pip类似RedHat里面的yum,安装Python包非常方便

#wget https://bootstrap.pypa.io/get-pip.py

#python get-pip.py

再安装compose

安装成功后,可以查看 docker-compose 的版本和 命令的用法。

#docker-compose –v

#docker-compose –h

首先介绍几个术语。

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

项目(project):由一组关联的应用容器组成的一个完整业务单元。

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

docker-compose 命令说明

大多数Compose命令都是运行于一个或多个服务的,如果服务没有指定,该命令将会应用到所有服务,如果要获得所有可用信息,使用命令:docker-compose [COMMAND] --help,下面是命令(COMMAND)的说明:

build
创建或者再建服务
服务被创建后会标记为project_service(比如composetest_db),如果改变了一个服务的Dockerfile或者构建目录的内容,可以使用docker-compose build来重建它

help
显示命令的帮助和使用信息

kill
通过发送SIGKILL的信号强制停止运行的容器,这个信号可以选择性的通过,比如:
docker-compose kill -s SIGKINT

logs
显示服务的日志输出

port
为端口绑定输出公共信息

ps
显示容器

pull
拉取服务镜像

rm
删除停止的容器

run
在服务上运行一个一次性命令,比如:
docker-compose run web Python manage.py shell

scale
设置为一个服务启动的容器数量,数量是以这样的参数形式指定的:service=num,比如:
docker-compose scale web=2 worker=3

start
启动已经存在的容器作为一个服务

stop
停止运行的容器而不删除它们,它们可以使用命令docker-compose start重新启动起来

up
为一个服务构建、创建、启动、附加到容器
连接的服务会被启动,除非它们已经在运行了

运行docker-compose up -d会在后台启动容器并使它们运行

–verbose
显示更多输出

–version
显示版本号并退出

-f,–file FILE
指定一个可选的Compose yaml文件(默认:docker-compose.yml)

-p,–project-name NAME
指定可选的项目名称(默认:当前目录名称)

docker-compose.yml命令说明

每一个定义在docker-compose.yml中的服务必须明确指定一个image或者build选项,这与docker run命令行中输入的是对应相同的,对于docker run,在Dockerfile文件中指定的选项(比如CMD、EXPOSE、VOLUME、ENV)是默认的,因此不必在docker-compose.yml中再指定一次

image

标明image的ID,这个image ID可以是本地也可以是远程的,如果本地不存在,Compose会尝试去pull下来

image: ubuntu

image: orchardup/postgresql

image: a4bc65fd

build

该参数指定Dockerfile文件的路径,该目录也是发送到守护进程的构建环境(这句有点),Compose将会以一个已存在的名称进行构建并标记,并随后使用这个image

build: /path/to/build/dir

command

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

command: 要执行的命令

links

连接到其他服务中的容器,可以指定服务名称和这个链接的别名,或者只指定服务名称

links:

- db

- db:database

- redis

此时,在容器内部,会在/etc/hosts文件中用别名创建一个条目,就像这样:

172.17.2.186 db

172.17.2.186 database

172.17.2.186 redis

环境变量也会被创建,关于环境变量的参数,会在后面讲到

external_links

连接到在这个docker-compose.yml文件或者Compose外部启动的容器,特别是对于提供共享和公共服务的容器。在指定容器名称和别名时,external_links遵循着和links相同的语义用法

external_links:

- redis_1

- project_db_1:mysql

- project_db_1:postgresql

ports

暴露端口,指定两者的端口(主机:容器),或者只是容器的端口(主机会被随机分配一个端口)

注:当以 主机:容器 的形式来映射端口时,如果使容器的端口小于60,那可能会出现错误,因为YAML会将 xx:yy这样格式的数据解析为六十进制的数据,基于这个原因,时刻记得要将端口映射明确指定为字符串

ports:

- "3000"

- "8000:8000"

- "49100:22"

- "127.0.0.1:8001:8001"

expose

暴露端口而不必向主机发布它们,而只是会向链接的服务(linked service)提供,只有内部端口可以被指定

expose:

- "3000"

- "8000"

volumes

挂载路径最为卷,可以选择性的指定一个主机上的路径(主机:容器),或是一种可使用的模式(主机:容器:ro)

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

volumes_from:

从另一个服务或容器挂载它的所有卷。

volumes_from:

- service_name

- container_name

environment

加入环境变量,可以使用数组或者字典,只有一个key的环境变量可以在运行Compose的机器上找到对应的值,这有助于加密的或者特殊主机的值

environment:

RACK_ENV: development

SESSION_SECRET:

environments:

- RACK_ENV=development

- SESSION_SECRET

env_file

从一个文件中加入环境变量

如果通过 docker-compose -f FILE 指定了模板文件,则 env_file 中路径会基于模板文件路径。如果有变量名称与 environment 指令冲突,则以后者为准。

env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
环境变量文件中每一行必须符合格式,支持 # 开头的注释行。
# common.env: Set Rails/Rack environment
RACK_ENV=development

net

网络模式,可以在docker客户端的--net参数中指定这些值

net: "bridge"

net: "none"

net: "container:[name or id]"

net: "host"

dns

自定义DNS服务,可以是一个单独的值或者一张列表

dns: 8.8.8.8

dns:

- 8.8.8.8

- 9.9.9.9

dns_search

自定义DNS搜索范围,可以是单独的值或者一张列表

dns_search: example.com

dns_search:

- dc1.example.com

- dc2.example.com

使用Compose只需要简单的三个步骤:

首先,使用Dockerfile或docker commit来定义你的应用环境

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

第三步,执行docker-compose up -d来启动你的应用,它会根据docker-compose.yml的设置来pull/run相关的容器。

测试案例

下面,我们创建一个经典的 Web 项目:一个 Haproxy,挂载三个 Web 容器。

docker-haproxy目录,作为项目工作目录,并在其中分别创建两个子目录: haproxy 和web。

#mkdir -p /root/docker-haproxy/{haproxy,web}

在/root/docker-haproxy/目录下创建docker-compose.yml文件

在/root/docker-haproxy/haproxy目录下创建haproxy的主配置文件haproxy.cfg

在/root/docker-haproxy/web目录下存放web站点网页文件

目录结构如下图所示:

Web 子目录:

生成一个index.html文件,其内容:

haproxy 目录:

在其中生成一个 haproxy.cfg 文件

docker-compose.yml

编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。内容十分简单,指定 3 个 web 容器,以及 1 个 haproxy 容器。

运行 compose 项目:

在docker-haproxy目录下执行docker-compose up -d来启动你的应用

#cd docker-haproxy

查看容器启动情况

打开浏览器本机本机IP:http://192.168.1.105

打开浏览器本机本机IP:http://192.168.1.105:70

http://hongge.blog.51cto.com/

时间: 2024-10-21 23:56:36

Docker Compose 项目的相关文章

docker compose项目构建

##docker compose安装1.安装epel源 yum install epel-releae -y 2.安装python-pip yum install -y python-pip 3.安装docker compose pip install docker-compose 4.查看docker compose docker-compose version docker compose项目构建 #新建项目文件夹并切换进入项目文件夹 [email protected]:~#mkdir xi

Docker 系列五(Docker Compose 项目).

一.概念 Docker Compose 是官方编排项目之一,负责快速的部署分布式应用.它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一种相关联的应用容器为一个项目. Docker  Compose 中有两个重要的概念: 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例.项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义. Docker Comp

Docker Compose 项目打包部署

Docker Compose 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知使用 Docker Compose 可以轻松.高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具 Docker 和 Compose兼容性看下图:          

通过 Docker Compose 组合 ASP NET Core 和 SQL Server

目录 Docker Compose 简介 安装 WebApi 项目 创建项目 编写Dockfile Web MVC 项目 创建项目 编写Dockfile 编写 docker-compose.yml文件 运行项目 源代码 参考 本文模拟一个比较完整的项目,包括前端(MVC), 后端(WebApi)和数据库(mssql-server-linux).通过Docker Compose 定义,组合并执行它们.涉及到 Docker Compose 安装,命令,docker-compose.yml文件编写,W

Docker Compose

compose项目简介 compose项目来源于之前的Fig项目,使用python代码编写.compose项目主要用于编排部署基于docker的应用.本身与docker/swarm配合度很高. Docker Compose 是 Docker 编排服务的一部分,可以让用户在其它平台快速安装Docker,Swarm 可以让 Docker 容器在集群中高效运转,而 Compose 可以让用户在集群中部署分布式应用.简单的说,Docker Compose 属于一个"应用层"的服务,用户可以定义

有容云:实战总结之 利用Docker、Docker Compose &Rancher构建持续部署

前言: 本文由John Patterson . Chris Lunsford写于2016年4月4日,译者有容云张向波,转载请注明出处.(原文链接见文末) 作者John Patterson和Chris Lunsford 运营了一家提供运营和基础架构服务的公司,本文是他们给大家分享的内容:关于如何通过使用Docker.Docker-Compose和Rancher来实现容器部署落地. 我们想跟你一起从头开始体验整个过程,特别是之间遇到的一些痛点和所做的决策.目前,已经有许多的资源和工具可以与Docke

云计算Docker全面项目实战(Maven+Jenkins、日志管理ELK、WordPress博客镜像)

2013年,云计算领域从此多了一个名词“Docker”.以轻量著称,更好的去解决应用打包和部署.之前我们一直在构建Iaas,但通过Iaas去实现统一功  能还是相当复杂得,并且维护复杂.将特殊性封装到镜像中实现几乎一致得部署方法,它就是“Docker”,以容器为技术核心,实现了应用的标准化.企业可  以快速生成研发.测试环境,并且可以做到快速部署.实现了从产品研发环境到部署环境的一致化.Docker让研发更加专注于代码的编写,并且以“镜像”作  为交付.极大的缩短了产品的交付周期和实施周期. 课

docker三剑客之docker compose

compose环境变量 以DOCKER_开头的变量和用来配置Docker命令行客户端的使用一样,如果使用boot2docker,${boot2dockershellinit}将会设置他们为正确的值 compose环境变量: COMPOSE_PROJECT_NAME: 设置compose的项目名称,默认是当前工作目录(docker-compose.yml文件所在目录)的名字 compose会为每一个启动的容器前添加项目名称.例如一个名称为proj的项目,其中的一个web容器,名称可能为proj_w

docker三剑客之一docker compose

compose有两个重要的概念: 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义 compose默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理 安装 pip安装,下载编译好的二进制文件,直接运行在docker容器中三种方案: pip安装: apt-get install python-pip -y pip install