为bookstack制作docker image

前言

制作docker image

下载二进制程序

二进制版本发布页同时下载二进制文件和源代码,并分别解压到本地。

准备初始Dockerfile

从源代码目录中复制出Dockerfile文件,放到二进制文件目录中。

动态生成配置文件

配置文件的介绍见普通安装指导, 涉及到数据库的配置、网站基本配置等。而这些配置是go语言直接读取的,所以无法用环境变量(不会替换,而是直接原样打印成字符串)。

考虑新建一个生成配置文件的脚本,使用echo命令,动态将环境变量中的内容填充到预定义字符串中,并生成配置文件。

设置CMD

经过改造之后,容器启动会麻烦一些,因为每次我们都要重新生成配置文件。而制作容器时的CMD命令不能有分号;,这意味着我们不能在一行中执行两条命令。

所以新建run.sh脚本,在其中调用generate_conf.sh生成配置文件,然后运行./BookStack开始服务。

bookstack_docker/run.sh

1
2
3
4
#!/bin/bash
mkdir conf
bash ./generate_conf.sh
./BookStack

build

文件都准备好之后,就可以制作容器了。注意将用户名替换为自己的。

1
docker build -t wenfengand/bookstack:v1.7 .

制作运行脚本

以上只是制作了容器,容器运行时的环境变量配置,挂载卷,网络配置等仍需要脚本来简化工作。

准备环境变量

使用-e参数设置容器的环境变量。

制作安装脚本

BookStack的运行依赖于mysql,需要一个数据库初始化的过程,也就是安装过程。我们为其制作一个安装脚本。

主要思想是用自定义命令./BookStack install覆盖制作容器时的CMD设置。

制作运行脚本

运行脚本与安装脚本大致相同,将-it改为-d,并去掉自定义命令即可。

制作停止脚本

这里我们给容器进行了命名,如果停止后不删除,会影响下次使用。使用一个简单的脚本简化操作。

1
2
3
#!/bin/bash
docker stop some-bookstack
docker rm some-bookstack

测试

执行安装命令

1
./install.sh

观察到设置数据库的过程

执行运行命令

1
./run.sh

打开浏览器,在localhost:8181可以看到bookstack界面,用户名和密码都是admin.

TODO

  • [ ] 增加一些脚本示意
  • [ ] 将docker上传到docker hub和github
  • [ ] 给环境变量增加更多选项
  • [ ] 增加mysql容器部分
  • [ ] 增加mysql容器中文显示的链接使用mysql workbench发现如何初始化时指定了字符集,mysql docker是可以处理中文的。所以是bookstack自身安装的问题。
  • [ ] 增加uploads的文件夹挂载
  • [ ] 解决图片文件的对象存储问题(为什么保存到uploads目录而不是云端)
0%