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
相关文章
|
4天前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
132 75
|
18天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
161 77
|
2天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
42 19
|
15天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
75 24
|
1月前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
177 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
17天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
96 6
|
27天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
67 7
|
25天前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
30 2
|
1月前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
43 3
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用