docker系列五docker-compose编排服务
什么是docker-compose
之前我们都是直接一条docker 命令行启动一个容器当做服务,这在我们应用或者中间件服务比较少的
情况下,就几条命令行,还是比较方便简单的。然而,在现实使用的时候我们往往服务是蛮多的,所以这
时候就需要docker-compose上场了。docker-compose是一个用户定义和运行多个容器的docker应用程序。
只需要一个简单的命令,就可以进行根据配置文件进行创建并启动你配置的所有服务。
使用流程
- 在docker-compose.yaml中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行
- 运行docker-compose up -d 就可以启动并运行所有服务
yaml配置详解
样例
1 | version: '2' #版本生命 |
运行
1 | docker-compose up -d |
container_name
给服务的容器的别名
1 | container_name: 'mysql' |
服务指定镜像
每个docker-compose.yaml 必须定义image或者build中的一个,也就是需要定义一个服务并指定镜像,其他的都是可选的。
ps: 在version 1里,同时使用image和build是不允许的,version 2则可以,如果同时指定了两者,会将build出来的镜像打上名为image标签
image
指定镜像tag或者id
1 | image: ubuntu:14.04 |
build
用来指定包含dockerfile文件的路径,一般是当前目录,然后会进行build并tag一个随机命名的镜像。
ps: 在version 1里build仅支持值为字符串,version 2 里面支持对象格式
1 | build: ./dir |
context:路径
dockerfile: 需要替换默认dockerfile的文件名
args:为构建(build)过程中的环境变量,用于替换Dockerfile里定义的ARG参数,容器中不可用。
command
用来覆盖缺省命令,有两种形式
1 | command: echo 'hello world' |
environment
添加环境变量。作用同docker run -e 可以是数组或者字典格式
1 | environment: |
env_file
除了上面的直接在配置文件里面进行配置环境变量外,我们在环境变量比较多的情况下还可以从文件中获取
环境变量。如果通过docker-compose -f FILE 指定了模板文件,那么env_file中路径会基于模板文件路径,
如果环境变量文件中的变量名称跟上面的environment指令冲突了,那么以environment为准。
1 | env_file: .env |
环境变量文件中每一行都必须符合格式。支持#开头的注释行
1 | #mysql 数据库密码 |
links
用于链接到另一个容器服务,如果需要使用到另一个容器的mysql服务。可以给出服务名和别名,也
可以仅仅给出服务名,这样别名将和服务名相同.该作用同docker run –link
1 | links: |
depends_on
用于指定服务依赖,指定了依赖,将优先于服务创建并启动依赖,links也可以指定依赖
1 | depends_on: |
external_links
用于链接搭配docker-compose.yaml文件或者Compose之外定义的服务,通常是提供共享或者公共服务,
格式跟links 相似
ps: 链接的服务与当前服务必须是同一个网络环境
1 | external_links: |
ports
用于暴露端口。作用同docker run -p
ps:冒号前面是主机上的端口,后面是容器内的端口
1 | ports: |
expose
expose提供container之间的端口访问,不会暴露给主机使用,作用同docker run –expose
1 | expose: |
volumes
挂载数据卷,同docker run -v
1 | volumes: |
volumes_from
挂载数据卷容器,挂载的是容器。作用同 docker run –volumes-from
ps:container:container_name仅支持version 2
1 | volumes_from: |
extra_hosts
添加主机名映射
1 | extra_hosts: |
会在/etc/hosts创建记录
1 | 167.234.23.12 somehost |
extends
继承当前yml文件或者其他文件中定义的服务,可以选择性的覆盖原有配置
1 | extends: |
ps: service必须有,filek可选。service是要继承的服务,比如: web mysql
net
设置网络模式 作用同 docker run –net
1 | net: "host" |
dns
自定义dns服务器
1 | dns: 8.8.8.8 |
命令详解
验证配置文件 config -q
用来验证docker-compose.yaml文件配置,当验证正确时不输出内容,验证失败时,会输出错误信息
查看服务状态 ps
在docker-compose.yaml所在的文件夹下执行docker-compose ps 可用来查看当前有哪些容器,以及他们的状态
更新启动服务 up -d
可以创建并启动配置中的所有服务
停止服务 stop
停止某个服务,当没有带service_name的时候,是停止配置文件里面的所有服务
1 | docker-compose stop service_name |
删除容器 rm
在停止服务后,才能删除服务。当没有带service_name的时候,是移除配置文件所有服务的容器
注意:将容器移除掉,如果容器没有跟主机进行数据卷映射,进行外部持久化,那么数据会全部丢失。
1 | #需要输入y 进行确认 |
查看日志 logs
可以查看某个服务的日志
1 | # 查看日志 |
执行命令 exec
docker-compose exec service_name bash 进入某个服务下的容器
docker-compose exec service_name command 在某个服务的容器中执行command命令
拉取镜像 pull
拉取某个服务的镜像,如果没有加service_name 就是重新拉取所有服务镜像。
1 | docker-compose pull service_name |
创建容器 create
除了docker-compose up -d 创建并启动所有服务容器外,我们也可以手动进行创建服务的容器。
1 | docker-compose create service_name |
启动服务 start
在上一步create,我们进行创建好容器之后,可以手动启动该服务容器了
1 | docker-compose start service_name |
重启服务 restart
当我们执行exec进入容器,可能修改了某个配置文件,需要重启容器,那么我们可以使用restart 命令重启服务。
1 | docker-compose restart service_name |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 337455685@qq.com
文章标题:docker系列五docker-compose编排服务
文章字数:1.8k
本文作者:wjy
发布时间:2020-02-17, 17:11:09
最后更新:2020-02-18, 11:40:08
原始链接:https://chengnj.github.io/docker/2020/docker5/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。