[Docker#11] 容器编排 | .yml | up | 实验: 部署WordPress

目录

1. 什么是 Docker Compose

生活案例

2. 为什么要使用 Docker Compose

Docker Compose 的安装

Docker Compose 的功能

使用步骤

核心功能

Docker Compose 使用场景

Docker Compose 文件(docker-compose.yml)

模仿示例

文件基本结构及常见指令

Docker Compose 命令清单

官网参考地址

命令清单

命令格式

常见选项说明

常见命令说明

⭕up

down

run(局部测试)

示例

总结

实验

1. 创建 compose 目录

2. 进入 base 目录,创建 docker-compose.yml 文件

3. 输入以下内容

4. 输入 docker compose config 会做检查

部署 WordPress

1. 什么是 WordPress

2. 部署 WordPress

3. 常见问题

3.1 up、run 和 start 之间有什么区别

3.2 如何在同一主机上运行 Compose 文件的多个副本

3.3 可以控制服务启动顺序吗?


1. 什么是 Docker Compose

docker-compose 是 Docker 官方提供的一个开源工具,用于定义和运行多容器的 Docker 应用程序。

它使用 Python 编写,并通过调用 Docker 服务的 API 来管理和编排容器。

docker-compose 主要有两个核心概念:

  • 服务 (service)一个服务代表一个应用的容器,可以包含多个运行相同镜像的容器实例。
  • 项目 (project)项目是一组相关联的服务组成的业务单元,所有服务在一个 docker-compose.yml 文件中定义。
生活案例

可以将 docker-compose 比喻为一艘航空母舰,而舰上的战斗机和防空导弹则相当于不同的服务容器,它们共同协作完成任务。

2. 为什么要使用 Docker Compose

  • 简化管理:对于需要多个容器协同工作的应用,使用 docker-compose 可以简化启动、停止和管理这些容器的过程。
  • 环境一致性确保开发、测试和生产环境的一致性,避免“在我机器上能运行”的问题。
  • 配置集中化:将所有服务的配置集中在一个文件中,便于维护和管理。
Docker Compose 的安装

安装 Docker 时,默认已经安装了 docker-compose,安装的组件包名称为 docker-compose-plugin。可以通过以下命令检查安装是否成功:

docker compose version
Docker Compose 的功能
使用步骤
  1. 定义服务:在 docker-compose.yml 文件中定义构成应用程序的服务。
  2. 启动应用:使用 docker compose up 命令启动并运行整个应用程序。
核心功能
  • 启动、停止和重建服务
  • 查看服务状态
  • 流式传输服务日志
  • 多容器下 成功运行一次性命令
Docker Compose 使用场景
  • 单主机部署:快速搭建单节点开发或测试环境。
  • 不同环境隔离:通过指定不同的项目来运行不同的环境,实现环境隔离。

Docker Compose 文件(docker-compose.yml)

文件语法版本

目前官方支持三个主要版本:Version 1、Version 2 和 Version 3。Version 1 已被废弃,最新版本为 3.8,支持的 Docker Engine 版本不得低于 19.03.0。

版本查看:Legacy versions | Docker Docs

同时大家可以借助 官方文档 自行学习~

可以仿照如下配置 进行模仿

模仿示例

下面是详细讲解~

文件基本结构及常见指令
version: "3.8"services:servicename:image: # 必选,镜像的名字command: # 可选,覆盖默认命令environment: # 可选,设置环境变量volumes: # 可选,绑定数据卷networks: # 可选,指定网络ports: # 可选,端口映射expose: # 可选,暴露端口build: # 构建目录depends_on: # 服务依赖配置env_file: # 环境变量文件servicename2:image:command:networks:ports:servicename3:# ...volumes: # 可选,定义数据卷
networks: # 可选,定义网络

常见字段格式语法

  • image指定容器运行的镜像。
image: redis
image: redis:5
image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis
  • command覆盖容器启动的默认命令。
command: ["bundle", "exec", "thin", "-p", "3000"]
command: bundle exec thin -p 3000
  • entrypoint:覆盖容器默认的 entrypoint。
entrypoint: /code/entrypoint.sh
entrypoint: - php - -d - zend_extension=/usr/local/lib/php/extensions/no-debug-nonzts-20100525/xdebug.so- -d - memory_limit=-1 - vendor/bin/phpunit
  • environment:添加环境变量。
#map 语法 
environment: RACK_ENV: development SHOW: "true" USER_INPUT: #数组语法 
environment: - RACK_ENV=development - SHOW=true - USER_INPUT 
  • networks:指定容器运行的网络。
services: frontend: image: awesome/webapp networks: - front-tier - back-tier networks: front-tier: back-tier: 
  • volumes:将主机的数据卷或文件挂载到容器里。
services: db: image: postgres:latest volumes: - "/localhost/postgres.sock:/var/run/postgres/postgres.sock" - "/localhost/data:/var/lib/postgresql/data"
  • ports:指定端口映射。
ports: - "3000" - "3000-3005" - "8000:8000" - "9090-9091:8080-8081" - "49100:22" - "127.0.0.1:8001:8001" - "127.0.0.1:5000-5010:5000-5010" - "6060:6060/udp"
  • expose:暴露端口,但不映射到宿主机。
expose: - "3000" - "8000"
  • build:指定构建镜像的上下文路径。
build: ./dir
build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1 labels: - "com.example.description=Accounting webapp" - "com.example.department=Finance" - "com.example.label-with-empty-value"
  • depends_on设置依赖关系。
services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
  • healthcheck健康检查。
healthcheck: test: mysql --user=root --password='bit@123' -e "SELECT 1;" interval: 10s timeout: 5s retries: 10
  • env_file:从文件添加环境变量。
env_file: .env
env_file: - ./common.env - ./apps/web.env - /opt/secrets.env

tip:

docker-compose 是一个强大的工具,可以帮助你更高效地管理和编排多容器应用。

建议多阅读官方文档 (Compose file reference | Docker Docs),提高自学能力,以便更好地利用 docker-compose

具体的学习 后面会有一个小项目 来详细了解~


Docker Compose 命令清单

官网参考地址
  • 官方网站:Docker Compose 官方文档
命令清单

命令

功能

docker compose build

构建服务

docker compose config

规范的格式来显示服务配置

docker compose cp

在本地系统和服务容器之间拷贝文件

docker compose create

创建服务的容器

docker compose down

停止所有容器,并删除容器

docker compose events

从服务器获取实时事件

docker compose exec

在容器中执行命令

docker compose images

列出所有容器使用的镜像

docker compose kill

强制停止服务的容器

docker compose logs

显示日志

docker compose ls

显示所有项目

docker compose pause

暂停服务

docker compose port

列出所有的端口映射

docker compose ps

列出项目中目前的所有容器

docker compose pull

拉取服务镜像

docker compose push

推送服务镜像

docker compose restart

重启或者重启某个服务

docker compose rm

删除服务停止的容器

docker compose run

在指定服务容器上执行相关的命令

docker compose start

启动当前停止的某个容器

docker compose stop

停止当前运行的某个容器

docker compose top

显示运行的进程

docker compose unpause

恢复服务

docker compose up

构建、(重新)创建、启动并链接一个服务相关的容器

默认情况下如果容器已经存在,将会停止并尝试重新创建他们。并使用之前挂载的卷。
--no-recreate 参数可以让容器不被停止或者重新创建,
-d 表示后台运行

docker compose version

查看版本

命令格式

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。

docker compose [OPTIONS] COMMAND [ARGS...]
常见选项说明
  • -f, --file:指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
  • -p, --project-name:指定项目名称,默认将使用所在目录名称作为项目名。
常见命令说明
up

该命令的作用十分强大,它会尝试自动完成包括构建镜像、(重新)创建服务、启动服务并关联服务相关容器的一系列操作,可以直接通过该命令来启动一个项目。

docker compose up [options] [SERVICE...]
  • -d:在后台运行服务容器,推荐在生产环境下使用该选项。
  • --force-recreate:强制重新创建容器,不能与 --no-recreate 同时使用。
  • --no-recreate:如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
down

停止所有容器,并删除容器和网络。

docker compose down [options] [SERVICE...]
  • -v, --volumes:删除容器同时删除目录映射。
run(局部测试)

该命令可以在指定服务容器上执行相关的命令。

docker compose run [options] SERVICE [COMMAND] [ARGS...]
  • -d:后台运行容器。
  • --name NAME:为容器指定一个名字。
  • --entrypoint CMD:覆盖默认的容器启动指令。
  • -e KEY=VAL:设置环境变量值,可多次使用选项来设置多个环境变量。
  • -u, --user="":指定运行容器的用户名或者 uid。
  • --rm:运行命令后自动删除容器。
  • -p, --publish=[]:映射容器端口到本地主机。
示例
# 启动一个 Ubuntu 服务容器,并执行 ping docker.com 命令
docker compose run ubuntu ping docker.com
总结

docker-compose 提供了一系列强大的命令,可以更高效地管理和编排多容器应用。建议多阅读官方文档,提高自学能力,以便更好地利用 docker-compose


实验

1. 创建 compose 目录
mkdir -p /data/myworkdir/compose/base
cd /data/myworkdir/compose/base 
2. 进入 base 目录,创建 docker-compose.yml 文件
cd /data/myworkdir/compose/base/
vi docker-compose.yml
3. 输入以下内容
version: "3.8"
services:web:image: nginx:1.24.0environment:TEST: 1ports:- 8979:80networks:- mytestnetvolumes:- ./mynginxhome:/usr/share/nginx/htmldepends_on:mysql:condition: service_healthyredis:condition: service_healthymysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: "bit@123"networks:- mytestnetvolumes:- /data/maxhou/mysqldata/varlib/:/var/lib/mysqlhealthcheck:test: mysql --user=root --password='bit@123' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10redis:image: redis:7networks:- mytestnethealthcheck:test: redis-cli pinginterval: 10stimeout: 5sretries: 10
networks:mytestnet:
4. 输入 docker compose config 会做检查
docker compose config

6. 创建首页目录,编辑首页内容

mkdir -p ./mynginxhome
cd ./mynginxhome/
echo "Hello bit" > index.html

7. 启动服务

8. 通过页面访问

  • 打开浏览器,访问 http://localhost:8979,应能看到 "Hello bit"。

9. 服务 部署测试

docker compose stop
docker compose  start

11. 删除服务

docker compose down

通过以上步骤,可以成功创建并管理一个包含 Nginx、MySQL 和 Redis 服务的 Docker Compose 项目

这些操作涵盖了从创建目录、编写配置文件、启动服务、访问服务到停止和删除服务的全过程。


部署 WordPress

1. 什么是 WordPress

  • WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。
  • 它也可以作为内容管理系统(CMS)使用。
  • WordPress 提供了许多免费的第三方模板和插件,安装方式简单易用。
  • 官方支持中文版,并且有第三方中文语言包可供选择。用户可以通过学习 HTML、CSS 和 PHP 等技术来自定义模板。

2. 部署 WordPress

2.1 编写 Docker Compose YAML 文件

创建一个 docker-compose.yml 文件,内容如下:

version: '3.8'services:db:#服务image: mysql:5.7volumes:- ./db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: mywordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresshealthcheck:#健康检查test: ["CMD", "mysql", "--user=root", "--password=mywordpress", "-e", "SELECT 1;"]interval: 10stimeout: 5sretries: 10wordpress:depends_on:#基于第一个服务的healthdb:condition: service_healthyimage: wordpress:latestports:- "8770:80"restart: alwaysvolumes:- ./wordpress:/var/www/htmlenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress

2.2 运行站点

在包含 docker-compose.yml 文件的目录中,运行以下命令启动服务:

docker compose up -d

2.3 访问 Web 页面

打开浏览器,访问 http://localhost:8000,进入 WordPress 安装页面。

2.4 配置参数,点击安装

按照提示填写数据库信息和其他必要配置,点击安装按钮完成安装。

2.5 登录

使用安装过程中设置的用户名和密码登录 WordPress 后台。

2.6 进入后台

登录后,您可以进入 WordPress 后台进行进一步的配置和管理。

2.7 删除,释放空间

如果需要删除 WordPress 服务并释放空间,运行以下命令:

docker compose down

这将删除所有容器和网络,但不会删除卷。如果需要删除卷,可以使用以下命令:

docker compose down --volumes

3. 常见问题

3.1 uprunstart 之间有什么区别
  • docker compose up:用于启动或重新启动 docker-compose.yml 中定义的服务。默认情况下,它会在前台运行并显示所有容器的日志。使用 -d 参数可以在后台运行。
  • docker compose run:用于运行“一次性”或“临时”任务。它只会启动指定的服务及其依赖服务。适用于运行测试或执行管理任务。
  • docker compose start:仅用于重新启动之前创建但已停止的容器。不会创建新的容器。
3.2 如何在同一主机上运行 Compose 文件的多个副本

例如:

1. 创建 docker-compose-project1.yml 文件,并编写好

2.up

docker compose -f docker-compose-project1.yml -p project1 down

-f 选项

  • 用途:指定要使用的 docker-compose.yml 文件的路径。
  • 默认值:如果未指定 -f 选项,Docker Compose 会默认查找当前目录下的 docker-compose.yml 文件。

-p 选项

  • 用途:指定项目的名称。Docker Compose 使用项目名称为项目中的所有容器和其他资源创建唯一标识符。
  • 默认值:如果未指定 -p 选项,Docker Compose 会使用当前目录的名称作为项目名称。

3.3 可以控制服务启动顺序吗?

可以控制启动顺序,通过 depends_on 指定依赖关系,并结合 healthcheck 确保依赖服务健康后再启动当前服务。

例如,在上面的 docker-compose.yml 文件中,wordpress 服务依赖于 db 服务

并且只有当 db 服务健康时才会启动 wordpress 服务。

💡:如果说镜像和容器 vs 类和对象 ,那.yml就是main中对类的编排调用~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙NEXT应用示例:切换图片动画

【引言】 在鸿蒙NEXT应用开发中,实现图片切换动画是一项常见的需求。本文将介绍如何使用鸿蒙应用框架中的组件和动画功能,实现不同类型的图片切换动画效果。 【环境准备】 电脑系统:windows 10 开发工具:DevEco Studio NEXT B…

【spring 】Spring Cloud Gateway 的Filter学习

介绍和使用场景 Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关,它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中,Filter 扮演着非常重要的角色&#…

opencv(c++)图像的灰度转换

opencv(c)图像的灰度转换 quickopencv.h #pragma once #include <opencv2/opencv.hpp> using namespace cv; class QuickDemo { public:void colorSpace_Demo(Mat& image); };quickopencv.cpp #include "quickopencv.h"// QuickDemo类中的颜色空间演示函…

problem forward和solution backward有什么区别

Note: 在具体研究中&#xff0c;problem forward是先提出问题&#xff0c;然后围绕着科学问题设计出完美的解决方案&#xff1b;而solution backward是先盘算自己有哪些技术&#xff0c;有哪些解决方案&#xff0c;反过来去寻找和定义问题。

C++构造函数详解

构造函数详解&#xff1a;C 中对象初始化与构造函数的使用 在 C 中&#xff0c;构造函数是一种特殊的成员函数&#xff0c;它在创建对象时自动调用&#xff0c;用来初始化对象的状态。构造函数帮助我们确保每个对象在被创建时就处于一个有效的状态&#xff0c;并且在不传递任何…

使用WebSocket技术实现Web应用中的实时数据更新

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用WebSocket技术实现Web应用中的实时数据更新 使用WebSocket技术实现Web应用中的实时数据更新 使用WebSocket技术实现Web应用中…

[N1CTF 2018]eating_cms

打开题目 只有个登录框&#xff0c;其他什么都没有&#xff0c;尝试了一下弱口令&#xff0c;没能成功 尝试访问一下register.php&#xff0c;看看能不能注册个账号 注册页面&#xff0c;随便注册个账号登陆一下 url中感觉是个注入点&#xff0c;尝试使用file伪协议读取一下us…

算法之二分查找优化:leetcode34:在排序数组中查找元素的第一个和最后一个位置

题干 分析 问题背景 给定一个已排序的数组&#xff0c;目标是找到一个给定的目标值 target 在数组中的 第一个位置 和 最后一个位置。如果目标值不存在&#xff0c;返回 [-1, -1]。 由于题干要求的时间复杂度是 O(log n)&#xff0c;并且数组是有序的&#xff0c;考虑使用二分…

【3D Slicer】的小白入门使用指南九

定量医学影像临床研究与实践 任务 定量成像教程 定量成像是从医学影像中提取定量测量的过程。 本教程基于两个定量成像的例子构建: - 形态学:缓慢生长肿瘤中的小体积变化 - 功能:鳞状细胞癌中的代谢活动 第1部分:使用变化跟踪模块测量脑膜瘤的小体积变化第2部分:使用PET标…

为什么要使用Ansible实现Linux管理自动化?

自动化和Linux系统管理 多年来&#xff0c;大多数系统管理和基础架构管理都依赖于通过图形或命令行用户界面执行的手动任务。系统管理员通常使用清单、其他文档或记忆的例程来执行标准任务。 这种方法容易出错。系统管理员很容易跳过某个步骤或在某个步骤上犯错误。验证这些步…

C# 实现对指定句柄的窗口进行键盘输入的实现

在C#中实现对指定句柄的窗口进行键盘操作&#xff0c;可以通过多种方式来实现。以下是一篇详细的指南&#xff0c;介绍如何在C#中实现这一功能。 1. 使用Windows API函数 在C#中&#xff0c;我们可以通过P/Invoke调用Windows API来实现对指定窗口的键盘操作。以下是一些关键的…

JavaWeb--MySQL

1. MySQL概述 首先来了解一下什么是数据库。 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音…

Qt学习笔记(四)多线程

系列文章目录 Qt开发笔记&#xff08;一&#xff09;Qt的基础知识及环境编译&#xff08;泰山派&#xff09; Qt学习笔记&#xff08;二&#xff09;Qt 信号与槽 Qt学习笔记&#xff08;三&#xff09;网络编程 Qt学习笔记&#xff08;四&#xff09;多线程 文章目录 系列文章…

Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)

作者&#xff1a;来自 Elastic Ranjana Devaji, Dana Juratoni Elasticsearch 8.16 引入了 BBQ&#xff08;Better Binary Quantization - 更好的二进制量化&#xff09;—— 一种压缩向量化数据的创新方法&#xff0c;其性能优于传统方法&#xff0c;例如乘积量化 (Product Qu…

Flume和kafka的整合

1、Kafka作为Source 【数据进入到kafka中&#xff0c;抽取出来】 在flume的conf文件夹下&#xff0c;有一个flumeconf 文件夹&#xff1a;这个文件夹是自己创建的 创建一个flume脚本文件&#xff1a; kafka-memory-logger.conf Flume 1.9用户手册中文版 — 可能是目前翻译最完…

现代密码学|古典密码学例题讲解|AES数学基础(GF(2^8)有限域上的运算问题)| AES加密算法

文章目录 古典密码凯撒密码和移位变换仿射变换例题多表代换例题 AES数学基础&#xff08;GF&#xff08;2^8&#xff09;有限域上的运算问题&#xff09;多项式表示法 | 加法 | 乘法X乘法模x的四次方1的乘法 AES加密算法初始变换字节代换行移位列混合轮密钥加子密钥&#xff08…

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用) 文章目录 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)前言1. Spring Cloud Eureka 的概述1.1 服务治理概述1.2 服务注册与发现 2. 实践&#xff1a;创建单机 Eureka Server 注册中心2.1 需求说明 图解…

视频孪生技术在金融银行网点场景中的应用价值

作为国民经济重要的基础行业&#xff0c;金融行业在高速发展的同时衍生出业务纠纷、安全防范、职能管理等诸多问题&#xff0c;对安全防范和监督管理提出了更高的要求。因此&#xff0c;如何能更好的利用视频监控系统价值&#xff0c;让管理人员更简便的浏览监控视频、更快速的…

武汉EI学术会议一览表

武汉近期将举办BDDM2024大数据会议、ASIM2024智能制造会议、ICSGPS2025电网会议&#xff0c;吸引国内外学者参与&#xff0c;推动科技创新与产业发展&#xff0c;录用论文将提交EI索引。 武汉EI学术会议一览表 1.第二届大数据与数据挖掘国际会议&#xff08;BDDM 2024&#xf…

LeetCode Hot100 15.三数之和

题干&#xff1a; 思路&#xff1a; 首先想到的是哈希表&#xff0c;类似于两数之和的想法&#xff0c;共两层循环&#xff0c;将遍历到的第一个元素和第二个元素存入哈希表中&#xff0c;然后按条件找第三个元素&#xff0c;但是这道题有去重的要求&#xff0c;哈希表实现较为…