博客Docker迁移记
已经一年多没写过博客了,关注过的同学应该知道,这个博客之前挂了小半年的时间。
归结其原因,是本人把服务器密钥的密码给忘掉了(虽然忘了密码跟写博客没啥关系),然后根据蝴蝶效应……
用了两天时间,恶补了一下Docker的知识,经过本地的若干次测试后,终于在Docker上成功部署了本博客,服务器也不会再杂乱无章了~
简单的记录了一下配置过程:
首先是安装docker,根据官方手册
Step 1:
tee /etc/yum.repos.d/docker.repo <<-'EOF'\
[dockerrepo]\
name=Docker Repository\
baseurl=https://yum.dockerproject.org/repo/main/centos/7/\
enabled=1\
gpgcheck=1\
gpgkey=https://yum.dockerproject.org/gpg\
EOF
Step 2:
yum install docker
Step 3:
systemctl enable docker.service
systemctl start docker
systemctl enable docker
然后pull对应的镜像
docker pull nginx
docker pull php
docker pull mariadb
文件及数据目录结构如下
websites
├── dbBackup # 存放数据库备份文件
├── httpsKey # 存放https密钥
├── jackgxcCom # 存放网站数据
├── mysqlData # 挂载到MySQL的'/var/lib/mysql'路径下
├── nginxData # Nginx的配置文件
└── phpData # 存放php.ini等文件
└── conf.d
接下来便是通过docker run
命令配置并启动若干个容器,这个过程中参考了micooz/docker-lnmp,有兴趣的同学可以看一下(由于本人比较懒,也许是最近一段比较忙,没有写成dockerfile形式,之后有时间会进一步优化)
首先是数据库:
docker run -it \
--name mariadb \
-v /root/websites/mysqlData:/var/lib/mysql \
-v /root/websites/dbBackup:/dbBackup \ # 便于建立后导入数据
-e MYSQL_ROOT_PASSWORD=ROOT_PASSWORD \
-e MYSQL_DATABASE=DATABASENAME \
-e MYSQL_USER=USERNAME \
-e MYSQL_PASSWORD=USERPASSWORD \
-d mariadb
运行之后,通过docker exec -it mariadb bash
命令进入容器,将之前导出的mysql备份文件导入数据库即可。
接下来是php:
docker run -it \
--name php \
-v /root/websites/jackgxcCom:/web \
-v /root/websites/phpData:/usr/local/etc/php \
--link mariadb:mariadb \ # 与mariadb容器进行链接
-d php:5.6-fpm
因为需要安装MySQL、iconv、curl等拓展,所以安装完后需要进入容器,安装对应的拓展,感谢Docker提供的docker-php-ext-install
命令,如果需要安装的拓展需要进一步配置,还可以使用docker-php-ext-configure
命令,如需要查看详细使用方法,可以参考这里。
安装后,需要在php.ini配置文件中手动添加mysql拓展的路径extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/mysql.so
最后是Nginx:
docker run
--name nginx
-v /root/websites/jackgxcCom:/web
-v /root/websites/nginxData:/etc/nginx/conf.d
-v /root/websites/httpsKey:/httpsKey
-p 80:80
-p 443:443
--link php:php
-d nginx
由于nginx和php在两个容器中,所以在配置站点的时候,cgi的主机名要填写php容器的主机名,因为已经通过link命令将nginx与php两个容器链接了(Docker会在hosts文件中增加对应容器的ip),所以直接填写php:9000即可。
全部配置流程大致就是这样,Docker作为应用层虚拟化的一个代表,提供了网站运维的新思路,希望能有更多的同学使用Docker提高自己的开发效率~