Docker Compose
Docker Compose 是用来定义和运行多个Docker容器的工具。
Compose中有两个主要的概念:
- 服务(Service): 一个应用的容器。
- 项目(Project): 由一组关联的应用容器组成的一个完整业务单元,在
docker-compose.yml
中定义。
一个项目可以由多个服务关联而成,Compose用于管理项目。
安装
Mac下用自带的二进制包安装Docker后可以直接使用。
Linux
手动安装:
1 | sudo curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose |
或者通过下载工具(比如迅雷)先下载好文件,再执行
1 | $ sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose |
安装完成后可以检查版本
1 | docker-compose --version |
实战
此最简DEMO参考自这里.
目录结构
1 | |-docker-compose-demo/ |
app.py
中实现了一个最简单的Web应用,当访问一次就计数加一。
1 | from flask import Flask |
Dockerfile
中定制了Web应用的Docker镜像。
1 | FROM python:3.6-alpine |
docker-compose.yml
则是Docker Compose的模板文件,定义了Compose的组成和参数。
1 | version: '3' |
运行项目
1 | docker-compose up |
该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
若要后台运行,则需要加-d参数
1 | docker-compose up -d |
指定配置文件
1 | docker-compose -f docker-compose.dev.yml up |
docker-compose.yml
详细的官方配置说明在这里。
version
指定格式版本。在大多数情况下,最好使用支持的最新版本。你可以查看 Compose 文件参考获取Docker Engine版本与Compose格式版本的对应关系。
1 | version: "3.8" |
services
组成该compose项目的多个服务。
有空再补充。
可能会遇到的问题
在某些环境下
docker-compose up -d
会出现unknown flag: --iidfile
的错误参考这个帖子,切换回老版本的docker-compose
1
2rm -f /usr/local/bin/docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose出现类似”ERROR: Service ‘frontend’ failed to build : Error parsing reference: “node:lts-alpine3.13 as build-stage” is not a valid repository/tag: invalid reference format”的错误
大概率是Docker Engine版本过低,需要升级Docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker如果在离线环境下,可以参考这篇文章进行安装。