我在代理环境下编写了一个用于创建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として与えるべき。
- 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
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"]
代理服务器设置假设节点将进行FROM操作,并且在DockerFile中(也就是克隆DevHub和进行设置所需的)所需的代理设置有以下两个选项。
-
npm
- npm
- apt-key(Mongoのクライアントインストールに必要)
为了解决仅简单提供环境变量的问题,我们将其作为参数提供给Dockerfile,并将其用作构建的各种参数。
其他设置
-
タイムゾーン:東京固定
- タイムゾーン:東京固定
- bots:邪魔だったので消してしまう
使用方法使用上述的DockerFile来创建容器。
预备工作请提前安装MongoDB。
由于DevHub通过环境变量MONGODB_URI进行连接,请记住它。
由于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"
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/
- http_proxy=http://PROXY_IP:PORT/
https_proxy=http://PROXY_IP:PORT/
跑步 bù)
-
環境変数にMONGODB_URIを与える
- 環境変数に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"
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"