利用Docker快速部署个人Blog
发布于 8 年前 作者 cctv1005s 6204 次浏览 来自 分享

前言

最近新购入了一台在香港的服务器,并且利用godaddy购入了域名,所以决定搭建一个Blog.

目前,主流的搭建博客的方式主要有:

  • Hexo

  • Wordpress

不过本次我不打算采取上述的方式来搭建Blog。孙正华老哥之前写的iBlog是我非常喜欢的Blog风格样式(http://skysun.name),界面优雅美观,阅读流畅,带目录,支持响应式。所以我本次决定采用iBlog作为Blog的基础,后面再完善。

image_By6r74SdM.png

iBlog需要 nodejs , redis , mongoDB的环境,对于我这种重度的Docker依赖者,自然需要利用Docker搭建一个这样的环境。

iBlog的Docker环境搭建

在这里,我们需要利用docker-compose来帮助我们完成多个container的链接,所以需要写一份 docker-compose.yml 作为构建的基础。

搭建NodeJS环境

直接使用官方的node镜像,并制定版本到8.9.0。

由于在Quick Start中指出,项目的前端依赖由bower提供,所以我们需要对官方的镜像上再安装一个全局的bower,为此,我们写一份 Dockerfile

FROM node:8.9.0 
RUN npm install bower -g

接着,我们需要在docker-compose里面写入server部分的代码:

web: 
 build: ./node_env # 指向Dockerfile存放的位置
 ports: 
 - 80:3000 # 端口映射
 volumes: 
 - ./:/home/src # 文件夹映射
 command: sh /home/src/bin/enterpoint.sh # 入口命令

下面是enterpoint.sh的代码,主要做的是安装依赖和启动server

cd /home/src
echo "begin to npm install"
npm install
echo "begin to bower install"
bower install --allow-root # 在docker环境下需要在允许root执行bower
node /home/src/bin/www

搭建数据库环境

数据库主要是mongoDB 和 redis 两个数据库,我们在docker-compose中写入他们两个的配置:

redis: 
 image: redis:3.2.0 
mongoDB: 
 image: tutum/mongodb:3.2 
 environment: 
 AUTH: 'no' # 由于Docker container之间会形成内网环境,所以在不暴露的端口情况,可以不设置验证。

数据持久化

为了避免更新container之后数据库的数据丢失,我们需要将container里面的数据绑定在本地的磁盘上,这就需要用到 docker-compose 语法中的volumes选项。

一般情况下,我们会自主选择一个文件夹进行绑定,就例如我在nodejs环境搭建的 yml 片段中写的那样。

- 本地的文件夹 : container中的文件夹

不过由于数据库的操作会涉及到权限问题,所以我们直接将创建文件夹的事情交给Docker来完成,只需要在 yml 文件中声明:

volumes: 
 db-volume:

然后选用即可。

完整的docker-compose.yml文件

version: '2' # volumes是docker-compose version 2 才支持的关键字,所以此处要声明使用version2
services:
 web:
 build: ./node_env
 ports: 
 - 80:3000
 volumes: 
 - ./:/home/src
 command: sh /home/src/bin/enterpoint.sh
 links:
 - redis
 - mongoDB
 redis:
 image: redis:3.2.0
 
 
 mongoDB:
 image: tutum/mongodb:3.2
 volumes:
 - db_volume:/data/db
 environment:
 AUTH: 'no'
 
volumes:
 db_volume:

启动

配置到docker-compose.yml之后,只需要在iBlog的文件夹下输入命令:

sudo docker-compose up -d

即可启动整个服务,iBlog就正常跑起来了。

其他

项目完整地址:https://github.com/cctv1005s/iBlog2

iBlog2项目地址:https://github.com/eshengsky/iBlog2

文章首发于:http://www.littlebabyjiayi.com/blog/Docker/Docker

3 回复

你是怎么开启守护进程的?

@hpgt 前台启动就行,docker 起后台任务会挂,除非卡住一个 bash。

@hpgt 其实可以在 docker-compose.yml 里面设置 restart: "always"

进程挂了就会自动重启的,然而我没有设置,哈哈哈

回到顶部

AltStyle によって変換されたページ (->オリジナル) /