基于dockerfile创建镜像部署WordPress博客系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在我的认知范围内是指通过许多指令构建起来的一个文本,通过这个文本可以在基础镜像上再构建一个符合自身需求的镜像。

部署环境:

系统环境:CentOS 7.3
内核版本:3.10.0-514.26.2.el7.x86_64
Docker服务端版本:1.13.1
基础镜像:centos/latest
整体架构:

Jietu20180724_005712

1、Dockerfile编写

  dockerfile在我的认知范围内是指通过许多指令构建起来的一个文本,通过这个文本可以在基础镜像上再构建一个符合自身需求的镜像。

1.1 Dockerfile指令

  首先,通过我们对nginx的dockerfile来讲解各个指令的用法。

FROM centos:latest
MAINTAINER Bruce for WordPress 

RUN groupadd -g 1001 nginx && useradd -u 900 nginx -g nginx -s /sbin/nologin

COPY epel.repo /etc/yum.repos.d/epel.repo

RUN yum install -y nginx && yum clean all 

EXPOSE 80

CMD ["nginx","-g","daemon off;"]
  • FROM:用于提供构建所需镜像的基础镜像
  • MAINTAILER:用于让作者提供本人信息的指令
  • RUN:指定docker build过程中要创建的命令,而不是容器运行时指定的指令

      用法:
          RUN yum install -y httpd 
          RUN ["yum","install","-y","httpd"]
  • COPY:用于从docker主机复制文件至正在创建的镜像文件中,复制的文件必须在镜像build上下文中的路径

    用法:
        COPY index.html /var/www/html/
        COPY *.conf /etc/   
  • ADD:和COPY用法类似,并且可以将打包压缩好的文件,解压至目标路径
  • CMD:和RUN命令类似,为启动容器指定默认的程序,程序运行结束,容器结束(可被docker run命令参数指定要运行的程序覆盖)

       用法:
           CMD <command>
           CMD ["<executeable>","<param1>","<param2>",...]
           CMD ["<param1>","<param2>",...] 为ENTRYPOINT指令指定的程序提供参数
    
  • ENPOSE:指定容器要暴露的端口

      用法:
          EXPOSE <port>[/protocol>] <port>[/protocol>] 
  • ENTRYPOINT:类似于CMD指令,不会被docker run所指定的命令行参数所覆盖,而这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序(和CMD类似)

      用法:
          CMD <command>
          CMD ["<executeable>","<param1>","<param2>",...]
  • ENV:定义环境变量,此变量可被当前dockerfie文件中的其它指令所调用

      用法:
          ENV <key> <value> 一次定义一个变量
          ENV <key>=<value> ... 一次可定义多个变量,如果value中有空白字符,要使用\字符进行转义
  • USER:指定运行程序时的用户名和UID

      用法:
           USER UID | Username
  • WORKDIR:用于为Dockerfile中所有的RUN/CMD/ENTRYPOINT/ADD指令指定工作目录

      用法:WORKDIR <dirpath>
  • VOLUME:用木目标镜像文件中创建一个挂载点,用于挂载主机上的卷或其它容器的卷

      用法:
          VOLUME <mountpoint>
          VOLUME ["mountpoint",...]
  • ONBUILD:定义触发器,当前dockrfile构建出的镜像被用作基础镜像去构建其它镜像时,ONBUILD指令指定的操作才会被执行

      用法:
          ONBUILD <INSTRUCTION>
          ONBUILD ADD my.cnf /etc/mysql/my.cnf
    

1.2 Mysql(Dockerfile)

  通过dockerfile安装部署mysql数据库,在我编写的时候遇到两个问题:
    1.mysql运行在前台;
    2.执行sql语句赋予账号权限和创建数据库;
  通过查找一些网上资料,发现可以通过mysqld_safa将mysql运行在前台,并且将需要执行的sql语句写在sql文件中,再导入正在运行的mysql就可以了。

FROM centos:latest 
MAINTAINER BruceJin for mysql 

RUN yum install -y mariadb mariadb-server mariadb-client mariadb-devel \

WORKDIR /root
ADD setup.sql /root/setup.sql
ADD setup.sh /root/setup.sh
ADD startup.sh /root/start.sh
RUN chmod +x /root/*.sh \
  && /root/setup.sh

EXPOSE 3306

CMD /root/start.sh

  setup.sh如下:

#!/bin/sh

chown -R mysql:mysql /var/lib/mysql

mysql_install_db --user=mysql > /dev/null

mysqld_safe --user=mysql &

sleep 3

mysql < /root/setup.sql

sleep 3

ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9

  setup.sql如下:

create database wordpress DEFAULT CHARACTER SET utf8;

USE mysql;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
UPDATE user SET password=PASSWORD("123456") WHERE user='root';

FLUSH PRIVILEGES;

1.3 php-fpm (Dockerfile)

  php-fpm程序连接数据库,需要下载安装php连接mysql模块,并且需要修改默认监听和WordPress连接数据库的信息,默认是监听在127.0.0.1:9000端口上的,需要将事先配置好的文件放在本地,然后再通过COPY指令复制进去。

FROM centos:latest 
MAINTAINER Bruce for WordPress 

RUN groupadd -g 1001 nginx && useradd -u 900 nginx -g nginx -s /sbin/nologin \
  && yum install -y php-fpm php-mysql && yum clean all 

CMD ["php-fpm","-F"]

2、创建镜像

  当Dockerfile文件创建好后,需要使用docker的子命令build来创建镜像。

[root@Bruce docker]#docker build -f /root/docker/nginx.dockerfile /root/docker/ -t centos:nginx
[root@Bruce docker]#docker build -f /root/docker/php.dockerfile /root/docker/ -t centos:php
[root@Bruce docker]#docker build -f /root/docker/mysql.dockerfile /root/docker/ -t centos:mysql

docker build有非常多的参数,-f 前面指明dockerfile所在位置,可以使用绝对路径,
后面指明build的工作目录,-t 表示给创建的镜像起的name和tag。
docker build还有非常多的参数,具体的可以参考 docker help build命令

3、启动镜像

  当镜像创建好后,我们需要启动镜像,使用docker run加各种参数来启动镜像。

[root@Bruce docker]#docker run -d --name Nginx  -v /root/docker/nginx/wordpress/:/usr/share/nginx/html/ -v /root/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -p 80:80 centos:nginx
[root@Bruce docker]#docker run -d --name php-fpm -v /root/docker/nginx/wordpress/:/usr/share/nginx/html/ -v /root/docker/php/www.conf:/etc/php-fpm.d/www.conf --net container:Nginx centos:php
[root@Bruce docker]#docker run -d --name mysql -v /var/lib/mysql/ -v /root/docker/mysql/my.cnf:/etc/my.cnf -p 3306:3306 centos:mysql

docker run有非常多的参数,-d表示将容器运行在后台,并打印出容器的ID,
-it 组合可以使容器运行在前台,
--name 可以给容器起个别名,可以通过别名来对容器做启动、停止、重启等操作,
-p 表示将容器内程序的端口和容器外的端口做一个映射。
-v 表示将主机上的目录或者文件挂载到容器内,实现数据的持久化。
--net 表示指定容器的网络模型,默认的网络模型为Bridged,这里选择的是Joined模型,php与nginx共享一个网络,其余两种为Closed和Open。
docker run命令还有非常多的参数,具体可以参考 docker help run 命令。

4、测试

  安装完成后,尝试打开首页:

Jietu20180724_004259

  OK,这次部署终于成功。

5、总结

  遇到的问题:

  • 404报错,由于nginx和php上的web根目录理解错误导致
  • 403报错,由于nginx上配置的目录出错,只配置了一级目录,wordpress至少有二级目录
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
运维 数据可视化 关系型数据库
使用 Websoft9 运维面板部署和维护 WordPress 到底有多简单?
如何实现 WordPress 极速部署?Websoft9 通过应用商店一键安装与可视化运维管理,10 分钟完成零门槛上线。
87 1
|
3月前
|
数据可视化 Linux 网络安全
零基础搭建WordPress博客全流程指南!
本指南详细介绍如何使用宝塔面板与WordPress搭建个人博客。宝塔面板提供可视化操作,简化服务器管理;WordPress拥有丰富的主题和插件生态,支持快速建站。教程涵盖准备阶段(服务器、域名、面板安装)、环境配置、站点创建、SSL证书申请、WordPress一键部署及网站配置等步骤,并推荐必备插件提升安全性和性能。零基础用户也可轻松上手,适合日均5000PV以下的博客需求,扩展性强,助你开启创作之旅。
251 7
|
2月前
|
缓存 安全 应用服务中间件
宝塔部署 WordPress 太繁琐 那就用 Websoft9 一键部署 WordPress
随着 WordPress 成为最受欢迎的建站平台之一,传统通过宝塔面板部署的方式因步骤繁琐、手动干预多而显得效率低下。本文介绍 Websoft9 一键部署方案,利用容器化技术快速搭建 WordPress,内置 Nginx、PHP-FPM、MariaDB 和 Redis,集成安全组件如 ModSecurity-WAF 和 Fail2ban,支持自动 SSL 和性能优化功能。相比宝塔面板,Websoft9 提供更简便、稳定且安全的部署体验,适合希望高效上线 WordPress 的用户。
|
7月前
WordPress小白傻瓜式一键搭建博客个人网站详细教程
用宝塔功能来一键搭建WordPress博客网站。 最详细教程! 整个过程简单、易用,即使是零基础用户也能轻松上手。
761 1
|
7月前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
408 4
|
8月前
|
域名解析 弹性计算 程序员
想要轻松地搭建一个即开即用的WordPress博客吗?借助宝塔面板镜像+阿里云ECS,迅速拥有自己的个人博客
拥有个人博客是每位程序员的梦想,但对服务器不熟悉的初学者而言,搭建博客颇具挑战。本文介绍利用阿里云市场的宝塔面板镜像与ECS云服务器,轻松搭建WordPress博客的方法,让您快速拥有专属博客空间。通过简单的操作步骤,即使是新手也能轻松上手,实现从零到有的博客搭建过程。
479 3
|
7月前
|
关系型数据库 MySQL 应用服务中间件
测评部署和管理 WordPress 最方便的面板
本文介绍了如何使用Websoft9面板轻松搭建WordPress网站,相比宝塔和1Panel,Websoft9简化了Nginx和MySQL的配置步骤,实现了快速一键部署。用户只需在应用商店中搜索WordPress,选择版本和端口后等待几分钟即可完成安装,随后通过提供的链接进入WordPress界面,轻松启动个人网站。
|
1月前
|
网络安全 开发者
如何解决HTTPS协议在WordPress升级后对网站不兼容的问题
以上就是解决WordPress升级后HTTPS协议对网站的不兼容问题的方法。希望能把这个棘手的问题看成是学校的管理问题一样来应对,将复杂的技术问题变得更加有趣和形象,并寻觅出解决问题的方式。希望你的网站能在新的学期得到更好的发展!
59 19
|
2月前
|
缓存 搜索推荐 数据库
使用SiteGround搭建WordPress网站的方法
以上就是在SiteGround上搭建WordPress网站的步骤。这个过程可能需要一些时间和耐心,但只要你按照步骤操作,你就可以成功搭建自己的WordPress网站。
98 23
|
3月前
|
人工智能 自然语言处理 搜索推荐
【2025.3.12】wordpress AI智能插件-新增自动获取搜索引擎下拉关键词,网站SEO必备,自动生成文章、配图,24小时自动发布
Linkreate WordPressAI插件是一款强大的内容生成与优化工具,支持自动化文章生成、SEO优化、长尾关键词生成及管理。具备多语言支持、搜索引擎下拉关键词获取、内容采集、定时任务自动化等功能。同时集成多种AI服务(如DeepSeek、OpenAI等),提供前端AI客服窗口和媒体生成功能,包括文章图片与视频生成。更多功能等待探索。
【2025.3.12】wordpress AI智能插件-新增自动获取搜索引擎下拉关键词,网站SEO必备,自动生成文章、配图,24小时自动发布
下一篇
oss创建bucket