Docker Compose 是 Docker 官方编排项目,用于快速的部署应用。通过 DockerFile 可以快速生成一个容器,如果要多个容器配合使用,那么就可以通过该编排工具完成。
简介
通过一个单独的 docker-compose.yml
模板文件定义一组相关联的应用容器作为一个项目,其中有两个比较重要的概念:
- 服务 Service,一个应用容器,可以包括若干运行相同镜像的容器实例。
- 项目 Project,由一组关联的应用容器组成的一个完整业务单元,在配置文件中定义。
Compose 最开始由 Python 编写,后来应该用 GoLang 进行了重写,会调用 Docker 服务提供的 API 来对容器进行管理。
安装
在 V2 版本中可以作为 Docker 的插件或者单独使用。
----- 可以直接根据OS安装插件
# apt-get install docker-compose-plugin
# yum install docker-compose-plugin
也可以从 Github Releases 下载相关的二进制,保存在 docker 插件所在目录,其中用户级别在 ~/.docker/cli-plugins
,系统级为 /usr/local/lib/docker/cli-plugins
。
示例
这里使用的是 Dockerfile 简介 中的示例镜像,然后创建 docker-compose.yml
文件,内容如下。
version: '3'
services:
web:
build: . # 可以通过Dockerfile构建
ports: .
- "8000:5000" # 端口映射 Host:Container,也可以指定IP地址
foobar:
image: foobar:latest # 指定镜像
container_name: foobar # 容器名
restart: always # 退出后立即重启
volumes: # 配置数据卷,Host:Container:ro
- /opt/foobar/data:/usr/foobar/data:rw
environment: # 指定环境变量
- TZ=Asia/Shanghai
ports:
- "127.0.0.1:3030:2000"
command: nc -kl 2000 # 指定执行的命令
最后,通过 docker-compose up
命令启动即可,可以通过 -f
参数指定文件,另外,一些环境变量类似的配置可以使用如下方式,更多可以参考 YAML 中的内容。
envs: &shared-envs
APP_PATH: ${APP_PATH:-/usr/bin}
services:
web:
environment:
<<: *shared-envs
RUN_MODE: ${RUN_MODE:-release}
这是 YAML 格式提供的机制,可以共享一些变量的同时,针对不同的服务定制一些环境变量。
存储系统
可使用上述示例中 bind
访问,也支持 ./data:/usr/foobar/data:ro
相对路径方式,还可以使用如下存储卷。
version: '3'
services:
web:
volumes:
- static:/usr/data:rw
volumes:
static:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/opt/data'
网络配置
默认会创建的一个名为 default
的网络,相关的容器会添加到网络中,其对应的名字就是默认服务名,例如上述的 web
可以通过 http://web:5000
访问,可以通过如下方式配置。
networks:
monitor:
driver: bridge
services:
web:
networks:
- monitor
另外,还可以在 services
中通过 network_mode: host
参数指定模式。
常用命令
----- 只启动某个指定的服务
docker compose up web
----- 默认从当前目录读取compose.yaml文件启动
docker compose up -d -f compose.yaml
----- 连接到某个服务
docker compose exec -it foobar /bin/sh
----- 指定 Compose 服务的当前状态信息
docker compose ps
----- 查看某个服务的日志,如果不指定则会查看所有
docker compose logs -f foobar
注意,其中 up
用于启动,而 start/stop
可以在启动之后重启、停止使用,如果没有通过 up
启动而且运行态已经被清理,那么使用 start
则没有效果,与 up
对应的是 down
子命令。
常用参数整理如下。
-d
后台运行。
常用镜像
Jaeger
docker pull quay.io/jaegertracing/jaeger:2.1.0
其中 Jaeger 最新版本可以从 Download 获取,启动参数或端口可参考 Getting Started 中内容。
Redis
官方 redislabs/redis
镜像大概有 2G
左右,有点大,可以使用 library/redis
实现,只有 100M
左右,其中配置文件如下。
port 6379
bind 0.0.0.0
daemonize no
requirepass 123456
logfile ""
appendonly no
更多配置项可以参考 redis.io 内容。
参考
- Compose Reference 官方的参考文档。