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

embedded/2024/11/18 6:42:44/

目录

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.ppmy.cn/embedded/138462.html

相关文章

相机光学(四十二)——sony的HDR技术

1.概述 索尼的HDR技术包括以下几种,这些技术共同构成了索尼在HDR领域的技术矩阵,旨在提供更宽广的动态范围、更丰富的色彩表现以及更真实的光影效果: Multi-frame HDR(多帧异曝光HDR):这是一种通过不同曝光时间图像的多帧合成来实…

lua脚本语言基本原理

Lua是一种轻量级、高效的脚本语言,其原理主要包括以下几个方面: 词法分析 原理:词法分析器按从左到右的顺序对 Lua 脚本的源程序字符流进行扫描,依据词法规则将其识别为一个个单词,如关键字、标识符、常量、运算符等…

【ubuntu18.04】vm虚拟机复制粘贴键不能用-最后无奈换版本

我是ubuntu16版本的 之前费老大劲安装的vmware tools结果不能用 我又卸载掉,安装了open-vm-tools 首先删除VMware tools sudo vmware-uninstall-tools.pl sudo rm -rf /usr/lib/vmware-tools sudo apt-get autoremove open-vm-tools --purge再下载open-vm-tools s…

初识算法 · 模拟(1)

目录 前言: 替换所有的问号 题目解析 算法原理 算法编写 提莫攻击 题目解析 算法原理 算法编写 外观数列 题目解析 算法原理 算法编写 前言: ​本文的主题是模拟,通过三道题目讲解,一道是提莫攻击,一道是…

【IC每日一题:SVA简介】

IC每日一题:SVA简介 1 断言概念1.1 断言优势;1.2 断言类型1.2.1 立即断言1.2.2 并行断言1.2.3 并发断言Demo 2 SVA语法2.1 蕴含操作符:|-> 和 ->2.1.1 蕴含操作符 |>2.1.2 蕴含操作符|-> 2.2 延时操作符2.2.1 ##n 操作符 2.3 重复…

从0开始机器学习--Day28--PCA算法使用建议及初识异常检测

之前说到数据降维的方法是寻找到一个所有样本到其投影误差的投影平面,那么升维其实就是式子里的矩阵移到另一边即可: ,注意这里没有用x表示是因为除非本身所有样本点的投影误差都很小,可以近似认为就在线上,因为这里的…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具视频汇聚技术在智慧安防监控中的应用与优势

随着信息技术的快速发展和数字化时代的到来,安防监控领域也在不断进行技术创新和突破。NVR管理平台EasyNVR作为视频汇聚技术的领先者,凭借其强大的视频处理、汇聚与融合能力,展现出了在安防监控领域巨大的应用潜力和价值。本文将详细介绍Easy…

小程序-基于java+SpringBoot+Vue的经济新闻资讯设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…