Docker Compose

本文记录了使用Docker Compose过程中遇到的挑战及解决方法,最终成功运行应用的历程。
    Compose负责实现对Docker容器集群的快速编排。定位是 定义和运行多个Docker容器的应用,前身是Fig。
Compose允许用户通过单一docker-compose.yml模板文件(YAML格式)来定义一组相关的应用容器为一个项目。通过子命令对项目中的一组容器进行生命周期管理。

Compose中两个重要概念:
服务(service):一个应用的容器,实际上可以包含若干运行相同镜像的容器实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

Compose项目由Python编写,实现上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持DockerAPI,就可以利用compose进行编排管理。

安装与卸载
Compose支持Linux、macOS、Windows10三大平台。
Compose可以通过Python的包管理工具pip进行安装,也可以直接下载编译好的二进制文件使用,甚至可以直接在Docker容器中运行。
Docker Desktop for Mac/Windows自带docker-compose二进制文件,安装Docker之后可以直接使用。

书上是建议直接下载二进制文件(版本号注意调整成最新)。
curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
我在本地直接这样装的(ubuntu)apt install docker-compose
还有就是如果不是x86_64架构的Linux,比如ARM(树莓派),可以用pip安装(要Python)。
sudo pip install -U docker-compose

卸载的话:
二进制安装的话直接删除文件 sudo rm /usr/local/bin/docker-compose
pip安装直接sudo pip uninstall docker-compose
如果是像我那样apt安装的 apt remove docker-compose

一个简单例子,Python建立一个记录访问次数的web网站。

app.py文件(注意缩进问题)
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
    countx = redis.incr('hits')
    return 'Hello World!{}\n'.format(countx)

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

Dockerfile文件
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]

docker-compose.yml文件
version: "2.0"
services:
 web:
  build: .
  ports:
   - "5000:5000"
   
 redis:
  image: "redis:alpine"

关于上面那几行可怜的内容我有话说,第一,版本号2.0根据实际情况自己写,书上是3,我的是1.8.x的所以我写2.0,还有就是格式 格式 格式,不要用tab键盘,并且看好了都在什么地方需要有空格。也查好空格的个数。

经过各种坑之后,终于跑起来了。

docker-compose up

Compose命令说明

命令对象与格式
Compose大部分命令的对象既可以是项目本身,也可以指定项目中的服务或者容器。如果没有别的说明,命令对象将是项目,意味着所有的服务都会受到命令影响。
命令查询格式 docker-compose [COMMAND] --help 
或者 docker-compose help [COMMAND]
docker-compose  命令格式:docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]

-f,--file FILE 指定Compose模板文件,默认docker-compose.yml
-p,--project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名称。
--x-networking 使用docker的可拔插网络后端特性
--x-network-driver DRIVER 指定网络后端的驱动,默认为bridge
--verbose 输出更多调试信息
-v,--ve
### Docker Compose 概述 Docker Compose 是一个用于定义运行容器 Docker 应用的工具。通过一个 `docker-compose.yml` 文件,可以轻松地定义应用中的服务、网络、存储卷等资源,并用一个命令启动所有服务。其主要用于简化多容器应用的开发、测试部署流程 [^1]。 ### 工作流程 编写 `docker-compose.yml`,定义服务、网络卷。使用 `docker-compose up` 命令,Compose 会拉取所需镜像(或构建镜像),创建网络卷,按依赖顺序启动容器,配置服务之间的通信。还可使用其他命令(如 `docker-compose down`)管理应用生命周期 [^2]。 ### 配置相关 若使用的是 Docker Compose V2(大多数用户),可以省略 `version`;若需要保持兼容性(比如部署在服务器上),建议使用 `version: "3.9"` [^3]。 ### 常用命令 | 命令 | 功能说明 | 示例 | | --- | --- | --- | | `docker compose up` | 构建并启动所有服务 | `docker compose up` <br> `docker compose up -d`(后台运行,推荐用于开发) | | `docker compose down` | 停止并删除所有容器、网络、匿名卷 | `docker compose down` | | `docker compose stop` | 停止服务,但不删除容器 | `docker compose stop` | | `docker compose start` | 启动已停止的服务容器 | `docker compose start` | | `docker compose restart` | 重启所有服务 | `docker compose restart` | | `docker compose build` | 手动构建服务镜像 | `docker compose build` | | `docker compose pull` | 拉取最新镜像 | `docker compose pull` | | `docker compose push` | 推送镜像到远程仓库 | `docker compose push` | | `docker compose ps` | 查看服务容器状态 | `docker compose ps` | | `docker compose logs` | 查看日志 | `docker compose logs redis` <br> `docker compose logs -f`(实时追踪日志) | | `docker compose exec` | 在容器中执行命令(支持交互) | `docker compose exec redis redis-cli` | | `docker compose run` | 启动一个一次性容器运行命令 | `docker compose run app npm install` | | `docker compose config` | 查看合并后的配置(调试用) | `docker compose config` | | `docker compose top` | 查看容器的进程信息 | `docker compose top` | ### 示例代码 以下是一个简单的 `docker-compose.yml` 示例: ```yaml version: "3.9" services: web: image: nginx:latest ports: - "80:80" redis: image: redis:latest ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值