通过Docker部署WordPress 论坛
1. 创建相关实验资源
- 在体验实验室,单击创建资源。
- (可选)在实验室⻚⾯左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、⽤户信息等)。 说明:资源创建过程需要1~3分钟。
2. 启动wordpress论坛至少需要创建两个容器,一个mysql数据库容器和一个运行wordpress的apache容器。
启动wordpress论坛至少需要创建两个容器,一个mysql数据库容器和一个运行wordpress的apache容器。
- 首先我们先来编写docker-compose.yml文件
vi docker-compose.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 MYSQL_USER: wordpress MYSQL_PASSWORD: "[MySQL wordpress账号密码]" wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: "[MySQL wordpress账号密码]" volumes: db_data:
此处我们在mysql配置文件中,使用的command和restart两个配置项。这两项的定义如下
- command:等同于Dockerfile中的CMD命令。注意,如果容器设置了EntryPoint,则command会作为的参数传递给EntryPoint。
- restart:设置了容器的重启策略,如果容器在运行时因为异常退出,docker会根据restart策略选择是否重新启动容器。
2. 启动wordpress容器组
docker compose up -d
在容器组启动之后,我们可以进入GNOME桌面。通过浏览器访问论坛的首页。
在浏览器中输入http://127.0.0.1:8000
选择wordpress的界面语言,并且按"继续"
继续配置wordpress的相关信息。包括论坛名称,用户名,密码,然后按"安装WordPress"
安装之后点击登录,即可进入登录界面
登录之后即可进入wordpress管理后台
接下来我们进入wordpress前台浏览界面。输入网址 http://127.0.0.1:8000
出现浏览界面说明wordpress安装成功。
3. 接下来我们来分析一下wordpress容器组的情况。以及如何保存论坛的状态
- 我们先来查看容器的运行情况,我们切换到控制台页面
docker ps
通过docker compose部署的容器,默认容器的名称为 [工程名-服务名-服务数量]
- 我们继续查看容器的存储情况
docker inspect -f "{{json .Mounts}}" root-wordpress-1 | jq docker inspect -f "{{json .Mounts}}" root-db-1 | jq
发现wordpress容器默认创建了一个volume挂载到/var/www/html路径。而db容器的volume被命名为root_db_data。其源位置为/var/lib/docker/volumes/root_db_data/_data
- 查看volume的源位置。以及备份volume
cd /var/lib/docker/volumes/root_db_data/_data ls
根据经验我们发现,root_db_data volume的内容为mysql数据存放的文件夹。这种情况下我们以打包保存此文件夹的内容,以实现容器中mysql数据库的备份。
cd ~ tar czvf wp-db.tar.gz -C /var/lib/docker/volumes/root_db_data/_data . ll wp-db.tar.gz
和db容器类似,我们根据经验,确定wordpress容器的volume路径为apache服务器的页面路径。我们也可以通过保存volume内容的方式来持久化wordpres容器中的页面设定,在这里我们通过docker inspect获得wordpress自动生成的volume的source信息,并且将路径直接传给tar指令来打包。
tar czvf wp.tar.gz -C $(docker inspect -f "{{with index .Mounts 0}}{{.Source}}{{end}}" root-wordpress-1) . ll wp.tar.gz
- 接下来我们尝试删除原有容器和Volume,并通过tar来恢复wordpress服务的状态。
docker compose down docker volume prune
修改docker-compse.yml文件,为wordpress容器添加一个指定的volume
vi docker-compse.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: MySQLPassword MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - html:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress volumes: db_data: html:
为了可以初始化volume,我们先通过创建容器组,但并不启动
docker compose create
通过tar文件还原volume的内容
tar xzvf wp-db.tar.gz -C $(docker inspect -f "{{with index .Mounts 0}}{{.Source}}{{end}}" root-db-1) tar xzvf wp.tar.gz -C $(docker inspect -f "{{with index .Mounts 0}}{{.Source}}{{end}}" root-wordpress-1) docker compose start
我们切换回GNOME界面。访问http://127.0.0.1:8000发现页面没有进入初始化界面。访问 http://127.0.0.1:8000/wp-login.php使用之前设置的密码登录,发现依然可以登录。说明页面和数据库都已经从备份中恢复。
实验地址:https://developer.aliyun.com/adc/scenario/7884e3ab68e349ddb8e556a95e06ffed