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

Docker 基础使用(5)Compose

文章目录

  • Docker Compose 基础认识
  • Docker Compose 基础语法
  • Docker Compose 基础指令
  • Docker Compose 使用实例

Docker 基础使用(0)基础认识
Docker 基础使用(1)使用流程概览
Docker 基础使用(2)镜像与容器
Docker 基础使用(3)存储卷
Docker 基础使用(4)网络管理
Docker 基础使用(5)Compose

Docker Compose 基础认识

Docker Compose 的作用

docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。

简单理解:根据前面的学习,在容器启动时,由于 存储卷、网络管理、容器间的相互依赖等因素, 使得启动指令参数变的复杂,并且通常需要分多段指令执行。并且难以管理,为了解决这个问题,便需要使用 Docker Compose 。Docker Compose 作用即为容器编排。

Docker Compose 服务和项目的概念

服务 ( service ): 一个应用的容器。
项目( project ): 由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。 即一个docker-compose.yml通过组织容器定义项目。

Docker Compose 的具体功能

• 启动,停止和重建服务
• 查看正在运行的服务的状态
• 流式传输运行服务的日志输出
• 在服务上运行一次性命令

Docker Compose 的安装

一般来说安装Docker时会自动安装Docker Compose 。这个时候只需要使用 docker compose version指令来验证docker compose 应用是否存在即可。
在这里插入图片描述

Docker Compose 基础语法

首先看一个简单的 yaml docker-compose.yml配置文件。可以直观看到其是如何配置的,之后便是一些字段、语法、指令的说明。(仅作了解,在这个GPT那么发达时间点上,没必要记)

version: '3'
services:服务名称:image: 镜像名称:标签container_name: 容器名称ports:- "主机端口:容器端口"volumes:- 主机路径:容器路径environment:- 环境变量=值networks:- 网络名称networks:网络名称:driver: bridge
image字段形式
image: redis
image: redis:5
image: 
redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398
bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/rediscommand字段形式
command: ["bundle", "exec", "thin", "-p", "3000"]
command: bundle exec thin -p 3000
environment 字段
environment 添加环境变量
可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,
以确保 YML 解析器不会将其转换为 True 或 False#map 语法
environment:RACK_ENV: developmentSHOW: "true"USER_INPUT:
#数组语法
environment:- RACK_ENV=development- SHOW=true- USER_INPUT
networks字段:services:frontend:image: awesome/webappnetworks:- front-tier- back-tiermonitoring:image: awesome/monitoringnetworks:- adminbackend:image: awesome/backendnetworks:back-tier:aliases:- databaseadmin:aliases:- mysql
docker compose networks:front-tier:driver: bridgeback-tier:driver: bridgeadmin:driver: bridge
这段代码定义了三个网络:front-tier、back-tier 和 admin。
这些网络都是使用默认的 bridge 驱动程序,用于容器间的通信和隔离。front-tier: 可以用于前端服务的容器通信,例如Web服务器或者其他前端服务。
back-tier: 可以用于后端服务的容器通信,例如数据库或者消息队列等后端服务。
admin: 可以用于管理服务的容器通信,例如管理控制台或者日志收集服务等。
volumes 字段services:db:image: postgres:latestvolumes:- "/localhost/postgres.sock:/var/run/postgres/postgres.sock"- "/localhost/data:/var/lib/postgresql/data"#完整语法
services:backend:image: awesome/backendvolumes:- type: volume#命名卷source: db-datatarget: /datavolume:nocopy: true#绑定卷- type: bindsource: /var/run/postgres/postgres.socktarget: /var/run/postgres/postgres.sock

此外还有许多字段,总结一下它们的整体结构

version:  表示当前使用的 docker-compose 语法的版本
services1: # 服务,可以存在多个
servicename: # 服务名字,它也是内部 bridge 网络可以使用的 DNS name,
如果不是集群模式相当于 docker run 的时候指定的一个名称,#集群(Swarm)模式是多个容器的逻辑抽象image: # 必选,镜像的名字command: # 可选,如果设置,则会覆盖默认镜像里的 CMD 命令environment: # 可选,等价于 docker container run 里的 --env 选项
设置环境变量volumes: # 可选,等价于 docker container run 里的 -v 选项 绑定数据
卷networks: # 可选,等价于 docker container run 里的 --network 选项
指定网络ports: # 可选,等价于 docker container run 里的 -p 选项指定端口映
射expose: # 可选,指定容器暴露的端口build: #构建目录depends_on: #服务依赖配置env_file: #环境变量文件
servicename2:
.....

Docker Compose 基础指令

- **docker-compose up: 通过此命令启动docker-compose文件定义的所有服务。
- **docker-compose down: 停止并移除由docker-compose启动的所有容器。
- **docker-compose ps: 显示docker-compose启动的所有服务的状态。
- **docker-compose exec: 在正在运行的容器中执行命令。
- **docker-compose build: 构建或重新构建docker-compose文件定义的服务。
- **docker-compose logs: 显示docker-compose服务的日志输出。
- **docker-compose pull: 从docker镜像仓库拉取服务的最新镜像。
- **docker-compose restart: 重启docker-compose服务。
- **docker-compose pause: 暂停docker-compose服务。
- **docker-compose unpause: 取消暂停docker-compose服务。

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。 可以使用常用的选项如-f, --file 指定使用的 Compose 模板文件。(默认为 docker-compose.yml文件) 还可以使用-p, --project-name 指定项目名称。(默认将使用所在目录名称作为项目名)

Docker Compose 使用实例

(演示一个Docker Compose完整且简易的使用流程,注意docker-compose.yml依靠缩进确定字段范围,类似python)

完整指令 
1. 创建并进入docker-compose.yml目录
mkdir testcompose 
cd ./testcompose 2. 利用vim创建并编辑docker-compose.yml文件  
# 进入文件
vim docker-compose.yml 
# 编辑内容
version: "3.8"
services:web:image: nginx:1.24.0environment:TEST: 1ports:- 8979:80networks:- mytestnetvolumes:- ./mynginxhome:/usr/share/nginx/htmldepends_on:- mysql- redismysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: "wsk"networks:- mytestnetvolumes:- /data/maxhou/mysqldata/varlib/:/var/lib/mysqlhealthcheck:test: mysql --user=root --password='wsk' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10redis:image: redis:7networks:- mytestnethealthcheck:test: redis-cli pinginterval: 10stimeout: 5sretries: 10
networks:mytestnet:3. 检查所编写的docker-compose.yml文件语法是否正确
docker compose config4.启动
docker compose up -d5. 停止 / 删除服务
docker compose stop
docker compose down

在这里插入图片描述
7.

(报错)
在这里插入图片描述
(正确)
在这里插入图片描述
4 启动如遇到以下面的情况说明在加载镜像源,由于默认从外网加载,所以速度很慢,甚至无法加载。
在这里插入图片描述
此问题可参考以下解决方法
在这里插入图片描述

相关文章:

  • 560. 和为 K 的子数组
  • RoCE网络架构在高性能计算的应用
  • [Golang] go-kit 介绍和使用 (微服务实现工具)
  • 【漏洞复现】飞企互联-FE企业运营管理平台 treeXml.jsp SQL注入漏洞
  • 【每日刷题】Day66
  • Web前端开发12章:深入探索与实战解析
  • Elixir学习笔记——输入输出和文件系统
  • React组件通信方式总结
  • Golang学习笔记01
  • CMU最新论文:机器人智慧流畅的躲避障碍物论文详细讲解
  • 卡尔曼滤波原理及应用(一)
  • Web前端后端架构:构建高效、稳定与可扩展的互联网应用
  • cnvd_2015_07557-redis未授权访问rce漏洞复现-vulfocus复现
  • 【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用
  • vite-plugin-mock前端自行模拟接口返回数据的插件
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 0x05 Python数据分析,Anaconda八斩刀
  • ES10 特性的完整指南
  • es6--symbol
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js学习笔记
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • python学习笔记 - ThreadLocal
  • Vim 折腾记
  • Web标准制定过程
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 简单数学运算程序(不定期更新)
  • 入口文件开始,分析Vue源码实现
  • 问题之ssh中Host key verification failed的解决
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 说说我为什么看好Spring Cloud Alibaba
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (02)vite环境变量配置
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (接口自动化)Python3操作MySQL数据库
  • (十三)Maven插件解析运行机制
  • (循环依赖问题)学习spring的第九天
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转载)hibernate缓存
  • *Django中的Ajax 纯js的书写样式1
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • ?
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ 数据结构 - C++]红黑树RBTree
  • [.NET 即时通信SignalR] 认识SignalR (一)