使用Docker部署Wordpress博客系统
1、实验目标
- 掌握Docker镜像和容器的基本概念和常见操作方法;
- 理解并掌握容器端口映射、目录映射等内容;
- 会使用Dockerfile来构建镜像;
- 会使用Docker compose来编排容器。
2、使用Dockerfile构建Apache容器
2.1 基本概念回顾
2.1.1 Docker镜像
Docker镜像是一个轻量级、独立的可执行软件包,包含运行应用所需的一切,包括代码、运行时、库、环境变量和配置文件。注意它是“游戏存档”,是静态的。
2.1.2 Docker容器
Docker容器是Docker镜像的实例,可以运行在任何支持Docker的环境中。容器包含应用程序和其依赖,但与宿主机隔离开来,保证了应用的一致性和可移植性。它是运行的,是动态的。
2.1.3 Docker端口映射
Docker端口映射是将容器内部的端口映射到宿主机的端口,使得外部可以通过宿主机的端口访问容器内的服务。一般网站运行在HTTP(80)端口,需要映射80到容器外面,让容器外面的其他的主机可以访问网站。
2.1.4 Docker目录映射是
Docker目录映射是将宿主机的目录映射到容器内,实现宿主机和容器之间的文件共享。就是说当一个程序(网站)访问容器内部的某个目录时,可以跳转到外面(宿主机)的目录,这样容器本身无需保存数据,一些生成的网页保存在宿主机的目录中,方便管理和维护。
2.1.5 Dockerfile使用
Dockerfile是一个文本文件,包含了一系列命令,用于自动化构建Docker镜像。主要编写通过Dockerfile,可以定义基础镜像、安装软件、设置环境变量等操作。然后运行命令,自动化生成所需的镜像,获得一个可以马上运行网站代码的容器。
2.1.6 Docker-compose
Docker-compose是一个工具,用于定义和运行多容器Docker应用程序。通过一个单独的文件(docker-compose.yml),可以配置应用的服务、网络和卷,实现容器的编排和集成。可以使用它同时部署Apache和MySQL容器,并设定端口映射、目录映射,完成网站的部署。
像WordPress这样的博客系统,需要一个网站服务和数据库服务。网站运行WordPress代码,展现出一个可以使用的博客系统,而所有产生的数据、配置参数等都保存在数据库中。这里就需要起码两个容器,一个是Apache容器,另外一个是MySQL容器。
3、使用Dockerfile构建Apache容器
3.1 构建容器
首先,创建一个apache目录,
mkdir /home/<你的用户>/apache
在目录中创建一个名为Dockerfile的文件。
vi Dockerfile
FROM centos:7
LABEL maintainer="黄大白"
# 使用阿里云配置软件仓库
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
# 安装必要软件,包括:epel、remi、php7.4等。
RUN yum install -y httpd epel-release && \
rpm -ivh http://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm && \
yum-config-manager --enable remi-php74 && \
yum install -y php php-mysqli && \
yum clean all
# 暴露 80端口
EXPOSE 80
# 运行容器时,启动httpd
CMD ["httpd", "-DFOREGROUND"]
3.2 构建Docker镜像
打开终端,进入Dockerfile所在的目录,执行以下命令构建镜像。
docker build -t apache:php .
# 最后这个是英文的句号,标识Dockerfile在当前目录中,漏掉会报错!
3.3 运行Apache容器
构建完成后,使用apache:php镜像创建容器myweb,绑定端口80:80,挂载目录/myweb:/var/www/html,并映射宿主机的80端口到容器的80端口。
docker run -itd --name myweb -p 80:80 -v /myweb:/var/www/html apache:php
这里/myweb为宿主机的目录,如果不存在,需要创建
mkdir /myweb
在/myweb里添加测试php页面index.php,内容如下:
vi /myweb/index.php
<?php phpinfo();?>
一切顺利就可以http://localhost或<ip>
,查看php信息,证明容器已经成功运行,如图所示
此刻,Apache+PHP环境的容器制作成功!
4、使用MySQL镜像运行并初始化数据库
4.1 拉取MySQL镜像
首先,拉取官方的MySQL镜像。
docker pull mysql:latest
4.2 运行MySQL容器
运行MySQL容器,并设置root用户的密码。
docker run -itd -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123 mysql
一些说明:
docker run
: 启动一个新的容器。-d
: 让容器在后台运行,即以“守护进程”模式运行。-p 3306:3306
: 将宿主机的3306端口映射到容器的3306端口。左侧的3306是宿主机的端口,右侧的3306是容器内MySQL服务监听的端口。--name mysql
: 为容器指定一个自定义的名称,这里为"mysql"。-e MYSQL_ROOT_PASSWORD=123
: 设置MySQL的root用户的密码,这里设置为"123"。这是通过环境变量传递配置的方式。mysql
: 指定要运行的镜像,这里是MySQL的官方镜像。
4.3 初始化数据库
可以使用MySQL客户端连接到运行中的容器,初始化数据库和用户。
docker exec -it mysql mysql -u root -p123 -v /mydb:/var/lib/mysql/
在MySQL客户端中执行以下SQL语句。
CREATE DATABASE wordpress;
show databases;
这里因为命令中映射了目录,会在宿主机/mydb下生成数据库文件,所有数据会保存在这里。
5、使用Docker compose部署Wordpress
基于配置的apache:php和mysql的容器,部署Wordpress博客系统。
5.1 WordPress系统简介
WordPress是一款开源的内容管理系统(CMS),用于创建并管理个人博客、商业网站或新闻网站,具有丰富的插件和主题生态系统。
5.2 下载并解压WordPress代码
访问https://cn.wordpress.org/download/ 下载WordPress包(文件后最是.tar.gz)
cd /home/user/Downloads/
# 解压代码
tar xzf wordpress-6.3-zh CN.tar.gz -C /myweb/
5.3 安装WordPress系统
WordPress系统自带安装引导程序,使用浏览器访问web服务,按照提示完成系统的安装。
数据库信息:
数据库名:wordpress
用户名:root
密码:123
数据库主机:填写宿主机的IP
如果提示信息,创建WordPress配置文件wp-config.php,内容为提示框中内容
在宿主机/myweb/wordpress下,创建配置文件wp-config.php,将上述提示框中内容复制到此文件内即可。
根据页面提示,继续安装指导提示成功。
登录管理台
5.4 编排容器运行WordPress系统
到这里还没完成哦,不要高兴太早!
我们还没使用docker compose
现在我们先停止所有容器:
#停止MySQL容器
docker stop mysql
#删除MySQL容器
docker rm mysql
#停止MyWeb容器
docker stop myweb
#删除MyWeb容器
docker rm myweb
5.4 编写docker compose
现在最后一个任务,就是编写docker compose 来了编排容器的运行,做到一键启动WordPress系统。
这个是docker-compose.yml内容,注意缩进和符号正确:
version: '3' # 使用Docker Compose版本3
services:
web:
image: apache-php:7.4 # 设置容器使用的Apache + PHP镜像,替换为实际的镜像名称和版本
restart: always # 设置容器 down 掉后自动重启
container_name: myweb # 设置容器名称为 myweb
ports:
- "80:80" # 将宿主机的80端口映射到容器的80端口
privileged: true # 设置容器的权限为root
volumes:
- /myweb:/var/www/html # 设置容器挂载目录,将/myweb映射到容器的/var/www/html
depends_on:
- db # 指定 web 服务依赖于 db 服务
db:
image: mysql:latest # 使用最新版本的MySQL镜像
restart: always # 设置容器 down 掉后自动重启
container_name: mysql # 设置容器名称为 mysql
ports:
- "3306:3306" # 将宿主机的3306端口映射到容器的3306端口
privileged: true # 设置容器的权限为root
volumes:
- /mydb:/var/lib/mysql # 设置容器挂载目录,将/mydb映射到容器的/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123 # 设置MySQL管理员密码
MYSQL_DATABASE: wordpress # 创建MySQL数据库名为 wordpress
编排并启动myweb和mysql两个容器
docker compose up -d
#返回结果如下:
Creating network "root_default" with the default driver
Creating mysql ... done
Creating myweb ... done
查看两个容器运行状态
docker compose ps
#返回结果如下:
Name Command State Ports
--------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
myweb apache2-foreground Up 0.0.0.0:80->80/tcp
这个时候,使用浏览器访问web,应该可以看到网页了。
6、小结
通过以上步骤,我们成功地使用Docker部署了一个包含Apache、MySQL和Wordpress的应用系统。这种容器化的部署方式具有高度的灵活性和可移植性,为开发和运维工作带来了便利。
同时,通过Docker的基本概念和工具的使用,我们深入理解了容器技术的运作原理和优势。
把事情做完就挺不容易了,为自己点赞!