使用 Dockerfile 构建 Crowi 并使用 Docker Compose 执行 Crowi
请提供一个要求是否提供母语中文简化翻译的具体句子。
将Crowi在Docker Node上运行的过程记录
前次启动了node容器之后,在容器上进行操作使得crowi能够运行。
这次将其整理为Dockerfile,并通过Dockerfile构建映像以使其可用。
然后使用Docker Compose分别在每个容器中启动node(crowi)、mongodb、redis以及额外的elasticsearch。
参考网站
以下是对 https://hub.docker.com/r/bakudankun/crowi/ 的翻译:
https://hub.docker.com/r/bakudankun/crowi/的中文路径如下:
Dockerfile和Docker Compose的用法对我来说很有参考价值。非常感谢。
(顺便一提,Crowi能够在没有g++、make和python的情况下构建成功,是因为它使用的是v1.4.0版本吗?)
事先准备
使用以下结构准备三个文件。
$ tree crowi
crowi
├── Dockerfile
├── docker-compose.yml
└── docker-entrypoint.sh
FROM node:4.5-slim
MAINTAINER nooby
ENV DOCKERFILE_VERSION v1.0
ENV CROWI_VERSION v1.5.0
# 以下の3ステップ構成でビルド
# 一つのRUNコマンドで実行してるのは生成されるイメージを小さくするため
#
# 1. ビルドに必要なバイナリのインストール
# RUN apt-get update && apt-get install -y \
# git \
# g++ \
# make \
# python \
#
# 2. crowiのクローンとビルド
# && git clone -b $CROWI_VERSION https://github.com/crowi/crowi.git \
# && cd /crowi \
# && npm install --unsafe-perm \
#
# 3. 不要になったパッケージの削除
# && apt-get autoremove -y \
# && apt-get clean \
# && rm -rf /var/lib/apt/lists/* \
# && cd /crowi/node_modules && npm uninstall --save --unsafe-perm \
# babel* \
# gulp* \
# webpack* \
# && rm -rf \
# /root/.npm \
# /tmp/*
RUN apt-get update && apt-get install -y \
git \
g++ \
make \
python \
&& git clone -b $CROWI_VERSION https://github.com/crowi/crowi.git \
&& cd /crowi \
&& npm install --unsafe-perm \
&& apt-get remove -y \
git \
g++ \
make \
python \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& cd /crowi/node_modules && npm uninstall --save --unsafe-perm \
babel* \
gulp* \
webpack* \
&& rm -rf \
/root/.npm \
/tmp/*
ENV PORT ${PORT:-80}
EXPOSE $PORT
# timezoneをjstに
# ref: https://serverfault.com/questions/683605/docker-container-time-timezone-will-not-reflect-changes/683607
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /crowi
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["npm", "start"]
#!/bin/bash
export NODE_ENV=production
export MONGO_URI=${MONGO_URI:-mongodb://mongo:27017/crowi}
export REDIS_URL=${REDIS_URI:-redis://redis:6379/crowi}
export ELASTICSEARCH_URI=${ELASTICSEARCH_URI:-http://elasticsearch:9200/crowi}
exec "$@"
version: '2'
services:
crowi:
build:
context: .
dockerfile: Dockerfile
image: node:crowi
links:
- mongo:mogo
- redis:redis
- elasticsearch:elasticsearch
ports:
- 80:80
mongo:
image: mongo
redis:
image: redis:alpine
# user: について
# commandを指定するとelasticsearchのdocker-entrypoint.shで
# user権限切り替えのスクリプトがうまく実行されずrootユーザーのままになる。
# root権限ではelasticsearchを実行できないのでuser: elasticsearchを指定する。
#
# command: について
# crowiの全文検索に必要なanalysis-kuromojiのインストールと、
# あると便利そうなウェブコンソールelasticsearch-headのインストールをしてから
# elasticsearchを実行
elasticsearch:
image: elasticsearch
user: elasticsearch
ports:
- 9200:9200
command:
- "sh"
- "-c"
- "./bin/plugin install analysis-kuromoji;
./bin/plugin install mobz/elasticsearch-head;
elasticsearch;"
构建 Dockerfile
完成上述文件结构后,切换到crowi目录并执行docker build命令。
$ docker build -t node:crowi .
构建这个需要花费相当长的时间。大约十分钟左右吧?
由于在docker-compose.yml文件中编写了构建node:crowi的命令,因此可以使用docker-compose up命令来同时进行构建和启动容器,但是仅构建而等待时间太长会感到不舒服,所以我先单独执行了构建命令。
启动和关闭方法 hé
如何启动
切换至crowi目录,并执行docker-compose up命令。
$ docker-compose up
# docker-compose up -dとするとバックグラウンド実行
起動后,如果访问http://localhost能够显示Crowi的设置页面,则表示正常。请注意,如果使用docker for mac的话,可以使用docker-machine ip命令来确认docker machine的IP,然后在输入框中输入docker machine的IP替代localhost。
结束方式
如果是在后台运行,那么使用ctrl-c(如果是在Docker Compose中则使用docker-compose stop)停止操作。
在Crowi上启用Elasticsearch。
登录Crowi后,在管理->搜索管理->从build now开始启用。
参考资料:Crowi 公式博客
迷上了这一点
如果有空的话,也许会在有时间的时候分别写成文章…
-
- Dockerイメージのタイムゾーンの変更
-
- Dockerイメージのサイズの縮小化
-
- REDIS_URL
- Elasticsearchのプラグイン
最后
我们计划稍后将创建的Docker镜像发布到Docker Hub上。
补充记录 2016年9月11日 18:25
我已在Github和Docker Hub上公开了。
Github
https://github.com/nooby-noob/docker-node-crowi
Github
https://github.com/nooby-noob/docker-node-crowi
Docker Hub是一个位于https://hub.docker.com/r/noobynoob/docker-node-crowi/的仓库。
使用以下命令进行镜像拉取、容器启动和Crowi的执行。
git clone https://github.com/nooby-noob/docker-node-crowi.git
cd docker-node-crowi
docker-compose up
crowi可以单独运行。
docker run -p 80:80 noobynoob/docker-node-crowi:v1.5.0
如果单独执行,请根据需要设置MONGO_URI和REDIS_URL。