Dcoker-Compose
Compose介绍
Compose是 Docker 的服务编排工具,主要用来构建基于Docker的复杂应用Compose 通过一个配置文件来管理多个 -Docker 容器,非常适合组合使用多个容器进行开发的场景。
Compose 中有两个重要的概念:
- 服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理,通过子命令对项目中的一组容器进行便捷地生命周期管理。
例如,你有一个
php
镜像,一个 redis
镜像,一个 nginx
镜像。如果没有 docker-compose
,那么每次启动的时候,你需要敲各个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等一系列的操作,相当繁琐。而用了
docker-compose
之后,你就可以把这些命令一次性写在 docker-compose.yml
文件中,以后每次启动这一整个环境(含3个容器)的时候,你只要敲一个 docker-compose
up命令就ok了。dockerfile
的作用是从无到有的构建镜像。它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile
来完成的。Dockerfile -为
docker build
命令准备的,用于建立一个独立的 image
,在 docker-compose
里也可以用来实时 build
安装compose
Curl方式下载新的版本
修改权限
安装完成后可以查看版本:
docker-compose --version
一般步骤
示例: 准备工作:提前下载好镜像:
需要新建一个空白目录,在目录新建一个 docker-compose.yml
以上命令的意思是新建nginx和redis容器。
好,我们启动应用:
docker-compose up
就成功了。浏览器访问 即可。 默认是前台运行并打印日志到控制台。如果想后台运行,可以:
docker-compose up –d
服务后台后,可以使用下列命令查看状态:
docker-compose ps
停止服务:
docker-compose stop
重新启动服务:
docker-compose restart
docker-compose.yml模版文件常用命令
docker-compose的默认模版文件为:docker-compose.yml。和Dockerfile一样,它也是有自己的语法命令的。其中定义的每个服务都必须通过image指令指定镜像或build指令(需要 Dockerfile)来自动构建。其它大部分指令都跟docker run中的类似。
模版文件有多种写法,下图是Compose和Docker兼容性说明:
每个docker-compose.yml必须定义image或者build中的一个,其它的是可选的。 image 指定镜像tag或者ID。示例:
Build
用来指定一个包含Dockerfile文件的路径。一般是当前目录.。Fig将build并生成一个随机命名的镜像。context
为路径, dockerfile
为需要替换默认 docker-compose
的文件名, args
为构建(build)过程中的环境变量,用于替换 Dockerfile
里定义的ARG参数,容器中不可用。示例:Dockerfile:
docker-compose.yml:
Command
用来覆盖缺省命令。示例:
command: bundle exec thin -p 3000
command也支持数组形式:
command: [bundle, exec, thin, -p, 3000]
Links
用于链接另一容器服务,如需要使用到另一容器的mysql服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同
docker run --link
。示例:使用了别名将自动会在容器的
/etc/hosts
文件里创建相应记录:所以我们在容器里就可以直接使用别名作为服务的主机名。
Ports
用于暴露端口。同docker run -p。示例:
Expose
expose提供container之间的端口访问,不会暴露给主机使用。同docker run --expose。
volumes
挂载数据卷。同
docker run -v
。示例:environment
添加环境变量。同
docker run -e
。可以是数组或者字典格式:depends_on
用于指定服务依赖,一般是mysql、redis等。 指定了依赖,将会优先于服务创建并启动依赖。
extra_hosts 添加主机名映射。
将会在/etc/hosts创建记录:
networks
一些场景下,默认的网络配置满足不了我们的需求,此时我们可使用networks命令自定义网络 加入指定网络,格式如下:
Dns
自定义dns服务器。
还有很多命令,但是通常使用并不是那么多,如果项目当中需要可以通过参考官方手册去查看
示例: