使用 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。