Docker Compose命令讲解+文件编写

docker compose的用处是对 Docker 容器集群的快速编排。(源码)

一个 Dockerfile 可以定义一个单独的应用容器。但我们经常碰到需要多个容器相互配合来完成某项任务的情况(如实现一个 Web 项目,需要服务器、数据库、redis等),Compose 刚好允许通过一个单独的 docker-compose.yml 文件来定义一组相关联的应用容器为一个项目(project)。

一、安装

安装完docker(docker安装:Ubuntu22)后就已经完成了compose的安装了,也可从Releases · docker/compose (github.com)仓库安装。

二、概念

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

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

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

三、应用举例

使用docker compose启动一个python服务器,访问后可显示访问次数。

服务器源码:(对"/"路径建立路由,访问后调用hello函数,在redis中给hits的value+1,然后输出到网页)

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis',port=6379)

@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Hello,已被访问{}次。\n'.format(count)

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: '3'
services:

  web:
    build: .
    ports:
     - "5000:5000"

  redis:
    image: "redis:alpine"

然后启动容器:sudo docker compose up

Docker Compose命令讲解+文件编写_第1张图片

即可启动项目,访问5000端口:

Docker Compose命令讲解+文件编写_第2张图片

四、命令讲解

4.1docker compose up

docker compose up命令会构建镜像,创建网络、卷,并启动容器,容器名称以项目名称(目录名称)为前缀,以一个数子为后缀(Docker Compose允许扩缩容);创建的镜像、容器、网络和卷可直接使用docker命令进行查看。

  • 参数:
    • -f:docker-compose up会查找名为 docker-compose.yml 或 docker-compose.yaml 的 compose 文件,或使用 -f 指定 compose 文件名。
    • -d:在后台启动应用。

4.2docker compose down

上述项目执行down后:

过程:

  1. 关闭服务。
  2. 删除服务。(注意:容器和网络会被删除,数据卷和镜像不会,所以再次启动就能快很多)

4.3docker compose ps

查看项目状态:

显示容器名称、其中运行的Command、当前状态以及其监听的网络端口。

4.4docker compose top

列出各个服务(容器)内运行的进程。(PID编号为在宿主机上的进程ID。)

Docker Compose命令讲解+文件编写_第3张图片

4.5docker compose stop

停止应用(关闭服务),不删除资源:

4.6docker compose start

启动停止的应用。

4.7docker compose restart

重启应用。

4.8docker compose rm

删除已经停止的应用(仅容器和网络)。

五、docker-compose文件编写

建议查看:Compose 模板文件 | Docker 从入门到实践

建议最好还是配合chatgpt进行编写,直接手写可能每一步都会报问题(〃'▽'〃)

你可能感兴趣的:(Docker学习,docker,容器,运维)