使用Docker构建Jekyll框架网站

使用dockerfile构建apache + jekyll

目录

Jekyll基础镜像

mkdir jekyll
cd jekyll
vi Dockerfile

其中Dockerfile内容修改文件内容为:

FROM ubuntu
MAINTAINER hongyang liu 1664698982@qq.com
ENV REFRESHED_AT 2019-11-17 RUN apt-get -yqq update
RUN apt-get -yqq install ruby ruby-dev make nodejs
RUN gem install --no-rdoc --no-ri jekyll VOLUME /data
VOLUME /var/www/html WORKDIR /data ENTRYPOINT ["jekyll","build","--destination=/var/www/html"]

构建成功后结果如下:

/data,用来存放网站源代码

/var/www/html/,用来存放编译后的Jekyll网站码

镜像基于Ubuntu 18.04,并且安装了Ruby和用于支持Jekyll的包。

然后使用VOLUME指令创建了两个卷

最后一句命令的意思就是每次启动的时候就将/data下的源文件编译成可发布的网站内容,并放在/var/www/html中供下面的apache使用

构建Jekyll基础镜像

docker build -t taiyangyixi2/jekyll .

Apache镜像

创建Apache Dockerfile

mkdir apache
cd apache
vi Dockerfile

Dockerfile内容

FROM ubuntu:14.04
MAINTAINER hongyang liu 1664698982@qq.com
ENV REFRESHED_AT 2019-11-17 RUN apt-get -yqq update
RUN apt-get -yqq install apache2 VOLUME ["/var/www/html"]
WORKDIR /var/www/html ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2 RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR
EXPOSE 80
ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D","FOREGROUND"]

Dockerfile构建了一个镜像,

然后使用VOLUME指令创建一个卷,

即/var/www/html/,用来存放编译后的Jekyll网站,然后将/var/www/html设置为工作目录

使用ENV设置必要的环境变量,创建了必要的目录

并设置了EXPOSE公开了80端口。

最后指定了ENTRYPOINT和CMD指令组合来在容器启动时默认运行Apache.

构建Jekyll Apache镜像

docker build -t taiyangyixi2/apache .

启动Jekyll网站

现在有了如下两个镜像

  • Jekyll:安装了Ruby及其他必备软件包的Jekyll镜像
  • Apache:通过Apache Web服务器来让Jekyll网站工作起来的镜像

下载博客源代码

cd ~
git clone https://github.com/jamtur01/james_blog.git

在这个目录下可以看到一个启用了Twitter Bootstrap的最基础的Jekyll博客。如果你也想使用这个博客,可以修改_config.yml文件和主题,以符合你的要求

docker run -v /home/james_blog:/data/ --name james_blog taiyangyixi2/jekyll

运行结果

启动了名为james_blog的新容器,

把本地的james_blog目录作为/data/卷挂在容器汇中。

容器已经拿到网站的源代码,并将其构建到已经编译的网站,存放到/var/www/html目录

创建Apache容器

docker run -d -P --volumes-from james_blog taiyangyixi/apache

{}--volumes-from把指定容器里的所有卷都加入新创建的容器里

Apache容器可以访问之前创建的james_blog容器里的/var/www/html卷中存放的编译后的Jekyll网站。即便james_blog容器没有运行,Apache容器也可以访问这个卷。不过,容器必须存在,如果用docker rm命令删除了james_blog容器,那么这个卷和卷里的内容也就不存在了。

查看Apache容器端口

docker port  30d486b77899 80

在Docker宿主机上浏览该网站:

更新Jekyll网站

cd ~
vi james_blog/_config.yml

将title域修改为James' Dynamic Docker-driven Blog

更新博客网站

docker start james_blog

查看容器日志

docker logs james_blog

使用Docker构建Jekyll框架网站的更多相关文章

  1. Docker学习6:使用docker构建Jekyll服务和java服务

    写在前面 ## 文章Dockerfile中涉及apt-get 等操作需更换镜像 在Dockerfile中添加下列 Dockerfile源码,见下面作者githubhttps://github.com/ ...

  2. Docker构建镜像过于缓慢解决-----Docker构建服务之部署和备份jekyll网站

    参考原文链接:https://www.jianshu.com/p/e6b7e68f2ba7 来自<第一本Docker书>,我觉得很有趣,就记录一下 准备国内ubuntu镜像 每次构建Ubu ...

  3. docker实战——构建Jekyll

    构建第一个应用 要构建的第一个应用是Jekyll框架的自定义网站.我们会构建一下两个镜像. 一个镜像安装Jekyll以及其他用于构建Jekyll网站的必要的软件包. 一个镜像通过Apache来让Jek ...

  4. 【docker构建】基于docker构建wordpress博客网站平台

    WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPre ...

  5. selenium 结合 docker 构建分布式测试环境 (初学者视角)

    前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结. 1.记录下学习中遇到的坑,当做学习笔记.2.有前人路过看到文章中比较落后的做法,请务必一定要指教.(因为是初学者视角,很多东西只是走通而已 ...

  6. Skeljs – 用于构建响应式网站的前端开发框架

    skelJS 是一个轻量级的前端框架,用于构建响应式站点和应用程序.让设计人员和开发人员可能够使用四个强大的组件:CSS 网格系统,响应式处理程序,CSS 的快捷方式和插件系统. 您可能感兴趣的相关文 ...

  7. 构建ASP.NET网站十大必备工具(2)

    正常运行时间 当一个网站发布以后,你肯定希望你的网站不会遇到任何问题,一直处在正常运行状态之中.现在,我使用下面这些工具来监控“Superexpert.com”网站,确保它一直处在正常运行状态之中. ...

  8. 构建ASP.NET网站十大必备工具(1)

    最近使用ASP.NET为公司构建了一个简单的公共网站(该网站的地址:http://superexpert.com/).在这个过程中,我们使用了数量很多的免费工具,如果把构建ASP.NET网站的必备工具 ...

  9. selenium结合docker构建分布式测试环境

    selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...

随机推荐

  1. sap和OA之间数值传递2(工程创建)

    1.创建project. 右击--new-other

  2. netcore sdk版本选择

    NetCore sdk并不是每个版本都支持VS2017工具,也不是每个版本的sdk版本号和Runtime版本号都一样,这就需要我们在创建某个版本的net core应用时注意: 使用不同版本的vs时需要 ...

  3. 微信测试号:config:invalid url domain

    今天调试微信分享的时候,配置参数时一直提示config:invalid url domain,网上找了一下,都说是appId和域名没有绑定.仔细看了下,有绑定没错.又猜测是不是二级域名的问题,因为是测 ...

  4. PhantomJS简单使用

    PhantomJS下载地址:   http://phantomjs.org/download.html 简单使用: from selenium import webdriver # 要想调用键盘按键操 ...

  5. 我脑中的JVM大全附带Java8的特性

    Java虚拟机-sun classic vm 世界上第一款商用的Java虚拟机. 只能使用纯解释器的方式来执行Java代码. Java虚拟机-ExactVM Exact Memory Manageme ...

  6. Laravel 运行php artisan serve命令时提示No application encryption key has been specified

    创建了新的laravel项目后, 运行提示:No application encryption key has been specified 解决方法: 这个是由于没有配置好 APP_KEY 在终端上 ...

  7. logstash 入门篇

    场景介绍 基于分布式集群海量日志数据,且分布在不同的服务器上,日志的采集以及可视化是需要我们解决的问题.ELK就是这么一个方案,当然我们这里主要讲解logstash安装配置和基础语法. ELK帮我们解 ...

  8. maven 学习---Maven外部依赖

    现在,你也知道Maven做依赖管理使用Maven仓库的概念.但是,如果依赖是不提供任何远程存储库和中央存储库发生了什么? Maven提供为使用外部依赖的概念,应用在这样的场景. 举一个例子,让我们做以 ...

  9. 章节十四、2-自动完成功能-Autocomplete

    一.什么是自动匹配功能? 很多网站都有自动匹配功能,列如你在使用天猫搜索商品时,输入“鞋”,输入框的下面会出现很多与“鞋”有关的选项. 二.以https://www.expedia.com/网站的城市 ...

  10. redis高并发总结

    Redis是单线程的,省去了很多上下文切换线程的时间:(官方答案:因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽.既然单线程容易实现, ...