欢迎来到陈先生的博客!
当前位置:陈登辉个人博客 > 经验交流 > 正文

docker三剑客之compose(服务编排工具)

10-10 经验交流

一、composer介绍

Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。

 

docker-compose是编排容器的。例如,你有一个php镜像,一个mysql镜像,一个nginx镜像。如果没有docker-compose,那么每次启动的时候,你需要敲各个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等一系列的操作,相当繁琐。而用了docker-compose之后,你就可以把这些命令一次性写在docker-compose.yml(文件扩展名必须是.yml 或 .yaml)文件中,以后每次启动这一整个环境(含3个容器)的时候,你只要敲一个docker-compose up命令就ok了。

 

dockerfile的作用是从无到有的构建镜像。它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。dockerfile 是为 docker build 命令准备的,用于建立一个独立的 image ,在 docker-compose 里也可以用来实施 build。

 

Compose  项目是由 Python 编写,所以下面的安装我们需要使用pip(Python包管理工具)来安装。Centos系统默认会安装Python相关环境的,所以这里直接就可以用pip命令

 

二、安装Compose

通过pip安装:pip install --upgrade pip

指定版本安装:pip install docker-compose==1.22

 

安装过程中如果出现如下报错:

d1.png

原因:python库中urllib3 (1.22) or chardet (2.2.1) 的版本不兼容

 

解决如下:

 pip uninstall urllib3

 pip uninstall chardet

 pip install requests

 

Curl方式下载新的版本:

1
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

 

修改权限:

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

 

安装完成后可以查看版本:

docker-compose --version 或 docker-compose -v 都可以查看版本

d2.png

 

一般使用步骤:

1、定义Dockerfile,方便迁移到任何地方;

2、编写docker-compose.yml文件;

3、运行docker-compose up启动服务

 

 

示例:

新建一个空白目录,在目录新建一个docker-compose.yaml 本文中的路径:/root/docker-compose.yaml

 

docker-compose.yaml文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3.6"
services:
  nginx:
     image: nginx
     container_name: nginx-test
     ports:
       "8080:80"
     depends_on:
       - redis-compose
     stdin_open: true
     ttytrue
     privileged: true
     command: ['/bin/bash']
  redis-compose:
     image: redis
     container_name: redis444
     ports:
        "6399:6379"
     stdin_open: true
     ttytrue
     privileged: true
     command: ['/bin/bash']

以上命令的意思是新建nginx和redis容器。注意:回车和空格,可参考yaml基本语法

 

好,接下来我们启动应用:

cd /root

docker-compose up

就成功了。浏览器访问 即可。

 

默认是前台运行并打印日志到控制台。如果想后台运行,可以加入-d选项,示例如下:

docker-compose up –d

 

服务后台后,可以使用下列命令查看状态:

docker-compose ps

 

停止服务:

docker-compose stop

 

重新启动服务:

docker-compose restart

 

三、docker-compose.yml文件中的命令(指令)参考

1、Compose和Docker兼容性如下图所示:

d3.png

 

每个docker-compose.yml必须定义image或者build中的一个,其它的是可选的。

 

2、Compose和Docker兼容性如下图所示:

2.1、image

指定镜像tag或者ID。示例:

d4.png

2.2、Build

用来指定一个包含Dockerfile文件的路径。一般是当前目录.。Fig将build并生成一个随机命名的镜像。

注意,在version 1里bulid仅支持值为字符串。version 2里支持对象格式。

d5.png

context为路径,dockerfile为需要替换默认docker-compose的文件名,args为构建(build)过程中的环境变量,用于替换Dockerfile里定义的ARG参数,容器中不可用。示例:

 

Dockerfile:

d6.png

 

docker-compose.yml:

d7.png

 

 

2.3、Command

用来覆盖缺省命令。示例:command: bundle exec thin -p 3000

command也支持数组形式:command: [bundle, exec, thin, -p, 3000]

 

2.4、Links

用于链接另一容器服务,如需要使用到另一容器的mysql服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同docker run --link。示例:

d8.png

使用了别名会自动在容器的/etc/hosts文件里创建相应记录:

d9.png

所以我们在容器里就可以直接使用别名作为服务的主机名。

 

2.5、Ports

用于暴露端口。同docker run -p。示例:

d10.png

 

2.6、Expose

expose提供container之间的端口访问,不会暴露给主机使用。同docker run --expose。

d11.png

 

2.7、volumes 

挂载数据卷。同docker run -v。示例:

d12.png

 

 

2.8、volumes_from

挂载数据卷容器,挂载是容器。同docker run --volumes-from。示例:

d13.png

container:container_name格式仅支持version 2。

 

2.9、environment

添加环境变量。同docker run -e。可以是数组或者字典格式:

d14.png

 

2.10、depends_on

用于指定服务依赖,一般是mysql、redis等。

指定了依赖,将会优先于服务创建并启动依赖。

links也可以指定依赖。

 

2.11、external_links

链接搭配docker-compose.yml文件或者Compose之外定义的服务,通常是提供共享或公共服务。格式与links相似:

d15.png

注意,external_links链接的服务与当前服务必须是同一个网络环境。

 

2.12、extra_hosts

添加主机名映射。

d16.png

将会在/etc/hosts创建记录:

d17.png

 

2.13、Extends

继承自当前yml文件或者其它文件中定义的服务,可以选择性的覆盖原有配置。

d18.png

service必须有,file可选。service是需要继承的服务,例如web、database。

 

2.14、Net

设置网络模式。同docker的--net参数。

d19.png

 

2.15、Dns

自定义dns服务器。

d20.png

 

cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir这些命令都是单个值,含义请参考docker run。

d21.png

 

3、批处理脚本

# 关闭所有正在运行容器

docker ps | awk  '{print $1}' | xargs docker stop

 

 

# 删除所有容器应用

docker ps -a | awk  '{print $1}' | xargs docker rm

# 或者

docker rm $(docker ps -a -q)

d22.png

版权声明: 本文由 陈登辉个人博客 原创,转载请保留链接: www.cdh1688.com/cdh1688/jingyanjiaoliu/2019/1010/137.html

博客主人陈先生
爱交流,爱分享,各类知识分享、经验分享、技术分享、干货分享;谢谢你,长得这么好看还来看我!
  • 文章总数
  • 59808访问次数
  • 建站天数
  •