一. 简介
docker-compose是一个容器编排的工具,可以使用一个yaml/yml配置文件进行应用服务的配置,然后用个简单的命令创建并启动服务
使用docker-compose基于以下三个步骤:
- 用Dockerfile定义一个应用环境,以让它在任何地方都可以使用
- 在docker-compose.yml中定义这些服务,让这些服务能同时在一个独立的环境运行
- 执行命令docker-compose up ,compose会开始并运行所定义的服务
二.安装
linux环境:
1.执行命令下载最新的dockerc-compose版本
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
2.为docker-compose添加权限
sudo chmod +x /usr/local/bin/docker-compose
其他环境:
点击跳转
三.docker-compose.yml简述
docker-compose需要定义一个docker-compose.yml文件,在该文件中自定义服务。
docker-compose.yml主要分为如下三个部分(还有其他部分在本教程中不会用到)
- version: 描述当前docker-compose.yml的版本号,目前官方版本号是3
- services: 这是配置中最重要,也是最难的一部分,在这里可以自定义一个或多个服务
- networks: 定义使用的网络
关于docker-compose.yml的其他详细配置移步官方文档
四.使用
先看一个简单的docker-compose.yml的demo
version: '3'
services:
proxy:
image: nginx
container_name: my_nginx
networks:
- demo_net
ports:
- 80:80
- 443:443
networks:
demo_net:
external: false
1.在该docker-compose.yml文件所在的路径执行docker-compose up
2.在浏览器访问localhost,可以发现已经可以正常访问nginx的welcome页面
文件讲解:主要说下servcies里面的几个含义
proxy: 表示这个service的名称
images: 表示这个service所使用的image,如果有自己的镜像仓库,这里也可以填仓库镜像所在的url
container_name: 表示compose启动一个container的命名
networks: 该service加入的某个网络
ports: container所对外开放的端口映射
所有基于docker-compose的基础使用都可以基于这个demo进行改造。
五.高级用法
参考我在github.com上的docker-compose-demo
以下的讲解都是基于该项目的思想
- 在实际投入使用的时候,不会只有一个docker-compose.yml进行配置,而是参考官方给出的建议,进行extend services in compose,意思就是定义一个基础的yaml/yml,然后再根据不同的环境(dev/pro)进行不同的配置,然后在不同的环境启动不同配置的服务。
- 对于dev环境,由于dev环境需要不断的进行重新发布,所以我们在dev.yml中直接将文件挂在到容器内部,这样方便进行开发。
- 对于pro环境,参考官方建议,我们需要去掉dev环境中挂载的文件并打包到image中,并标记不同版本的tag,放到自己的私有仓库上,以便这次发布有重大bug时做到及时的回滚。所以我们在pro.yml中使用Dockerfile进行镜像的build,而这些Dockerfile都是将dev挂载的文件打包到了image中。
- 无论在dev/pro环境,都应将restart置为always,为此我们还需要container的healthcheck,所以在docker-compose.yml中为每一个service都设置了healthcheck。
- 其他详细信息移步docker-compose的repo。