项目需求

所有wordpress类型的网站通过k8s配置,Docker构建部署,形成全自动化流水线。之后项目只需要在本地提交代码,就可以在几分钟以后自动更新线上,方便快捷。

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,目标是让部署容器化的应用简单并且高效,它提供了应用部署,规划,更新,维护的一条龙服务。

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源,可以打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,实现虚拟化,它包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。

装备说明

纯属小白 + Mac10.15.5

安装Docker

直接下载符合本机版本的Docker软件
Docker官网安装地址:https://docs.docker.com/get-docker/

Docker添加阿里云镜像加速器

  1. 登陆阿里云容器镜像服务 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors复制加速器地址
  2. 在任务栏点击 Docker Desktop 应用图标 -> Perferences,在左侧导航菜单选择 Docker Engine,在右侧输入栏添加下面的代码。
    1. "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
    示例
    image.png

    Docker常用命令

  • docker pull xxx 下载xxx镜像(当在本地主机上使用一个不存在的镜像时 Docker 会自动下载这个镜像)
  • docker ps 查看所有镜像
  • docker run -it xxx 运行xxx镜像
  • docker exec -it [containerName] /bin/sh 以交互模式执行容器脚本
  • docker image ls 或者 docker images列出本地主机上的镜像
  • docker image rm [imageName]删除镜像
  • docker container ls 查看所有正在运行的容器
  • docker container ls —all 查看所有容器(包括停止)
  • docker search xxx 命令来搜索xxx镜像
  • docker rmi -f xxx 强制删除 xxx 镜像
  • exit 退出
  • Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

    构建Docker容器(测试)

    新建项目

    新建测试项目docker-test
    image.png
    在项目根目录下,新建文本文件Dockerfile,写入下面的内容
    1. FROM node:8.4
    2. COPY . /app
    3. WORKDIR /app
    4. RUN npm install --registry=https://registry.npm.taobao.org
    5. EXPOSE 3000

语句解释如下

  • FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
  • COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
  • WORKDIR /app:指定接下来的工作路径为/app。
  • RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
  • EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。

创建image(镜像)文件

  1. docker image build -t docker-test .
  • -t参数:用来指定image文件的名字
  • . 参数:一定不要忘记有个点,表示Dockerfile所在的路径

注意:如果不指定标签信息,默认为latest

查看新生成的image文件

  1. docker image ls

或者

  1. docker images

示例
image.png

生成container(容器)

  1. docker container run -p 8000:3000 -it demo-test /bin/bash

语句解释如下

  • -p参数:容器的 3000 端口映射到本机的 8000 端口
  • -it参数:容器的 Shell 映射到当前的 Shell,然后在本机窗口输入的命令,就会传入容器
  • /bin/bash:容器启动以后,内部第一个执行的命令

现在docker-test已经运行起来了,在浏览器打开http://127.0.0.1:8000

发布到自己的仓库

  1. 先登录一下DockerHub的账号

    1. docker login
  2. 新建一个镜像

    1. docker build -t [imagename]:1.0
  3. 设置镜像的标签

    1. docker tag [imageID] [username]/[imagename]:1.0

    语句解释如下

    docker tag [镜像ID] [用户名称]/[镜像源名]:新的标签名

  4. 推送镜像到DockerHub

    1. docker push [username]/[imagename]:1.0

    本地部署wordpress

    获取wordpress镜像

    wordpress的版本看Dockerhub上的示例
    image.png
    获取wordpress镜像,执行

    1. docker pull wordpress:5.5

    创建mysql容器

    因为wordpress需要配置数据库,所以还要拉取mysql的镜像

    1. docker pull mysql

    创建mysql容器并运行,指定数据库密码是123456

    1. docker run --name mysql_db -e MYSQL_ROOT_PASSWORD=123456 -d mysql

    —name:指定容器的名称 -e:指定环境变量

创建wordpress容器

然后创建并运行新的wordpress容器(名称为wp-demo),连接数据库(mysql),

  1. docker run --name wp-demo --link mysql_db:mysql -p 8080:80 -d wordpress:5.5

—link:用来链接容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据 -p:指定端口映射,格式为:主机(宿主)端口:容器端口 -d:后台运行容器,并返回容器ID

查看wp-demo内的主题文件

  1. docker exec -it wp-demo /bin/sh

image.png
然后就可以在浏览器上输入 http://127.0.0.1:8080/开始安装wordpress

新增主题

方法一 平台直接添加新主题

选择按钮“Add New”,上传我们自己的主题
image.png
如果出现文件上传失败的提示:

The link you followed has expired.

说明wordpress限制了文件大小,用下面的方法查看文件限制的大小,如图所示
image.png

文件上传的解决办法

方法一 安装插件

  • 安装插件 File Manager

image.png

  • 修改配置文件

image.png

  • 添加下面几行代码
    1. php_value upload_max_filesize 64M
    2. php_value post_max_size 64M
    3. php_value max_execution_time 300
    4. php_value max_input_time 300
    示例如下
    image.png
    方法二 服务器修改文件
    直接在服务器里更改 .htaccess文件的内容

现在就可以安心地上传我们自己的主题包了。

方法二 复制主题文件到容器中

  • 新建文件夹wordpress-docker,把主题包放进去

示例
image.png

  • 查看运行中的wordpress5.5版本的容器,获取它的CONTAINER ID

    1. docker container ls

    示例
    image.png

  • 查看主题包的位置

    1. pwd

    示例
    image.png

  • 查看容器位置

    1. docker exec -it wp-demo /bin/sh
    2. pwd
  • 执行docker cp [文件名] [CONTAINER ID]:[容器名]

    1. docker cp /Users/skywen_cp/Documents/demo/wordpress-docker/skywen-theme f4e4ea3c21c1:/var/www/html/wp-content/themes
  • 查看wordpress内主题是否存在

    1. docker exec -it wp-demo /bin/sh
    2. cd wp-contents/themes
    3. ls

    示例
    image.png

  • 先看再看网站里面的主题,有两个相同的主题了

image.png

线上部署wordpress

注意:这不是演习,最好在本地测试成功了再在线上部署
再熟悉一下下面的命令

  1. #构建镜像
  2. docker image build -t wp:1.0 .
  3. #docker面板开启镜像wp的一个容器,并运行
  4. docker exec -it [containerID] /bin/sh
  5. #查看主题文件下是否含有加入的主题包
  6. cd wp-content/themes

设置代码仓库

注意:代码仓库里多余的代码最好清掉,以防以为文件太大而构建失败

  • 新建一个代码仓库
  • 代码仓库里放入在本地构建好的Dockerfile,修改里面的参数(主要是主题包的位置)

    1. FROM wordpress:5.5
    2. COPY wp-content/themes /var/www/html/wp-content/themes
  • 新建文件.dockerignore,写入下面的代码

    1. .git/
    2. wp-admin/
    3. wp-includes/

    示例
    image.png

    新建流水线

    在仓库内选择流水线,新建,选择空白模板,直接创建
    image.png
    这一步这里的具体说明,请看【SkywenCode】3.0时代里面的从构建到部署-云效使用说明这篇文章

    构建镜像

    代码上传以后,会自动构建镜像;点击日志,可以查看构建的过程

    image.png

    到这里,所有的构建部署就全部结束了,里面有错误的望指出。