今までなんとなく使ってたDockerをちゃんと理解する
なんとなくの操作で使っていたDocker
今までなんとなくの操作で、用意してもらったDocker環境を利用していた。
今回自分でDocker環境を一から構築しようと思って、勉強した内容のまとめ。
実際のコード
Dockerで[Nextjs x PostgreSQL]の構成で構築
services:
app:
container_name: app
tty: true
networks:
- app_network
build:
context: .
ports:
- "3000:3000"
volumes:
- ./:/app
- node_modules:/app/node_modules
depends_on:
- db
db:
image: postgres:15
hostname: db
container_name: db
env_file:
- ./.env
networks:
- app_network
environment:
- TZ=Asia/Tokyo
- POSTGRES_DB=$DB_NAME
- POSTGRES_USER=$DB_USER
- POSTGRES_PASSWORD=$DB_PASS
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- 5432:5432
volumes:
- db_data:/var/lib/postgresql/data
- ./sql:/docker-entrypoint-initdb.d
networks:
app_network:
driver: bridge
volumes:
node_modules:
db_data:
FROM node:18-alpine
RUN apk add g++ make py3-pip
WORKDIR /app/
COPY ./ /app/
RUN apk add --no-cache git
RUN npm install -g npm@9.7.2
RUN npm install -g node-gyp
RUN npm upgrade --save --legacy-peer-deps
RUN npm install
Node環境構築部分
app:
container_name: app
tty: true
networks:
- app_network
build:
context: .
ports:
- "3000:3000"
volumes:
- ./:/app
- node_modules:/app/node_modules
depends_on:
- db
networks:
app_network:
driver: bridge
volumes:
node_modules:
1. container_name
コンテナの名前を明示的に設定することができる。
設定しない場合、自動で命名される。
2. tty
仮想端末を配置するためのコマンド
true → 配置する
false → 配置しない
※配置しないなら書かなくてもよい
仮想端末を配置することでフォアグラウンドで実行するプロセスが無い場合に起こる、自動的な正常終了を防ぐ役割を持つ。
3. networks
デフォルトのbridgeは、同じホスト上の他のコンテナと通信する必要がある場合に設定。
その他の設定値は下記公式を参照
4. build
Dockerfileを使用する場合、Dockerfileの相対パスを記載
5. ports
ローカルホストとコンテナのポートを繋げる設定
左側にローカルホストのポート番号、右側にDocker内でのポート番号を指定します。
6. volumes
データファイルの保存場所を設定。
左側にローカルホストの相対パス、右側にDocker内の絶対パスを指定します。
7. depends_on
Service間の依存関係を指定するもの
起動時、depends_onが指定されたServiceは、depends_onで指定されたServiceが起動した後に起動するようになる。
終了時、depends_onが指定されたServiceは、depends_onで指定されたServiceが終了する前に終了するようになる。
PostgreSQL環境構築部分
db:
image: postgres:15
hostname: db
container_name: db
env_file:
- ./.env
networks:
- app_network
environment:
- TZ=Asia/Tokyo
- POSTGRES_DB=$DB_NAME
- POSTGRES_USER=$DB_USER
- POSTGRES_PASSWORD=$DB_PASS
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- 5432:5432
volumes:
- db_data:/var/lib/postgresql/data
- ./sql:/docker-entrypoint-initdb.d
networks:
app_network:
driver: bridge
volumes:
node_modules:
db_data:
※nodejs環境構築部分で説明済みの項目はスキップ
1. image
DockerHubから、Dockerコンテナの動作環境となるテンプレート(DockerImage)をしてするパラメーター。
指定方法は使用するイメージに依存するので、DockerHubを参照。
hostname
ホスト名の明示的な指定する。
コンテナ間の通信を行う際などに利用する。
2. env_file
.envに指定した環境変数を読み込ませるための指定。
ファイルの相対パスとファイル名を記載する。
3. environment
TZ・・・タイムゾーンの設定(日本時間ならAsia/Tokyo)
POSTGRES_DB・・・DB名
POSTGRES_USER・・・デフォルトのユーパーユーザー名
POSTGRES_PASSWORD・・・デフォルトのユーパーユーザーのパスワード
PGDATA・・・DBデータの保存場所を指定
その他のパラメーターは以下を参照
Discussion