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

[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.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.kler.cn/a/398951.html

相关文章:

  • Linux 命令 | 每日一学,文本处理三剑客之awk命令实践
  • 2024山西省网络建设运维第十八届职业院校技能大赛解析答案(3. ansible 服务)
  • 《Python 网络爬虫》
  • 【Linux内核剖析】深入分析inet_init的处理机制
  • SpringBoot如何集成WebSocket
  • 《AI 之影》
  • Axure设计之文本编辑器制作教程
  • 字节青训-小C的外卖超时判断、小C的排列询问
  • Centos 7 安装wget
  • Vue3 provide 和 inject的使用
  • 深度学习面试题二
  • JavaWeb--MySQL
  • 聚合查询(查询)
  • 使用 Prompt API 与您的对象聊天
  • [Docker#9] 存储卷 | Volume、Bind、Tmpfs | -v/mount | MySQL 灾难恢复 | 问题
  • 基于Java Springboot学生管理系统
  • 2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤
  • 2024 Visual Studio Code的下载与安装
  • NavVis VLX3的精度怎么去进行验证?【上海沪敖3D】
  • 前端框架 详解遍历数组为何需要加Key
  • 简单的爬虫脚本编写
  • 每日计划-1117
  • 拓扑学与DNA双螺旋结构的奇妙连接:从算法到分子模拟
  • 【MySQL-1】MySQL数据库的基本操作
  • 如何在 Spring MVC 中使用 `@PostMapping`? 如何在 Spring MVC 中使用 `@PutMapping`?
  • Linux:版本控制器git和调试工具cgdb