服务器上程序越来越多,它们的命令都是啥来着?
在公司学习了Docker,发现它对不会背命令的人非常友好。
emmm,把程序丢到Docker上!

迁移全过程

(22:00)-开始

  • 文件备份 ->完成!
  • 数据库备份->完成!
  • ssl证书备份->完成!
  • nginx规则备份->完成!

万事俱备,准备迁移博客。

(22:30)-拜拜!CentOS

  • 云后台登录
  • 更换操作系统
  • Ubuntu 16.04 x64
  • 完成

几秒钟,独一无二的镜像消失在了这个世界上。CentOS,再见。

(22:40)-你好呀,Docker和小伙伴们

emmmm,1点前应该能睡觉吧。

像这样安装Docker-CE。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo gpasswd -a ${USER} docker
# link: https://docs.docker.com/install/linux/docker-ce/ubuntu/

添加了官方仓库,并且装好最新了的docker-ce。

装上最新的docker-compose!

$ curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ sudo reboot
$ docker-compose -v

装上实用的Docker面板

$ docker volume create portainer_data
$ docker run -d -p 外部端口:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
# 浏览器访问 ip:外部端口

(23:25)-漫无止境的上传

新机是没有FTPServer的!
WinSCP终于连接上了!
上传速度真慢,转啊转啊。
文件备份里还有上个月的文件备份???

  • 文件备份上传&unzip ->完成!
  • ssl证书上传->完成!

(00:50)-请出大神的DNMP

DNMP是yeszao大神做的Docker LNMP一键安装包。

$ git clone https://github.com/yeszao/dnmp.git

# 修改配置文件!PHP,MySql,Nginx[证书,规则,目录,PHP版本] 
# https://github.com/yeszao/dnmp#2%E5%BF%AB%E9%80%9F%E4%BD%BF%E7%94%A8
$ cd dnmp
$ cp env.sample .env
$ cp docker-compose-sample.yml docker-compose.yml
$ docker-compose up

(01:40)-宝贵的数据恢复

快两点了!?

DNMP自带phpMyAadmin。

  • 建立数据库,恢复备份数据 ->完成!
  • 建立WP需要的数据库账号 ->完成!
  • 写段PHP测试一下 ->完成!
  • 修改wp-config.php ->完成!
    注意db_server地址:mysql

(2:00)-网站打不开了

好困,泡杯浓咖啡。

浏览器地址栏->www.azimiao.com->回车,一气呵成!
500错误! ???

nginx日志:

#nginx error log
PHP:Call to undefined function mysql_connect() 

WordPress在php7.2上不应该调用mysqli么?
嗯,容器没装mysqli扩展。

docker ps
# 上文找到了 php72 容器id 3584bcd6a026
docker exec 3584bcd6a026 docker-php-ext-install mysqli
docker restart 3584bcd6a026

ojbk!地址栏->www.azimiao.com->回车,一气呵成!
建立数据库连接时出错???

找Bug……
第二杯咖啡……
找Bug……

删掉wp-config.php让wp自己生成就好了?!

wp没权限建立文件?手动复制!

访问成功!

(2:50)-WP没有权限上传文件?

创建/2019/04/a.png失败,上级目录没有写入权限

进入php容器

$ ls -l www

所有者uid 1000 ?

$ ps
# php user www-data
$ chown -R www-data www

上传成功

(3:45)-封闭无用端口与服务

好困,撑不住了。
操作中………………
操作中………………
操作中………………
完成。

常见问题记录

  1. docker宿主机与容器主机映射卷文件权限不统一
    使用docker run 命令运行容器时,可以通过user参数指定运行用户(uid)和组(uid),和主机一样即可。
    至于docker-compose,yml里试着添加user参数,打包完成,但容器运行秒挂。

  2. mysql的地址在哪
    容器每次重启,内部ip可能发生变化。
    DNMP内可以填mysql,或者修改配置文件,固定Mysql容器IP。

我来吐槽

*

*

3位绅士参与评论

  1. 后宫学长06-27 14:12 回复

    你这不够快,无缝切换最好呢……
    我用的是Ubuntu 16.04 + OneinStack。

    旧机备份 WP 根目录 + 数据库 + SSL 脚本,打包放置 WP 根目录下,等待下载。
    新机装好相同环境(大致),WGET 旧机器上面的备份包,速度比本地上传快几百倍(夸张)。

    然后新机新建 HOST (或使用旧机配置文件),并且打开 SSL ,再替换 SSL 证书,解压 WP 到位置,命令还原数据库,不需要 phpMyAadmin 了。

    数据库端口密码一致,WP 配置也无需修改呢。

    然后解析切换新机 IP ,关闭旧机 HTTP 服务,PING 出新 IP ,更新一波 SSL 证书就完事了…
    还是 SSH 比面板好使。(滑稽)

    • 野兔06-27 18:19 回复

      Docker的优点倒不在这些方面~

  2. 醉开水06-17 19:46 回复

    居然挂广告 差评

  3. Ryoma06-09 11:31 回复

    为什么要换系统那?