docker三剑客之compose(服务编排工具)
一、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
安装过程中如果出现如下报错:
原因: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 都可以查看版本
一般使用步骤:
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 tty : true privileged: true command : [ '/bin/bash' ] redis-compose: image: redis container_name: redis444 ports: - "6399:6379" stdin_open: true tty : true 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兼容性如下图所示:
每个docker-compose.yml必须定义image或者build中的一个,其它的是可选的。
2、Compose和Docker兼容性如下图所示:
2.1、image
指定镜像tag或者ID。示例:
2.2、Build
用来指定一个包含Dockerfile文件的路径。一般是当前目录.。Fig将build并生成一个随机命名的镜像。
注意,在version 1里bulid仅支持值为字符串。version 2里支持对象格式。
context为路径,dockerfile为需要替换默认docker-compose的文件名,args为构建(build)过程中的环境变量,用于替换Dockerfile里定义的ARG参数,容器中不可用。示例:
Dockerfile:
docker-compose.yml:
2.3、Command
用来覆盖缺省命令。示例:command: bundle exec thin -p 3000
command也支持数组形式:command: [bundle, exec, thin, -p, 3000]
2.4、Links
用于链接另一容器服务,如需要使用到另一容器的mysql服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同docker run --link。示例:
使用了别名会自动在容器的/etc/hosts文件里创建相应记录:
所以我们在容器里就可以直接使用别名作为服务的主机名。
2.5、Ports
用于暴露端口。同docker run -p。示例:
2.6、Expose
expose提供container之间的端口访问,不会暴露给主机使用。同docker run --expose。
2.7、volumes
挂载数据卷。同docker run -v。示例:
2.8、volumes_from
挂载数据卷容器,挂载是容器。同docker run --volumes-from。示例:
container:container_name格式仅支持version 2。
2.9、environment
添加环境变量。同docker run -e。可以是数组或者字典格式:
2.10、depends_on
用于指定服务依赖,一般是mysql、redis等。
指定了依赖,将会优先于服务创建并启动依赖。
links也可以指定依赖。
2.11、external_links
链接搭配docker-compose.yml文件或者Compose之外定义的服务,通常是提供共享或公共服务。格式与links相似:
注意,external_links链接的服务与当前服务必须是同一个网络环境。
2.12、extra_hosts
添加主机名映射。
将会在/etc/hosts创建记录:
2.13、Extends
继承自当前yml文件或者其它文件中定义的服务,可以选择性的覆盖原有配置。
service必须有,file可选。service是需要继承的服务,例如web、database。
2.14、Net
设置网络模式。同docker的--net参数。
2.15、Dns
自定义dns服务器。
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。
3、批处理脚本
# 关闭所有正在运行容器
docker ps | awk '{print $1}' | xargs docker stop
# 删除所有容器应用
docker ps -a | awk '{print $1}' | xargs docker rm
# 或者
docker rm $(docker ps -a -q)
版权声明: 本文由 陈登辉个人博客 原创,转载请保留链接: www.cdh1688.com/cdh1688/jingyanjiaoliu/2019/1010/137.html