设为首页 收藏本站
查看: 1449|回复: 2

[经验分享] Docker Compose 项目

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-9 11:06:45 | 显示全部楼层 |阅读模式
Docker Compose 项目
  compose项目简介
  compose项目来源于之前的Fig项目,使用python代码编写。compose项目主要用于编排部署基于docker的应用。本身与docker/swarm配合度很高。
  Docker Compose 是 Docker 编排服务的一部分,可以让用户在其它平台快速安装Docker,Swarm 可以让 Docker 容器在集群中高效运转,而 Compose 可以让用户在集群中部署分布式应用。简单的说,Docker Compose 属于一个“应用层”的服务,用户可以定义哪个容器组运行哪个应用,它支持动态改变应用,并在需要时扩展。   
相对于kubernetes来说功能比较简单,相当于kubernetes的一个子集。
  dockerfile可以让用户管理一个单独的应用容器,而Compose则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一个Project,即项目),例如一个调度器,两个web服务容器再加上后端的数据库服务容器等。
   wKiom1fRGqrhQc8gAACa9_ftPiE004.jpg
  安装Compose之前,要先安装docker,这里就不说了,
  安装Docker-compose
  先安装pip
  注:pip类似RedHat里面的yum,安装Python包非常方便
  #wget https://bootstrap.pypa.io/get-pip.py
   wKiom1fRGquTX99mAABhpTFmUaA094.jpg
  #python get-pip.py
   wKiom1fRGqzz4kVkAABljc7_3_w077.jpg
  再安装compose
   wKioL1fRGqyC76twAAAb4QLDNYU521.jpg
   wKiom1fRGqyh2ASDAAAYi_9SPMc828.jpg
  安装成功后,可以查看 docker-compose 的版本和 命令的用法。
  #docker-compose –v
   wKioL1fRGq2QxQj7AAAt0Ol6opg608.jpg
  #docker-compose –h
   wKiom1fRGq6Rdrz0AABHkrGNKl8698.jpg
  首先介绍几个术语。
  服务(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站点网页文件
  目录结构如下图所示:
   wKioL1fRGq7yAH11AABYElhMOgg189.jpg
  Web 子目录:
  生成一个index.html文件,其内容:
   wKioL1fRGsORrPrqAAAtv4K5Nh0377.jpg
  haproxy 目录:
  在其中生成一个 haproxy.cfg 文件
   wKioL1fRGsTjoijwAAC2q4D90tg231.jpg
  docker-compose.yml
  编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。内容十分简单,指定 3 个 web 容器,以及 1 个 haproxy 容器。
   wKiom1fRGsTSM8axAAC13Mxqff4166.jpg
  运行 compose 项目:
  在docker-haproxy目录下执行docker-compose up -d来启动你的应用
  #cd docker-haproxy
   wKiom1fRGsXi4gFnAABLR3SSPxE008.jpg
  查看容器启动情况
   wKioL1fRGsaAropUAAB_22tviYU098.jpg
  或
   wKiom1fRGsbTGfUZAABa9RgW1jM191.jpg
  打开浏览器本机本机IP:http://192.168.1.105
   wKioL1fRGseS9bdGAAAu52CnucM563.jpg
  打开浏览器本机本机IP:http://192.168.1.105:70
   wKioL1fRGsfjK9QhAAEw0GA3QCM406.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-269907-1-1.html 上篇帖子: docker1.12安装配置及使用笔记 下篇帖子: docker技术剖析--docker supervisor管理进程 项目
累计签到:34 天
连续签到:1 天
发表于 2016-9-10 10:15:31 | 显示全部楼层
{:6_388:}{:6_388:}{:6_388:}{:6_388:}{:6_388:}{:6_388:}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

累计签到:34 天
连续签到:1 天
发表于 2016-9-12 09:27:32 | 显示全部楼层
{:6_404:}{:6_404:}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表