我的博客 https://savokiss.com 用的是 typecho,一直使用的是 阿里云ECS 直接安装的 MySQL 和 PHP,由于买的时间比较早,当时用的是 CentOS 6.5。后来想玩 docker,发现 docker 只支持 CentOS 7+,加上之前的系统上东西太乱了,所以这次有时间就将数据库和 typecho 源码备份了一下,然后换了一个纯净的 CentOS 7.6 的镜像。由于我买的 ECS 是 1CPU 1GB 内存,之前还一直担心跑不起来 docker,这次升级完之后发现完全没问题,内存用了一半都不到哈~于是记录下这个过程,说不定可以帮到其他小伙伴。
升级系统,建议备份好数据,由于我的 ECS 上面主要就一个博客,所以直接用全新的镜像,安装完后啥都木有,当然也可以直接将快照创建为自定义镜像,然后升级系统的时候选择即可该快照即可。
本人也是 docker 小白,如果对 docker 不熟悉,可以先看笔者的另一篇文章:
写给前端工程师的 docker 入门
下面开搞:
如果想要用非 root 用户执行 docker 命令,请参考此步骤。
新增的用户名叫 savokiss。
下面的命令使用 root 执行。
添加用户
修改密码
加入 sudo 权限
找到下面两行,将新用户写入,如:
创建 docker 用户组
将新用户加入 docker 组
让变更生效:
然后用户 savokiss 执行 docker 命令时就不用加 sudo 了
以下命令均以 root 用户执行
下载安装依赖包
添加国内 yum 源
更新缓存,安装 docker-ce
启动 docker
hello-world 是官方的测试镜像。
国内镜像源加速
如果启动失败的话可以更换为 daocloud 的 docker 源,然后重新 run:
也可以直接修改 中的 registry(文件不存在就新建一个)
修改后重启服务
如果能看到以下界面,就说明 hello world 成功咯:
这里主要获取 nginx@1.16.1、mysql@5.7、php@7.2 三个镜像,如有需要可以自行修改版本号。
获取 MySQL 镜像
创建容器 main_mysql
参数说明:
-d 代表 daemon,即后台运行
-p 是设置宿主机和容器的端口号
-e 设置 mysql 密码
—name 给当前 container 起一个名字
获取 PHP 镜像
创建容器 main_phpfpm
参数说明:
-v 代表 volumes,即挂载宿主机和容器的目录映射
—link 代表链接外部 container,本例中即 main_mysql
测试目录映射
先进到容器内部:
这句话简单来说就是将容器中的 连接到你当前的命令行,相当于进入容器中执行命令。
执行完后会进入容器的
然后来创建个文件:
然后在宿主机中的 目录下就会发现一个 test.php,说明映射目录成功啦~
PHP 扩展安装
由于 typecho 需要使用 mysql pdo。再次用上面的命令进入 main_phpfpm 容器,然后执行:
然后执行 就可以看到已经安装的扩展
获取 nginx 镜像
创建 nginx 容器
这里由于网站配置了 https,所以需要打开 443 端口,并且除了挂载网站目录,也将 nginx 的 conf.d 目录挂载到了宿主机
然后到 目录下,
1. 新建 文件,内容如下,已经开启了 https 和伪静态:
2. 新建 文件
3. 创建 文件夹,将 https 证书 , 放进去
如果不需要 https,上面的配置文件就不需要后面这两步,同时 conf 文件内容适当删减即可。
注意:上面的配置文件中的路径都是对于容器内部来说的。
提示:如果启动失败,可以使用 查看错误日志,启动成功后是可以进入到容器内部的。修改配置文件后可能需要进入容器内部执行 ,或者直接在宿主机 即可。
由于笔者是迁移,typecho 源码都在 github 上,所以直接 git clone 到 中即可。然后用工具连接数据库将 sql 导入就完成啦。
本文主要参考了文末的第一篇文章,主要是为了记录折腾的过程,当然目前搭建完成还有几个问题可以优化,如:
多个网站是否应使用同一个 nginx 容器
容器如何在挂掉后自动重启
换成 docker-compose 编排会不会更好
第一条等遇到了再考虑一下,第二条可以通过 run 命令指定 —restart 即可。
第三条其实可以另写一篇文章了~