DockerでnginxとAPIを動かす

どうも、こんにちは。としと申します。
いかがお過ごしでしょうか。

真夏のピークが去りましたね。
若者の全てが染みるこの頃です。(下書き期間が長すぎて、ちょっと今じゃない感は無視してください(´Д`;))

さて、今までElastic Beanstalk の記事を数本書かせていただきました。
その後、ローカルでDockerを動かすことが出てきたので、Dockerの設定と、どうせローカルで使うならまずはElasticBeanstalk on Docker を使ってみようじゃないか! と思い、色々調べながらやってみております。

(以下、Docker Desktop がインストールされている前提です。)
まずはDockerfile...

# ベースイメージを指定
FROM node:latest

# 作業ディレクトリ作成して設定します
WORKDIR /usr/share/nginx/html/

# 必要な環境変数をここに記載します
ENV JWT_SECRET=""
ENV JWT_EXPIRATION=""
ENV MYSQL_DATABASE=""
ENV MYSQL_READ_HOST=""
ENV MYSQL_READ_PASSWORD=""
ENV MYSQL_READ_PORT=""
ENV MYSQL_READ_USERNAME=""

# package.jsonをこぴります
COPY package*.json ./

RUN npm i

# アプリケーションのソースをバンドルします
COPY . .

# PORT
EXPOSE 8081

CMD ["node", "dst/server.js"]

とりあえずこれで

docker build -t userName/api .

↑build

docker run --name api -p 8081:8081 -d userName/api

↑これで起動

で動いてくれました。

docker ps

↑これで動いている一覧がみれます。

docker ps -a

↑ -a をつけると停止しているものもみえます。

docker stop api

↑一回止めましょう。

続いて docker-compose を使っていきます。 先ほどのDockerfileはアプリケーションのDockerfileなので、ファイル名をDockerfile-appに変更します。

新しくDockerfile-web を作ります。

# ベースイメージを指定
FROM nginx:latest

# default.conf 書き換え
COPY ./default.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

default.conf

server {
    listen       80;
    server_name  localhost;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://api:8081/;
    }
}

続いて docker-compose.yml を作ります。

version: '3'
services:
  web:
    build:
      context: docker      # Dockerfile保存場所
      dockerfile: Dockerfile-web    # Dockerfileファイル名
    image: nginx      # docker image name
    container_name: nginx       # docker container name
    expose:
      - 80
    ports:
      - 80:80

  app:
    build:
      context: ./      # Dockerfile保存場所
      dockerfile: Dockerfile-app   # Dockerfileファイル名
    image: api                  # イメージ名
    container_name: api         # コンテナ名
    expose:
      - 8081
    ports:                          # ポート接続
      - 8081:8081
    volumes:                        # mount workdir
      - .:/usr/share/nginx/html/
    command: ["node", "dst/server.js"]

今回のフォルダ構成
PJ/Dockerfile-app
PJ/docker-compose.yml
PJ/docker/Dockerfile-web
PJ/docker/default.conf

その後

docker-compose up --build

↑を実行すると動いてくれます。

f:id:Toshi_bw:20200630122310p:plain

このような感じになれば成功です!

調べながらなので、中々時間がかかりました...

次回はAWS ECR にDocker imageをあげてみるとこら編を記載しようかなと思います。



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com