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

本篇博文中的操作系统:CentOS Linux release 7.6.1810 (Core)

一、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方式下载新的版本:

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文件内容如下:

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基本语法

    基本格式要求:

    yaml大小写敏感。

    使用缩进代表层级关系。

    缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)

    #作为注释,yaml中只有行注释。


YAML中允许表示三种格式,分别是,对象、数组、常量值


对象

    使用冒号代表,格式为key: value。冒号后面要加一个空格:

    key: value


    可以使用缩进表示层级关系

    key:

    child-key: value

    child-key2: value2


数组

    使用一个短横线加一个空格代表一个数组项

    hobby:

    - Java

    - LOL


常量

    YAML中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间

    pi: 3.14 #定义一个数值3.14

    hasChild: true #定义一个boolean值

    name: '你好YAML' #定义一个字符串


yaml语法也可以参考:yaml基本语法


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

cd /root

docker-compose up

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


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

docker-compose up –d


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


列出所有运行容器

docker-compose ps


停止服务:

docker-compose stop


重新启动服务:

docker-compose restart


查看服务日志输出

docker-compose logs 


删除容器

docker-compose rm 服务名 


down 停止并删除容器,网络,镜像和数据卷


三、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


更多命令请自行查阅相关资料




失去的时间  失去的人  失去的自己  最后都变成了故事    -->木小瓷【撒野


声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复12人评论7,777人参与