在Docker中创建一个满足Nodejs和PostgreSQL所需的环境的方法
使用Docker-compose,介绍如何搭建连接到PostgreSQL的NodeJs应用程序的环境。
此外,还可以通过Docker来确认持久化文件与非持久化文件之间的差异。
成果物如下所示。想要快速确认的人可以点击此链接:
https://github.com/fushihara/docker-pgsql/tree/qiita-1
用Linux输入以下命令
$ git clone https://github.com/fushihara/docker-pgsql.git
$ cd ./docker-pgsql
$ git checkout qiita-1
$ docker-compose up -d
然后,在目标电脑上打开以下网址:http://localhost:20006/
服务器部分使用了Node.js的Express框架,访问日志则使用了PostgreSQL。服务器部分通过cron定时执行任务。文件持久化部分的区别在于docker-compose.yml中volumes项目的指定方式。
Docker相關的最終文件如下所列。
version: '2'
volumes:
vl:
driver: 'local'
services:
pgsql_aaa:
build: ./pgsql/
restart: always
nodejs_xxx:
build: .
ports:
- "20006:20006"
volumes:
- /usr/src/sample-node/node_modules
- .:/usr/src/sample-node
- /usr/src/volume-a/
- vl:/usr/src/volume-b/
depends_on:
- pgsql_aaa
restart: always
FROM node:8.5.0
ENV TZ=Asia/Tokyo
ENV APP_ROOT /usr/src/sample-node
RUN groupadd -g 500 ec2-user && useradd -g ec2-user -u 500 --create-home ec2-user
COPY . $APP_ROOT
RUN chown -R ec2-user:ec2-user $APP_ROOT
RUN mkdir /usr/src/volume-a && chown -R ec2-user:ec2-user /usr/src/volume-a
RUN mkdir /usr/src/volume-b && chown -R ec2-user:ec2-user /usr/src/volume-b
USER ec2-user
WORKDIR $APP_ROOT
RUN npm install
ENTRYPOINT ["npm","start"]
为了方便通过docker ps等命令识别,docker-compose.yml中的pgsql_aaa和nodejs_xxx是用于标识的表达方式。
关于Volume的问题。
-
- /tmp/test.txtは設定ファイルに記載が無いので、Dockerで何も指定しない場合の挙動となります。
-
- /usr/src/volume-a/test.txt はdocker-compose.ymlで/usr/src/volume-a/とだけ指定されています。正直、この場合は何も指定していない/tmp/test.txtとの違いが分かりませんでした。(ハイライトしていませんが、すぐ上の/usr/src/sample-node/では指定する意味があります)
- /usr/src/volume-b/test.txtはdocker-compose.ymlでvi:/usr/src/volume-b/と書かれており、viというのは別の箇所でも指定されています。この表記ですと、上記の二つよりデータが消える場合が少なくなります。データボリュームの名前が固定されるので、コンテナを作り直してもデータが引き継がれます。
只要掌握以下最基本的内容,我认为你可以轻松地制作自己需要的简易工具,而不感到任何困难。