使用 Docker + nginx-proxy + PHP7 on Apache + MySQL5.7 来建立 WordPress 环境,第二步
从上次(第一部分)开始继续。
将域名注册到DNS。
现在,在完成前面的工作之后,我们已经准备好启动WordPress了,但要使用nginx-proxy以域名访问,需要在DNS中注册域名和A记录。我在AWS的EC2上有一个Docker环境,并且在AWS的Route53中管理DNS记录。因此,在这里,我们将在Route53中进行设置,以便我们可以通过带有wp.XXXXXXX.org子域名的形式访问WordPress。基本上,只需要进行以下配置:
我认为没有必要进行过多解释,只是将Docker主机的IP地址注册为A记录。如果您是在本地开发环境中尝试,可以将其写入hosts文件中,类似的操作也可以实现。这样,您就可以访问http://wp.XXXXXXX.org/并显示WordPress了。
使用 Docker Compose 快速部署 WordPress
终于到了启动WordPress的阶段,考虑到数据持久化和可移植性,至少需要启动三个容器。
WordPress容器
MySQL容器
数据容器(共享WordPress程序/资源和MySQL数据)
由于一个一个启动它们很麻烦,因此我们将使用Docker Compose来统一管理它们。在任意目录下创建一个名为docker-compose.yml的文件。
[docker-op@~]$ mkdir docker_compose_wordpress && cd docker_compose_wordpress
[docker-op@docker_compose_wordpress]$ vi docker-compose.yml
wordpress:
image: abe-local/wordpress-php7
volumes_from:
- data
ports:
- 8080:80
links:
- db:mysql
environment:
- WORDPRESS_DB_NAME=wordpress
- VIRTUAL_HOST=wp.XXXXXXX.org
- TZ=Asia/Tokyo
db:
image: mysql
volumes_from:
- data
environment:
MYSQL_ROOT_PASSWORD: --PASSWORD--
data:
image: busybox
volumes:
- /var/lib/mysql
- /var/www/html
我来简单解释一下,对于WordPress中的image:,您需要在其中写入之前创建的WordPress镜像名称(标签)。同样,在WordPress的environment:中,您需要写入刚刚注册到DNS中的域名。仅凭这些操作,nginx-proxy将正确地将请求转发至相关目标。(在AWS等环境中,请确保nginx正在监听打开的80号端口)。虽然有nginx-proxy,不需要指定ports:来使用8080端口进行访问,但是似乎这是一个必需的设置,请不要忘记指定。
在数据库中,通过将image设为mysql,将获得最近发布的最新版本5.7的官方镜像。请务必指定密码,以免忘记。
用名为busybox的映像创建一个名为data的容器。将/var/www/html用于WordPress和/var/lib/mysql用于MySQL挂载。通过指定data:db:并使用volumes_from将data指定为wordpress和db卷,实现数据的持久性和可移植性。
现在,只需运行以下命令,即可下载 MySQL 和 busybox 的镜像,并顺序启动三个容器,应该能够成功启动 WordPress(虽然 data 容器在启动后会立即停止)。
[docker-op@docker_compose_wordpress]$ docker-compose up -d
(出力略)
[docker-op@docker_compose_wordpress]$ docker ps -a
(出力略:WordPress、MySQL、busybox、nginx、nginx-genの5つのプロセスが立ち上がっているはず)
通过浏览器访问 http://wp.XXXXXXX.org,如果出现以下熟悉的画面即表示成功。
数据备份和恢复
由于我们将数据容器单独启动,因此可以轻松进行数据备份和恢复。请先切换到刚才启动docker-compose.yml的目录,然后停止三个容器,暂时启动一个备份专用容器(busybox),以进行备份和恢复操作。
(3コンテナの停止)
[docker-op@docker_compose_wordpress]$ docker-compose stop
(WordPressバックアップ)
[docker-op@docker_compose_wordpress]$ docker run --rm \
--volumes-from wordpress_data_1 \
-v $(pwd):/backup busybox \
tar cvf /backup/backup_html.tar /var/www/html
(MySQLバックアップ)
[docker-op@docker_compose_wordpress]$ docker run --rm \
--volumes-from wordpress_data_1 \
-v $(pwd):/backup busybox \
tar cvf /backup/backup_mysql.tar /var/lib/mysql
(WordPressリストア)
[docker-op@docker_compose_wordpress]$ docker run --rm \
--volumes-from wordpress_data_1 \
-v $(pwd):/backup busybox \
tar xvf /backup/backup_html.tar
(MySQLリストア)
[docker-op@docker_compose_wordpress]$ docker run --rm \
--volumes-from wordpress_data_1 \
-v $(pwd):/backup busybox \
tar xvf /backup/backup_mysql.tar
(3コンテナの再開)
[docker-op@docker_compose_wordpress]$ docker-compose start
有些复杂啊。。。为什么在备份和恢复时要使用docker run呢?还有后面的部分等等。说实话,我也没有完全理解,也写不好,所以请参考其他人的文章。
关于Docker和数据卷容器的讨论
此外,这不仅限于Docker,tar的合并和展开会消耗大量的CPU和内存。如果使用Docker安装了多个环境,需要考虑这个操作对其他环境的影响。如果耗尽交换空间导致所有环境无响应,将会非常痛苦。。。
因此,我的帖子变得相当混乱。对不起。