docker-compose

目录

一、为什么要学docker-compose

二、docker-compose是什么

三、docker-compose的组成

四、docker-compose的三层结构

五、docker-compose的配置文件

六、docker-compose的使用场景

七、docker-compose的实现原理

八、docker-compose部署

[Docker Compose 环境安装](#Docker Compose 环境安装)

[YAML 文件格式及编写注意事项](#YAML 文件格式及编写注意事项)

[使用 YAML 时需要注意下面事项:](#使用 YAML 时需要注意下面事项:)

数据结构:

示例:

[yaml 格式](#yaml 格式)

[Json 格式](#Json 格式)

[Docker Compose配置常用字段](#Docker Compose配置常用字段)

[Docker Compose 常用命令](#Docker Compose 常用命令)

示例:搭建基于Nginx的Docker容器


一、为什么要学docker-compose

我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,因此我们需要学习了解Docker Compose 。

二、docker-compose是什么

Docker Compose 是 Docker 官方的开源项目,用于快速编排 Docker 容器集群。它允许用户在一个模板(使用 YAML 格式)中定义一组相关联的应用容器,这被称为一个项目(project)。例如,一个项目可以包括 Web 服务容器和后端数据库服务容器等。

三、docker-compose的组成

Docker Compose是用于定义和运行多容器Docker应用程序的工具。它使用YAML文件来配置应用程序的服务、网络和卷等。以下是Docker Compose的主要组成部分:

YAML文件: Docker Compose使用YAML文件来定义应用程序的服务、网络、卷等配置。这个文件通常称为docker-compose.yml。在这个文件中,可以指定应用程序的各个服务、它们之间的关系、容器的映像、端口映射、环境变量等。

Service(服务): 服务是应用程序的组件,可以是一个容器或一组相关的容器。在Docker Compose中,每个服务都由一个或多个容器组成,这些容器一起提供应用程序的特定功能。

Container(容器): 容器是Docker化的应用程序运行的实例。每个服务在Docker Compose中都会映射到一个或多个容器。

Networks(网络): Docker Compose允许定义应用程序中的网络。可以指定容器之间的网络连接方式,以实现服务之间的通信。

Volumes(卷): 卷是用于在容器之间共享数据的机制。在Docker Compose中,可以定义卷以在服务之间传递数据。

Environment Variables(环境变量): 可以在Docker Compose文件中设置环境变量,这些变量将传递给容器,以影响它们的行为。

Build(构建): 如果需要构建自定义镜像,可以使用Docker Compose文件中的build指令,指定构建上下文和Dockerfile的位置。

Ports(端口): 可以在Docker Compose文件中定义端口映射,将容器内部的端口映射到主机上的端口,以允许外部访问服务。

四、docker-compose的三层结构

Docker Compose 将管理的容器分为三层:工程(project)、服务(service)以及容器(container)。

工程(project): 由运行目录下的所有文件组成,包括 docker-compose.yml、extends 文件或环境变量文件。工程名默认为当前目录名。

服务(service): 一个工程可以包含多个服务,每个服务定义了容器运行的镜像、参数和依赖关系。

容器(container): 一个服务可以包含多个容器实例。

五、docker-compose的配置文件

Docker Compose 的工程配置文件默认为 docker-compose.yml,也可以通过环境变量 COMPOSE_FILE 或 -f 参数来自定义配置文件。该文件定义了多个有依赖关系的服务及每个服务运行的容器。

六、docker-compose的使用场景

在实际工作中,经常会遇到需要多个容器相互配合来完成某项任务的情况。比如,要实现一个 Web 项目,除了 Web 服务容器,还需要后端的数据库服务容器和可能的负载均衡容器。Compose 允许用户通过一个单独的 docker-compose.yml 模板文件来定义这组相关联的应用容器为一个项目。

七、docker-compose的实现原理

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

八、docker-compose部署
Docker Compose 环境安装

Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose

#下载

curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

#安装

chmod +x /usr/local/bin/docker-compose

#查看版本

docker-compose --version

YAML 文件格式及编写注意事项

YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 XML数据描述语言,语法比 XML 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来。

使用 YAML 时需要注意下面事项:

●大小写敏感:YAML 是大小写敏感的。 ●缩进表示层级关系:使用缩进表示数据的层次结构。 ●不支持制表符 tab 键缩进,只能使用空格缩进 ●缩进的空格数目不重要: 只要相同层级左对齐即可,通常开头缩进2个空格。 ●注释: 使用 # 号表示注释。 ●符号字符后缩进1个空格: 冒号 : 、逗号 , 、横杠 - 等符号后通常缩进1个空格。 ●引号的使用: 单引号''引起来的字符串会被处理为普通字符串,双引号""内的特殊字符会被解析为其本身的意思。 name: "Hi,\nTom"

数据结构:

●对象映射: 键值对的字典 animal: pets

●序列数组: 一组按次序排列的列表

  • Cat

  • Dog

  • Goldfish

"Cat", "Dog", "Goldfish"

●布尔值 debug: true debug: false

示例:
yaml 格式

languages: #序列的映射

  • Java

  • Golang

  • Python websites: #映射的映射 cpu: 2 memory: 1024M swap: 2048M disk: 60G

键:{值}

Json 格式

{ languages: [ 'Java', 'Golang', 'Python' ], resources: { cpu: '2', memory: '1024M', swap: '2048M', disk: '60G' } }

简单结构示例

person: name: Alice age: 25 address: city: Wonderland country: Fantasyland hobbies:

  • Reading

  • Traveling

  • Coding

复杂结构示例:

school: university departments:

  • name: computer science courses:

    • course_name: algorithms professor: Dr. Smith

    • course_name: databases professor: Dr. Johnson

      • name: literature courses:
    • course_name: poetry professor: Dr. Williams

    • course_name: novels professor: Dr. Davis location: campus: west city: Example City country: Example Country

Docker Compose配置常用字段

build:

描述: 指定 Dockerfile 文件名。

补充: 若要指定 Dockerfile 文件,需要在 build 标签的子级标签中使用 dockerfile 指定。

dockerfile:

描述: 构建镜像时使用的 Dockerfile 文件路径。

context:

描述: 构建镜像的上下文路径,可以是 Dockerfile 的路径,也可以是指向 git 仓库的 URL 地址。

image:

描述: 指定服务使用的镜像。

command:

描述: 覆盖容器启动后默认执行的命令。

container_name:

描述: 指定容器名称,唯一性,不能与其他容器名称重复。

deploy:

描述: 指定部署和运行服务的相关配置,仅在 Swarm 模式使用。

environment:

描述: 添加环境变量。

networks:

描述: 加入网络,引用顶级 networks 下的条目。

network_mode:

描述: 设置容器的网络模式,如 host、bridge 等。

ports:

描述: 暴露容器端口,与 -p 选项相同。

volumes:

描述: 挂载宿主机目录或命名卷到容器,命名卷需在顶级 volumes 定义卷名称。

volumes_from:

描述: 从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 '2' 支持。

hostname:

描述: 容器主机名。

sysctls:

描述: 在容器内设置内核参数。

links:

描述: 连接到另一个容器,使用 - 服务名称[:服务别名]。

privileged:

描述: 赋予容器 root 权限,慎用,不安全,值为 true 或 false。

restart:

描述: 设置容器的重启策略,如 no、always、on-failure 等。

no:默认策略,在容器退出时不重启容器。 on-failure:在容器非正常退出时(退出状态非0),才会重启容器。 on-failure:3:在容器非正常退出时重启容器,最多重启3次。 always:在容器退出时总是重启容器。 unless-stopped:在容器退出时总是重启容器,但不考虑在 Docker 守护进程启动时就已经停止的容器。

depends_on:

描述: 定义容器之间的依赖关系,确保指定的服务在启动之前已经启动。在使用 Compose 时,解决容器启动顺序和依赖关系的问题。

示例:

php: depends_on:

  • apache

  • mysql

Docker Compose 常用命令

build:

描述:重新构建服务,通常在对应的 Dockerfile 发生变化时使用,以确保使用最新的配置和代码。

ps:

描述:列出当前正在运行的容器,显示容器的状态、ID、名称等信息。

up:

描述:创建和启动容器。该命令根据 docker-compose.yml 文件中的配置启动服务。

exec:

描述:在容器内执行命令。可以通过这个命令进入正在运行的容器并执行特定的命令,用于调试和管理容器内部。

scale:

描述:指定一个服务容器的启动数量。允许动态地调整服务容器的规模,适用于需要水平扩展的场景。

top:

描述:显示容器内的进程。可以查看容器内部正在运行的进程,有助于监控和排查问题。

logs:

描述:查看容器的输出日志。用于检查容器的运行日志,帮助定位和解决问题。

down:

描述:停止并删除容器、网络、数据卷和镜像。用于清理整个应用程序的相关资源。

stop/start/restart:

描述:停止/启动/重启服务。分别用于停止、启动和重启指定的服务。
3.

Docker Compose 文件结构

yum install -y tree

tree /opt/compose_nginx

/opt/compose_nginx/

├── docker-compose.yml #创建模板脚本

├── nginx

│?? ├── Dockerfile #创建容器脚本

│?? ├── nginx-1.12.0.tar.gz #复制源码包

│?? └── run.sh #启动服务脚本

└── wwwroot

└── index.html #站点网页

示例:搭建基于Nginx的Docker容器

cd /opt

mkdir compose_nginx

cd compose_nginx

mkdir nginx

cd nginx/

此时顺便将nginx安装包拖进来

vim Dockerfile

mkdir /opt/compose_nginx/wwwroot

echo "<h1>this is test web</h1>" > /opt/compose_nginx/wwwroot/index.html

docker network ls

vim run.sh

进入到compose_nginx目录

vim docker-compose.yml

#上传 docker-compose安装包

mv docker-compose /usr/local/bin/

chmod +x /usr/local/bin/docker-compose

yum install -y tree

tree compose_nginx/

docker-compose --version

cd compose_nginx/

docker-compose -f docker-compose.yml up -d

docker ps -a

docker-compose ps

浏览器访问:http://192.16886.30:1216

相关推荐
菜鸟思维3 分钟前
优化NextJs 项目的Docker 镜像 从3.62G 优化到 296.85M
docker
学Linux的语莫11 分钟前
linux的root目录缓存清理
linux·运维·服务器
oMcLin13 分钟前
如何在 SUSE Linux Enterprise Server 15 上部署并优化 K3s 集群,提升轻量级容器化应用的资源利用率?
linux·运维·服务器
怣疯knight18 分钟前
Docker Desktop 4.55.0版本安装成功教程
windows·docker
Run Out Of Brain27 分钟前
解决nginx代理配置下wordpress的 /wp-admin/返回 302 重定向到登录页问题
运维·nginx
Ghost Face...1 小时前
深入解析YT6801驱动模块架构
linux·运维·服务器
线束线缆组件品替网1 小时前
Amphenol LTW 防水线缆 IP67/IP68 结构解析
运维·网络·人工智能·汽车·硬件工程·材料工程
放寒假脚后跟v1 小时前
Pod 的 YAML 文件中 exitCode 字段的具体含义、不同取值代表的场景
运维·云原生·容器·kubernetes·k8s
东方佑1 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
原神启动11 小时前
K8S(五)—— YAML文件解析
java·容器·kubernetes