当前位置: 首页 > news >正文

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 Redisapp = 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

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

四、命令讲解

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。)

4.5docker compose stop

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

4.6docker compose start

启动停止的应用。

4.7docker compose restart

重启应用。

4.8docker compose rm

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

五、docker-compose文件编写

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

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

http://www.lryc.cn/news/193753.html

相关文章:

  • Linux bash: ipconfig: command not found解决方法
  • 【面试算法——动态规划 21】正则表达式匹配(hard) 交错字符串
  • 基于Python实现的神经网络分类MNIST数据集
  • 设计模式之是简单工厂模式
  • Java应用的混淆、加密以及加壳
  • 【Linux】:Linux中Shell命令及其运行原理/权限的理解
  • 传统项目管理与敏捷项目管理
  • 只要掌握Win32应用程序错误的来龙去脉,就没必要惊慌失措
  • ABB机器人关于重定位移动讲解
  • Ceph介绍与部署
  • sklearn 机器学习基本用法
  • Ionic4 生命周期钩子函数和angular生命周期钩子函数介绍
  • Hive+Flume+Kafka章节测试六错题总结
  • 【随笔】论多线程CPU离线渲染器的实现:A CPU BASED OFFLINE RENDERING ENGINE
  • 多输入多输出 | MATLAB实现CNN-GRU-Attention卷积神经网络-门控循环单元结合SE注意力机制的多输入多输出预测
  • Ubuntu:Arduino IDE 开发环境配置【保姆级】
  • Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证
  • Pycharm 2023 设置远程调试
  • asp.net core在其他程序集获取HttpContext
  • UWB NI框架嵌入式实现——Qorvo示例
  • Linux OS源的问题记录
  • 数据库:Hive转Presto(五)
  • SQL中for xml path 的用法
  • 【TensorFlow2 之014】在 TF 2.0 中实现 LeNet-5
  • 【2023】redis-stream配合spring的data-redis详细使用(包括广播和组接收)
  • 飞书应用机器人文件上传
  • 高版本Mac系统如何打开低版本的Xcode
  • 测试H5需要注意的交互测试用例点
  • 1014蓝桥算法双周赛,学习算法技巧,助力蓝桥杯
  • C语言之通讯录的实现篇