Contents
  1. 1. 构建Jekyll基础镜像
  2. 2. 构建Apache基础镜像
  3. 3. 启动Jekyll网站
  4. 4. 更新Jekyll网站
  5. 5. 备份Jekyll卷

dockerfile 构建apache+jekyll

构建Jekyll基础镜像

创建 Jekyll Dockerfile

1
2
3
mkdir jekyll
cd jekyll
touch Dockerfile

Jekyll Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
FROM ubuntu
MAINTAINER flag0 root@flag0.com
ENV REFRESHED_AT 2019-9-5

RUN apt-get -yqq update
RUN apt-get -y install ruby ruby-dev make nodejs gcc
RUN gem install --no-rdoc --no-ri jekyll -v 2.5.3

VOLUME ["/data","/var/www/html"]
WORKDIR /data

ENTRYPOINT ["jekyll","build","--destination=/var/www/html"]

使用VOLUME指令创建了两个卷

  • /data/用来存放网站的源代码

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

将够做目录设置到/data/,使用ENTRYPOINT指定自动构建的命令,将/data/中所有的Jekyll网站代码构建到/var/www/html目录中

构建镜像

1
docker build -t flag0/jekyll .

构建Apache基础镜像

创建Apache Dockerfile

1
2
3
mkdir apache
cd apache
vim Dockerfile

Jekyll Apache的Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
FROM ubuntu:14.04
MAINTAINER flag root@flag0.com
ENV REFRESHED_AT 2019-9-5

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/locl/apache2

RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D","FOREGROUND"]

Dockerfile 安装了Apache镜像,使用了VOLUME指令创建了一个卷/var/www/html,用来存放编译后的Jekyll网站,将其设为工作目录,使用ENV指令设置了必要的环境变量,创建了必要的目录,使用EXPOSE公开了80端口,指定了ENTRYPOINT和CMD指令组合来在容器启动时默认运行Apache

构建镜像

1
docker build -t flag0/apache .

启动Jekyll网站

现在有了两个镜像

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

下载Jekyll博客

1
2
cd ~
git clone https://github.com/flag0/james_blog.git

在这个目录下可以看到启用了Twitter Bootstrap的最基础的Jekyll博客,可以通过修改_config.yum文件和主题来达到想要的效果

创建Jekyll容器

1
2
3
4
5
6
7
docker run -v /root/james_blog:/data/ --name james_blog flag0/jekyll
Configuration file: /data/_config.yml
Source: /data
Destination: /var/www/html
Generating...
done.
Auto-regeneration: disabled. Use --watch to enable.

启动了名为james_blog的新容器,将本地的james_blog目录作为/data/卷挂在到容器里,容器将其构建到已编译的网站存放到/var/www/html目录

创建Apache容器

1
docker run -d -P --volumes-from james_blog flag0/apache

--volumns-from 把指定容器里所有的卷都加入新创建的容器。

apache可以访问james_blog容器中的/var/www/html卷的内容,即便james_blog容器没有运行,apche也可以访问这个卷。

查看apache容器端口

1
2
docker port 3f208ad9d913 80
0.0.0.0:32780

1567869039284

成功访问!

更新Jekyll网站

编辑Jekyll博客

1
vim james_blog/_config.yml

修改其title为flag0’s blog

1567869508850

再次启动james_blog容器

1
docker start james_blog

查看james_blog容器的日志

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost]# docker logs james_blog
Configuration file: /data/_config.yml
Source: /data
Destination: /var/www/html
Generating...
done.
Auto-regeneration: disabled. Use --watch to enable.
Configuration file: /data/_config.yml
Source: /data
Destination: /var/www/html
Generating...
done.
Auto-regeneration: disabled. Use --watch to enable.

访问查看修改效果

1567869676129

修改成功!

备份Jekyll卷

备份/var/www/html

1
2
3
4
5
6
7
8
docker run --rm --volumes-from james_blog -v $(pwd):/backup ubuntu tar cvf /backup/james_blog_backup.tar /var/www/html
tar: Removing leading `/' from member names
/var/www/html/
/var/www/html/archive.html
/var/www/html/atom.xml
/var/www/html/sitemap.txt
/var/www/html/tags.html
...
  • --rm容器运行完后自动删除

运行后,在当前目录下会出现james_blog_backup.tar文件

Contents
  1. 1. 构建Jekyll基础镜像
  2. 2. 构建Apache基础镜像
  3. 3. 启动Jekyll网站
  4. 4. 更新Jekyll网站
  5. 5. 备份Jekyll卷