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

前言

最近新购入了一台在香港的服务器,并且利用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”

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

回到顶部