Docker Compose部署案例

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本实验介绍了如何在DockerCompose中部署WordPress

Docker Compose部署案例


1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2. Docker Compose常用命令

在前面得实验中我们讲解了docker compose配置文件得常见用法,接下来我们再来学习一下docker compose得常用命令。本次实验使用了带有图形界面的实验环境,我们可以在命令行和图形界面直接切换。

  1. 环境准备

首先我们切换到Web Terminal命令行页面。进行试验环境准备。首先安装docker compose,在安装成功后使用vi创建docker-compose.yml文件,在docker-compose.yml文件中加入下列内容。

yum install -y docker-compose-plugin
vi docker-compose.yml

注意使用vim编辑器时:

  1. 需要先按i键进入编辑模式。
  2. 编辑完成之后按esc退出编辑模式。
  3. 然后按大写的ZZ保存并退出vim。

说明:注意设置MYSQL_ROOT_PASSWORD的值,即[MYSQL密码]。

version: "3.9"
services:
    web:
       container_name: web
       image: "httpd:latest"
       ports:
          - "5000:80"
          - "6000:8000"
    db:
       container_name: db
       image: "mysql"
       volumes:
          - "mysql-vol:/var/lib/mysql"
       environment:
          MYSQL_ROOT_PASSWORD: "[MYSQL密码]"
volumes:
    mysql-vol: {}

配置文件编写完毕后,我们通过docker compose来启动容器。

docker compose up -d

  1. 类Docker命令

接下来我们来测试下面的3条docker compose命令,这3条命令的用法和原生docker命令类似,不同的是如果命令需要指定特定容器,我们需要在命令中使用service名来代替容器名。

docker compose exec db ls
docker compose cp docker-compose.yml db:/root/
docker compose exec db bin/bash -c "cat /root/docker-compose.yml"

  1. 容器的启停删除

接下来我们来看通过docker compose进行容器服务组暂停/恢复,停止/重开,删除命令,这几条命令类似于docker compose up,只要使用默认配置文件docker-compose.yml,或者十月-f参数指定配置文件即可,不再需要指定容器名。

docker compose pause
docker compose unpause
docker compose stop
docker compose restart
docker compose down

3. 部署WordPress论坛

之前的实验中我们介绍了Docker和Docker Compose的大部分常见用法。接下来我们来部署一个实际WordPress论坛作为Docker的综合案例。

启动wordpress论坛至少需要创建两个容器,一个mysql数据库容器,和一个运行wordpress的apache容器,除此之外如果安装了redis缓存插件,则还需部署redis容器。因此这次我们编写三个YML文件,通过Docker Compose来部署这三个容器。

  1. 定义MySQL配置

首先我们先使用vi来编写db.yml作为MySQL的部署文件。在标准MySQL容器中,通过EntryPoint设置了启动命令,因此我们通过command设置启动参数。

除此之外标准的MySQL容器可以通过多种环境变量对服务进行配置,此处我们使用MYSQL_DATABASE环境变量指定默认数据库。

说明:注意设置MYSQL_ROOT_PASSWORD的值,即[MYSQL密码]。

vi db.yml
version: "3"
services:
  db:
    image: mysql:8.0
    command:
      - "--character-set-server=utf8mb4"
      - "--collation-server=utf8mb4_unicode_ci"
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: [MySQL root账号密码]
      MYSQL_DATABASE: wordpress
volumes:
  db_data:

  1. 定义Redis配置

接下来我们使用vi来编写cache.yml作为Redis的部署文件。

vi cache.yml
version: "3"
services:
  cache:
     depends_on:
       - db
     image: redis
     network_mode: "service:db"
     restart: always

  1. 定义WordPress配置

最后我们使用vi来编写app.yml作为WordPress的部署文件。在WordPress配置中,需要依赖db和cache两个服务。使用Container网络模型,绑定db服务的网卡。

同时我们希望将在宿主机的8000端口上发布应用的服务。由于WordPress服务共享了db服务的网卡,因此我们需要在db服务的网卡中进行端口绑定,此处我们可以使用属性值的多次定义功能。

在YML配置文件中,相同的属性值可以在不同的文件中进行定义,在docker compose加载的时候会将所有的属性值合并后统一处理,因此我们可以在app.yml中为db定义ports端口映射字段。

除此之外我们还可以在这里对db中的MYSQL_USER和MYSQL_PASSWORD两个环境变量的属性值进行覆盖。YML属性值允许覆盖,且以最后定义的为最终值。

在对db的环境变量覆盖时,我们可以使用&wp_passwd来将属性值定义为锚点。并且在wordpress中的WORDPRESS_ROOT_PASSWORD使用*wp_passwd来引用锚点作为属性值,这种写法表示这个属性值引用了锚点位置的属性值。也就是说在WordPress中数据库的root用户密码和db.yml中数据库的默认用户密码一致。这种写法可以避免因为拼写错误导致的数值不一致。

说明:注意设置MYSQL_ROOT_PASSWORD的值,即[MYSQL密码]。

vi app.yml
version: "3"
services:
  db:
    ports:
      - "8000:80"
    environment:
      MYSQL_ROOT_PASSWORD: &wp_passwd [MySQL wordpress账号密码]
  app:
    depends_on:
      - db
      - cache
    image: wordpress:6.0
    network_mode: "service:db"
    restart: always
    environment:
      WORDPRESS_DB_HOST: 127.0.0.1
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: *wp_passwd

  1. 启动容器

配置文件编写完毕后我们就可以启动Project。这里需要注意的时,我们将三个服务写在了三个不同的文件中,当docker compose需要引用多个配置文件时,我们只需要在参数列表中添加多个-f [配置文件名]的方式即可。

docker compose -f db.yml -f cache.yml -f app.yml -p wp up -d

4. 切换到图形界面

WordPress论坛的容器部署成功后,我们就可以进入图形界面对WordPress论坛进行初始化工作了。本小节我们来介绍接入图形界面的方法

  1. 切换到图形界面

首先我们点击网页的左上角的切换到远程桌面按钮,点击该按钮后,主界面将从web terminal切换到远程桌面

  1. 启动浏览器

在远程桌面中,有三个图标,我们点击chromium网页浏览器,后续的操作我们都将在浏览器中进行

  1. 获得ECS公网地址

在进行配置之前我们还需要获得实验服务器的公网IP。我们在界面的左侧选择云产品资源。然后再下方面找到ECS公网地址。我们记录这个地址,该地址将在后面的实验中被用到。

5. 初始化WordPress论坛

接下来我们将在图形界面中的chromium浏览器对WordPress进行图形化配置。

  1. 在浏览器中访问WordPress

在浏览器中输入http://[ECS公网地址]:8000,即可进入WordPress初始化界面。

  1. 初始化WordPress

在初始化界面中我们首先选择wordpress的界面语言,并且按"继续"

继续配置wordpress的相关信息,输入论坛名称,用户名,密码等,在邮箱输入栏输入符合标准的邮箱格式即可。然后按"安装WordPress"

  1. 登录WordPress

安装之后点击登录,即可进入登录界面,在登陆界面中输入上一个步骤填写的用户密码并点击登录。

登录之后即可进入wordpress管理后台。后台界面主要由管理员使用。

接下来我们进入wordpress前台浏览界面。输入网址 http://[ECS公网地址]:8000。出现如下浏览界面即说明wordpress安装成功。

6. 在WordPress中安装插件

  1. 插件管理

  1. 安装reids插件

  1. 切换至【WebTerminal】,执行如下命令验证插件生效。

docker exec -it wp-cache-1 redis-cli
keys *

实验地址:https://developer.aliyun.com/adc/scenario/d72359117ef14556a047fbbc19c0d3bc

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
214
分享
相关文章
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
208 91
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
Stirling-PDF 是一款基于 Docker 的本地化 PDF 编辑工具,支持 50 多种 PDF 操作,包括合并、拆分、转换、压缩等,同时提供多语言支持和企业级功能,满足个人和企业用户的多样化需求。
61 6
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
122 44
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
151 42
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
38 19
docker compose 安装 kafka
通过本文的步骤,您可以快速在本地使用 Docker Compose 安装并配置 Kafka 和 Zookeeper。Docker Compose 简化了多容器应用的管理,方便快速搭建和测试分布式系统。
67 2
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
96 27
docker部署apollo
docker部署apollo步骤
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等