在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/

image.png

服务器部分使用了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というのは別の箇所でも指定されています。この表記ですと、上記の二つよりデータが消える場合が少なくなります。データボリュームの名前が固定されるので、コンテナを作り直してもデータが引き継がれます。
image.png

只要掌握以下最基本的内容,我认为你可以轻松地制作自己需要的简易工具,而不感到任何困难。