Docker compose

Docker Compose 提供了一种方便、高效地管理多容器Docker应用程序的工具。通过docker-compose.yml文件定义服务间依赖、启动顺序等,实现一键启动和停止。本文介绍了Compose的安装、使用,包括构建、启动、停止及删除容器和网络的操作,并提供了官方配置示例和实战练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker builddocker run 等命令操作容器。

然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,这样效率很低,也不方便管理。

使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

yaml 官方示例

https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples

depends_on:依赖关系,如 web 依赖 redis 和 db,通过 depends_on 表明关系。

version: "3.9"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

安装

Docker Compose 是 Docker 的一个开源项目,目前托管到了 GitHub,需要前往 GitHub 下载。

sudo curl -L "https://github.com/docker/compose/releases/download/2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

由于存放在 GitHub,国内网络限制导致不太稳定,不推荐使用。

推荐使用 道客 提供的 Docker 极速下载 进行安装。

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

安装

[root@sail ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
[root@sail ~]# cd /usr/local/bin/
[root@sail bin]# ls
docker-compose

这样即表示安装成功。

授权

[root@sail ~]# chmod +x /usr/local/bin/docker-compose

查看版本

docker-compose version

[root@sail bin]# docker-compose version
Docker Compose version v2.2.3

显示了版本即代表 Docker Compose 安装完成。

卸载

rm /usr/local/bin/docker-compose

由于 Linux 一切皆文件,删除此文件夹即可完成 Docker Compose 的卸载。

使用

构建

创建项目目录

[root@sail sail]# mkdir docker-compose
[root@sail sail]# cd docker-compose

创建 app.py

[root@sail docker-compose]# vim app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)
@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

redis 是应用容器中 redis 容器的主机名,在同一网络下可以通过服务名访问,端口默认 6379。

创建 requirements.txt

[root@sail docker-compose]# vim requirements.txt
[root@sail docker-compose]# cat requirements.txt 
flask
redis

创建 Dockerfile

[root@sail docker-compose]# vim Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

创建 docker-compose.yml

[root@sail docker-compose]# vim docker-compose.yml
version: "3.3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

这个文件定义了两个服务:web 和 redis。

启动

docker-compose up

运行应用

在项目目录中,运行 docker-compose up 来启动应用程序。

第一次启动需要安装很多环境,比较缓慢。

[root@sail docker-compose]# docker-compose up

查看镜像

[root@sail docker-compose]# docker images

启动 Docker Compose 时,会自动拉取需要的镜像。

查看容器

[root@sail docker-compose]# docker ps

可以看到容器命名都带有数字,是因为需要集群管理,数字代表副本序号。

查看网络

[root@sail docker-compose]# docker network ls

项目中的内容都在同个网络下。

访问测试

[root@sail docker-compose]# curl localhost:5000
Hello World! I have been seen 1 times.
[root@sail docker-compose]# curl localhost:5000
Hello World! I have been seen 2 times.

Docker Compose 启动完成。

停止

docker-compose stop

示例

[root@sail docker-compose]# docker-compose stop
[+] Running 2/2
 ⠿ Container docker-compose-redis-1  Stopped                                                                                                                    0.2s
 ⠿ Container docker-compose-web-1    Stopped

停止并删除容器和网络

docker-compose down

docker-compose down 或者 ctrl + c
docker-compose通过编写docker-compose yml文件 可以通过compose一键启动或者停止!

将会删除启动的容器以及自动建的网络

示例

[root@sail docker-compose]# docker-compose down
[+] Running 3/3
 ⠿ Container docker-compose-web-1    Removed                                                                                                                              10.2s
 ⠿ Container docker-compose-redis-1  Removed                                                                                                                               0.2s
 ⠿ Network docker-compose_default    Removed
[root@sail docker-compose]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@sail docker-compose]# docker network ls

可以看出,容器网络都被删除了。

更多配置

https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples


yaml编写规则:

官方配置文档:https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on

docker-compose.yml 核心所在

#三层
version: "3.9" #版本
services: #服务
  web:
   images:
   bulid:
   ports:
   network:
   ...
  redis:
   ...
  mysql:
   ...
#第三层 其他配置 网络、数据卷、全局配置
networks:
  frontend:
  backend:
volumes:
  db-data:
configs:

启动顺序

version: "3.9"
services:
  web: # 3
    build: .
    depends_on:
      - db
      - redis
  redis: # 2
    image: redis
  db: # 1
    image: postgres

官网练习 compose一键部署wordpress
https://docs.docker.com/samples/wordpress/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值