博客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提高自己的开发效率~

标签: none