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

news2024/11/21 23:16:36

目录

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.0
    environment:
      TEST: 1
    ports:
      - 8979:80
    networks:
      - mytestnet
    volumes:
      - ./mynginxhome:/usr/share/nginx/html
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "bit@123"
    networks:
      - mytestnet
    volumes:
      - /data/maxhou/mysqldata/varlib/:/var/lib/mysql
    healthcheck:
      test: mysql --user=root --password='bit@123' -e "SELECT 1;"
      interval: 10s
      timeout: 5s
      retries: 10
  redis:
    image: redis:7
    networks:
      - mytestnet
    healthcheck:
      test: redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 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.7
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: mywordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    healthcheck:#健康检查
      test: ["CMD", "mysql", "--user=root", "--password=mywordpress", "-e", "SELECT 1;"]
      interval: 10s
      timeout: 5s
      retries: 10

  wordpress:
    depends_on:#基于第一个服务的health
      db:
        condition: service_healthy
    image: wordpress:latest
    ports:
      - "8770:80"
    restart: always
    volumes:
      - ./wordpress:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_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.coloradmin.cn/o/2244944.html

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

相关文章

C++时间复杂度与空间复杂度

一、时间复杂度(Time Complexity) 1. 概念 时间复杂度是用来衡量算法运行时间随着输入规模增长而增长的量级。它主要关注的是算法执行基本操作的次数与输入规模之间的关系,而非具体的运行时间(因为实际运行时间会受硬件、编程语…

【Linux】【Shell】Shell 基础与变量

Shell 基础 Shell 基础查看可用的 Shell判断当前 Shell 类型 变量环境变量查看环境变量临时环境变量永久环境变量PATH 变量 自定义变量特殊赋值(双引号、单引号、反撇号) 预定义变量bashrc Shell 基础 Shell 是一个用 C 语言编写的程序,相当于是一个翻译&#xff0c…

【SpringBoot】26 实体映射工具(MapStruct)

Gitee 仓库 https://gitee.com/Lin_DH/system 介绍 现状 为了让应用程序的代码更易于维护,通常会将项目进行分层。在《阿里巴巴 Java 开发手册》中,推荐分层如下图所示: 每层都有对应的领域模型,即不同类型的 Bean。 DO&…

理解和选择Vue的组件风格:组合式API与选项式API详解

目录 前言1. Vue 的两种组件风格概述1.1 选项式 API:直观且分块清晰1.2 组合式 API:灵活且逻辑集中 2. 深入理解组合式 API 的特点2.1 响应式变量与函数式编程2.2 逻辑组织更清晰2.3 更好的代码复用 3. 应用场景分析:如何选择 API 风格3.1 适…

Windows和mac OS共用VMware虚拟机

在Windows下使用VMware Workstation Pro创建的虚拟机,是以文件夹形式存储在硬盘中的,在mac OS中对应的虚拟机产品是VMware Fusion,那么在Windows下创建的虚拟机怎么在mac OS中使用呢? 在下图中我们可以看到,Windows 1…

【K8S系列】Kubernetes Pod节点ImagePullBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,当某个 Pod 的容器无法从指定的镜像仓库拉取镜像时,Pod 的状态会变为 ImagePullBackOff。这通常是因为指定的镜像不存在、镜像标签错误、认证失败或网络问题等原因。 以下是关于 ImagePullBackOff 的详细分析及解决方案。 1. ImagePullBackOff 状态分析 1.…

04 —— Webpack打包CSS代码

加载器css-loader :解析css代码 webpack 中文文档 | webpack中文文档 | webpack中文网 加载器style-loader:把解析后的css代码插入到DOM style-loader | webpack 中文文档 | webpack中文文档 | webpack中文网 准备css代码,放到src/login目…

单元测试框架gtest学习(二)—— 认识断言

前言 我们在上一篇文章中,简要介绍了gtest是如何使用的 单元测试框架gtest学习(一)——初始gtest-CSDN博客 这篇文章我们主要总结gtest中的所有断言相关的宏。首先需要明确的是,gtest是通过各种断言宏进行测试的,而这…

网安瞭望台第2期:零日漏洞密集爆发、2024年常见网络安全漏洞类型及分析

国内外要闻 Ubuntu 服务器 Needrestart 软件包惊现严重安全漏洞 近日,Ubuntu 服务器(自 21.04 版本起默认安装)的 Needrestart 软件包被曝存在多个可追溯至数十年前的安全漏洞。这些漏洞允许本地攻击者在无需用户交互的情况下获取根…

PDF内容提取,MinerU使用

准备环境 # python 3.10 python3 -m pip install huggingface_hub python3 -m pip install modelscope python3 -m pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com下载需要的模型 import json import osimport requests from huggingface_hub…

【TDOA最小二乘解算】两步最小二乘迭代的TDOA解算方法,适用于二维平面、自适应锚点(附MATLAB代码)

本文所述的MATLAB代码实现了一个基于两步加权最小二乘法的二维目标定位算法,利用多个锚点(基站)和时间差到达(TDOA)数据来估计未知目标的位置。 文章目录 运行结果代码代码功能概述代码结构和详细说明初始化部分参数和…

Comfy UI 工作流(三)高清修复 - 低显存放大

前面提到的几种高清修复、高清放大都会占用,较多的现存。 和 Sd Web UI 中的 SD Upscale 放大一样,Comfy UI 中也提供有类似的自定义节点,通过分块的方式进行图片放大,从而减少现、显存的占用,该方式也经常用于 Com…

形态学图像处理(Morphological Image Processing)

形态学图像处理(Morphological Image Processing) 前言 ‍ 本博客为个人总结数字图像处理一课所写,并给出适当的扩展和相应的demo。 写博客跟做 checkpoint​ 很像,毕竟个人还不能达到那种信手拈来的境界,忘了就是从零开始训练&#xff0…

数据库迁移--laravel进阶篇

本地开发中的数据库和线上发布的数据库是不一样的,每进行一个线上版本的更新,很可能也涉及大量数据库的改动,那么这些数据库的改动在laravel中可以使用数据库迁移来处理。 比如我想创建一张flights数据表 执行php artisan make:migration create_flights_table命令就能自动生…

正则表达式完全指南,总结全面通俗易懂

目录 元字符 连接符 限定符 定位符 修饰符(标记) 运算符优先级 普通字符集及其替换 零宽断言 正向先行断言 负向先行断言 正向后发断言 负向后发断言 捕获组 普通捕获组 命名捕获组 PS:非捕获组 正则表达式在线测试: 正则在线测试工具 …

vulfocus在线靶场:CVE-2018-7600 速通手册

目录 一、启动环境,访问页面,语言选择中文,打开phpmyadmin 二、phpmyadmin中打开小房子 三、选择显示php信息 四、ctrlF,搜索flag,复制粘贴到任务中,通关 一、启动环境,访问页面,…

springboot实战(13)(@PatchMapping、@RequestParam、@URL、ThreadLocal线程局部变量)

目录 一、PATCH请求方式。 二、实现用户更新头像功能。 三、注解RequestParam。 四、注解URL。(对传来的参数是否是合法地址进行校验) 一、PATCH请求方式。 patch中文翻译:局部、小块。PATCH 请求主要用于对已存在的资源进行局部修改&#xf…

记录下,用油猴Tampermonkey监听所有请求,绕过seesion

油猴Tampermonkey监听所有请求,绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口,这个接口的页面入口被隐藏掉了,不能通过页面调用,幸好之前有想过逆向破解通过账号密码模拟登录后拿到token,请求该…

Spring Cloud Hystrix 豪猪哥 服务容错与保护组件

Spring Cloud Hystrix 豪猪哥 服务容错与保护组件 一、Spring Cloud Hystrix概述1.简介2.核心功能3.雪崩效应 二、Hystrix服务降级1.服务降级简介2.样例准备3.服务提供者降级4.服务消费者降级5.全局降级方法6.对API接口降级方法 三、Hystrix服务熔断1.服务熔断机制简介2.熔断工…

Facebook商城号封号的原因是什么?

Facebook商城作为一个重要的销售平台,不仅为商家提供了巨大的市场机会,也带来了一系列需要警惕的风险,其中包括账号被封的风险。本文将从环境异常、频繁操作和违规行为三个主要方面深入探讨,解析导致Facebook商城账号被封禁的具体…