ファランクスブログ

© 2026 all rights reserved.
  1. blog
  2. docker-basics
  • Docker-Desktop
  • image
  • Dockerfile
  • 例
  • Nodejs:ファイルの実行
  • Nodejs:サーバー
  • Docker-Compose
  • 例
  • Postgres
  • volumes
  • .dockerignore

Docker:

2026年6月7日

コンテナ:

  • Dockerエンジンが動いているPC上ではDockerエンジンの上にコンテナをプロセスとして立ち上げることができる。

  • コンテナは「ホストOSのカーネルを共有」する。カーネル = OSの基礎部分

Docker-Desktop

Docker-DesktopをインストールするとDockerに必要なDocker EngineやDocker Cli、Docer Composeもインストールされる。UbuntuではPCの起動時にDocker エンジンが起動する(sudo systemctl status dockerで確認)。

インストール:https://docs.docker.com/desktop/setup/install/linux/ubuntu/

  1. devファイルをDLしインストール

  2. sudo docker loginでワンタイムパスワードが表示されるので、ブラウザにペーストしてデバイスを承認

image

コマンド:

  • imageの確認: docker images

  • imageの削除: docker rmi image名

    • imageの削除はrmi

      • rmはコンテナの削除。docker stop コンテナIDでコンテナを停止してから行う。

Dockerfile

Dockerfileはイメージを作るためのファイル

// Dockerfile

FROM node:20
  • FROMはベースにするイメージ。公式イメージだけでなく自分で作ったイメージを指定することもできる。

imageの作成:

docker build -t node-base .
  • Dokerfileがあるディレクトリでコマンドを実行し、node-baseという名前のカスタムイメージを作成

  • -t:イメージにタグをつける。付けないと docker imagesで <none>と表示される。

コンテナの実行:

docker run -it node-base:latest bash
  • docker psでコンテナの確認

  • bash or shをつけることでコンテナ内でShellが起動し、操作できる。

    • -itの部分が無いとコンテナ内のShell操作が出来ないので、bash or shをつける場合は-itがセットで必要

    • 既に起動しているコンテナのShell操作をしたい場合は以下のコマンド

docker exec -it <CONTAINER ID or NAMES> bash(or sh)

例

Nodejs:ファイルの実行

コンテナのNodejs環境でconsole.logを出力するファイルを実行する。

app/
├─ Dockerfile
├─ package.json
├─ index.js

Dockerfile:

FROM node:20

WORKDIR /app

COPY index.js .

RUN apt update && apt install -y git

CMD ["node", "index.js"]
  • WORKDIR:コンテナ内に /appフォルダを作成し、この行以降の命令のカレントディレクトリする。

  • COPY:ホスト側のパスを指定しコンテナにコピー。WORKDIRで/appをコンテナのカレントディレクトリにしているので、.だとコンテナの/appにindex.jsがコピーされる。

  • RUN:イメージのビルド時に実行

    • パッケージのインストール、ファイルの作成など

  • CMD:コンテナの起動時に実行

    • アプリケーションの起動など

ビルド / コンテナの起動:

docker build -t test-1 . && docker run test-1
  • 今回はconsole.logを出力するnodeプロセスが起動した後にコンテナは終了するので docker psには表示されない。

  • docker run -it test-1 shでコンテナを起動する場合はShellのプロセスが続くのでdocker psにコンテナが表示される。

Nodejs:サーバー

Nodejs環境のコンテナでHTTPサーバーを起動する例

app/
├─ Dockerfile
├─ package.json
├─ index.js

index.js:

import express from "express";

const app = express();

app.get("/", (req, res) => {
  res.send("from Docker");
});

app.listen(3000, () => {
  console.log("Server is running on port 3000");
});

Dockerfile:

FROM node:20

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "run", "dev"]

ビルド / コンテナの起動:

docker build -t test-2 . & docker run test-2
  • コンテナの3000番ポートでサーバーが起動しているのは確認できるが、ホストPC側のブラウザでアクセスすることは出来ないので開発には不便な状態

ポートマッピング:

docker run -p 3000:3000 test-2
  • -p:コンテナの中のポートにホスト経由でアクセスできるようにする。

0.0.0.0:8080->80/tcp, [::]:8080->80/tcp
  • docker psを見るとPORTSが上記のような表示になっている。

ホットリロード:

docker run -p 3000:3000 -v $(pwd):/app test-2
  • -v ホスト側パス:コンテナ側パス:ホストのディレクトリをコンテナ内にマウントする。

  • bindマウントという

Docker-Compose

imageの例でimage用のDockerfileを作り build・runコマンドでオプションを付けてコンテナを起動していた一連の流れはDocker-Composeのみで実現できる。

docker-compose.yml:

services:
  app:
    image: node:20
    working_dir: /app
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    command: >
      sh -c "npm install && npx nodemon index.js"
  • expressサーバーをコンテナで起動し、ポートマッピングを3000にしてホットリロード可能にする

docker compose up -d
  • 上記のコマンドでコンテナを起動する。

  • -d:これを付けないとログがターミナルに流れ続ける為、composeでコンテナを起動するときはデフォルトで付ける。

docker compose down
  • コンテナの終了コマンド

例

Postgres

コンテナでPostgresを起動することでNeonやSupabaseのような外部DBを使わずにテストすることができる。本番ではDBの接続URLを変えるだけで済む。

docker-compose.yml:

services:
  db:
    image: postgres:16
    container_name: test-db
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: dev_db
    volumes:
      - dev_db:/var/lib/postgresql/data

volumes:
  dev_db:

.env:

DATABASE_URL="postgresql://user:pass@localhost:5432/dev_db?schema=test"

volumes

bindマウント:目的 - ファイル共有

    volumes:
      - .:/app
  • ホスト側のディレクトリやファイルをそのままコンテナにマウント

  • ホストで編集したらコンテナに変更が反映される。

  • コンテナ側からnano等でファイルを変更するとホスト側のファイルに変更が反映される。 = コンテナ内でsrcを削除するような事に気をつける必要がある。

named volumes:目的 - データ永続化

    volumes:
      - dev_db:/var/lib/postgresql/data
volumes:
  dev_db:
  • Docker が管理するフォルダ(/var/lib/docker/volumes)にデータを保存できる。

  • 上記の実態はホスト側の/var/lib/docker/volumes/dv_dbにある。

.dockerignore

Docker ビルド時にコピーしたくないファイルやフォルダを指定するためのファイル

  • COPY . . でホストのカレントディレクトリを丸ごとコンテナにコピーするとき、不要なファイルまでコピーされてしまう

  • 例:node_modules や .git、ログファイルなど

=====================ーー

保留 TODO : node_modules関係

=====================ーー

docker
/
other
  • Docker-Desktop
  • image
  • Dockerfile
  • 例
  • Nodejs:ファイルの実行
  • Nodejs:サーバー
  • Docker-Compose
  • 例
  • Postgres
  • volumes
  • .dockerignore