我在代理环境下编写了一个用于创建Node.js应用程序映像的DockerFile

node.jsのアプリケーションをプロキシ環境下で自前のDockerFileでbuildするのがちょいと面倒だった。

DevHubというアプリケーションを使うためのDockerFileについての記事だが、他の同様なnode.js系、MongoDBクライアントを使う系アプリケーションについても通ずるものがありそうなのでここに示す。

DevHub 是什么?为程序员提供的开发辅助沟通工具。适用于数十人开发团队,方便实用的MD笔记+聊天工具。

node.jsとMongoDBのクライアントを必要とする。別にMongoDBサーバが立っている必要がある。

尽管在DockerHub上已经有几个仓库,但由于功能的缺失以及与数据库连接的不满,决定自己创建一个。

为什么这么麻烦呢

    • docker-composeで与える環境変数environmentは、image上で使われるものであって、ビルド時には使えない。引数–build-argとして与えるべき。

 

    npm, apt-key は環境変数http_proxy,https_proxyではプロキシ経由してくれない。引数に与えなくては。

DockerFile -> Docker文件 (Docker

FROM node:latest

# NEED: --build-arg でhttp_proxy、https_proxyを指定
# proxy
ENV http_proxy $http_proxy
ENV https_proxy $https_proxy
RUN npm -g config set proxy $http_proxy
RUN npm -g config set https-proxy $https_proxy
RUN npm -g config set registry "http://registry.npmjs.org/"

# timezone
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

WORKDIR /
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-option http-proxy=$http_proxy --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
RUN echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
RUN apt update
# install mongo cliant only
RUN apt install -y mongodb-org-shell
RUN git clone https://github.com/volpe28v/DevHub.git

WORKDIR /DevHub

# delete bots
RUN rm -f lib/bots/* 

RUN npm config set strict-ssl false
RUN npm install --unsafe-perm
RUN npm config set strict-ssl true

RUN echo -n "#!/bin/bash \n node app.js" > ./entrypoint.sh
RUN chmod +x ./entrypoint.sh

ENTRYPOINT ["/DevHub/entrypoint.sh"]

从使用最新的Node节点。这是一个包含Node.js的Debian镜像。

代理服务器设置假设节点将进行FROM操作,并且在DockerFile中(也就是克隆DevHub和进行设置所需的)所需的代理设置有以下两个选项。

    • npm

 

    apt-key(Mongoのクライアントインストールに必要)

为了解决仅简单提供环境变量的问题,我们将其作为参数提供给Dockerfile,并将其用作构建的各种参数。

其他设置

    • タイムゾーン:東京固定

 

    bots:邪魔だったので消してしまう

使用方法使用上述的DockerFile来创建容器。

预备工作请提前安装MongoDB。
由于DevHub通过环境变量MONGODB_URI进行连接,请记住它。

MongoDB URI 格式:mongodb://服务器IP:端口号/数据库名称
※如果未设置 AUTH,则无需 ID:PASS@

docker-compose.yml 文件

version: '3'

services:
  devhub:
    # ======== build ========
    build:
      context: ./
      dockerfile: Dockerfile
      args:
        - http_proxy=http://PROXY_IP:PORT/
        - https_proxy=http://PROXY_IP:PORT/

    # ======== run ========
    container_name: devhub
    restart: always
    ports:
      - '3000:3000'
    volumes:
      # アップロードされたファイルを保存するディレクトリ
      - \path\to\uploads:/DevHub/static/uploads
      # メニューバーに置かれるリンクを記述したjsonファイル
      - \path\to\menu_links.json:/DevHub/lib/menu_links.json
    environment:
      # MongoDB URI 
      - MONGODB_URI=mongodb://ID:PASS@SERVER_IP:PORT/DB_NAME

    # オプション `-t` は、メニューバーの ”DevHub for XXX” に入るタイトル
    entrypoint: "node /DevHub/app.js -t TITLE"

将 \path\to\uploads 和 \path\to\menu_links.json 提前创建好。

建造给予`build-arg`以下两个选项

    • http_proxy=http://PROXY_IP:PORT/

https_proxy=http://PROXY_IP:PORT/

跑步 bù)

    • 環境変数にMONGODB_URIを与える

 

    • ポート3000をバインド

 

    • アップロードされたファイルをvolumes(/DevHub/static/uploads)

 

    • メニューバーに置かれるLINKリストはホスト側で編集できるようにvolumes(/DevHub/lib/menu_links.json)

 

    実行コマンドnode app.jsに与えるオプション-tでDevHubのタイトルを設定

从Docker Hub 上方获取我已经将此映像推送到Docker Hub上。
只需要有MongoDB服务器,您就可以轻松地使用它,请尝试一下。

version: '3'
services:
  devhub:
    # ======== run ========
    image: koyayashi/devhub
    container_name: devhub
    restart: always
    ports:
      - '3000:3000'
    volumes:
      # アップロードされたファイルを保存するディレクトリ
      - \path\to\uploads:/DevHub/static/uploads
      # メニューバーに置かれるリンクを記述したjsonファイル
      - \path\to\menu_links.json:/DevHub/lib/menu_links.json
    environment:
      # MongoDB URI 
      - MONGODB_URI=mongodb://ID:PASS@SERVER_IP:PORT/DB_NAME

    # オプション `-t` は、メニューバーの ”DevHub for XXX” に入るタイトル
    entrypoint: "node /DevHub/app.js -t TITLE"

bannerAds