网站首页 文章专栏 为bookstack制作docker image
在二进制版本发布页同时下载二进制文件和源代码,并分别解压到本地。
从源代码目录中复制出Dockerfile
文件,放到二进制文件目录中。
配置文件的介绍见普通安装指导, 涉及到数据库的配置、网站基本配置等。而这些配置是go语言直接读取的,所以无法用环境变量(不会替换,而是直接原样打印成字符串)。
考虑新建一个生成配置文件的脚本,使用echo
命令,动态将环境变量中的内容填充到预定义字符串中,并生成配置文件。
经过改造之后,容器启动会麻烦一些,因为每次我们都要重新生成配置文件。而制作容器时的CMD
命令不能有分号;
,这意味着我们不能在一行中执行两条命令。
所以新建run.sh
脚本,在其中调用generate_conf.sh
生成配置文件,然后运行./BookStack
开始服务。
bookstack_docker/run.sh
#!/bin/bash
mkdir conf
bash ./generate_conf.sh
./BookStack
文件都准备好之后,就可以制作容器了。注意将用户名替换为自己的。
docker build -t wenfengand/bookstack:v1.7 .
以上只是制作了容器,容器运行时的环境变量配置,挂载卷,网络配置等仍需要脚本来简化工作。
使用-e
参数设置容器的环境变量。
BookStack的运行依赖于mysql,需要一个数据库初始化的过程,也就是安装过程。我们为其制作一个安装脚本。
主要思想是用自定义命令./BookStack install
覆盖制作容器时的CMD
设置。
运行脚本与安装脚本大致相同,将-it
改为-d
,并去掉自定义命令即可。
这里我们给容器进行了命名,如果停止后不删除,会影响下次使用。使用一个简单的脚本简化操作。
#!/bin/bash
docker stop some-bookstack
docker rm some-bookstack
执行安装命令
./install.sh
观察到设置数据库的过程
执行运行命令
./run.sh
打开浏览器,在localhost:8181
可以看到bookstack界面,用户名和密码都是admin
.
TODO - [ ] 增加一些脚本示意 - [ ] 将docker上传到docker hub和github - [ ] 给环境变量增加更多选项 - [ ] 增加mysql容器部分 - [ ] ~~增加mysql容器中文显示的链接~~使用mysql workbench发现如何初始化时指定了字符集,mysql docker是可以处理中文的。所以是bookstack自身安装的问题。 - [ ] 增加uploads的文件夹挂载 - [ ] 解决图片文件的对象存储问题(为什么保存到uploads目录而不是云端)