How to use Docker?

Dockerの使い方ガイド

概要

Docker (ドッカー)

  • コンテナ仮想化技術を利用したオープンプラットフォーム
  • アプリケーションの開発、デプロイ、実行を効率化出来る
メリット
  • 仮想環境であるため、隔離されており、実機に影響を及ぼしにくい
  • VMよりも軽量
  • 起動や動作が速い
  • 開発環境の共有や移行が容易

Dockerで利用するファイル

ファイル 内容
docker-compose.yml
複数コンテナの一括定義・連携
Dockerfile
  • ベースイメージの指定
  • ポート指定 (情報提供のみで、実際のポートマッピングはdocker-compose.ymlで行う)
  • 必要なソフトウェアのインストール
  • 起動時に実行するコマンド等を指定

基本コマンド

コマンド 説明
docker compose up --build -d
Dockerfileに基づいてサービス用のDockerイメージを更新し、
バックグラウンドで全てのサービスを起動
docker compose up -d
バックグラウンドで全てのサービスを起動
docker compose up
全てのサービスをフォアグラウンドで起動し、ログを表示
docker compose build
Dockerfileに基づいてサービス用のDockerイメージをビルド
docker compose exec [コンテナ名] [コマンド]
既に実行中のコンテナ内で、新しいコマンドを実行する
docker compose run [コンテナ名] [コマンド]
一度限りのコマンドを実行
docker compose down
完全にコンテナを終了させる
docker compose stop
コンテナをサスペンドする

サンプル

.env
# docker-compose.yml内で利用する環境変数の設定
COMPOSE_PROJECT_NAME=project1           # プロジェクト名(全て小文字)
CONTAINER_NAME=Docker_Linux

Dockerfile_DIR=.
Dockerfile=Dockerfile

VOLUME=./linux_data

TIME_ZONE=Asia/Tokyo
LANG=ja_JP.UTF8

NETWORK_NAME=ethd
IP_SUBNET_ADDR=192.168.10.0
IP_PREFIX=24
IP_GATEWAY_ADDR=192.168.10.1

USER_NAME=PEN
PASSWORD=password

ENTRY_DIR=Programs
ENTRY_POINT=start.sh

WS=WS

docker-compose.yml
# YAMLはスペース2つ
# name: project1                            # プロジェクト名(全て小文字)
services:                                   # 作成したいコンテナを列挙
  linux:                                    # 作成するコンテナの名前(docker composeで管理する名前)
    env_file: .env
    
    container_name: ${CONTAINER_NAME}       # 外部から見た時の名前
    
    # IPアドレスの確認 
    # docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" [${CONTAINER_NAME}の値]

    hostname: ${CONTAINER_NAME}             # ホスト名

    build: 
      context: ${Dockerfile_DIR}
      dockerfile: ${Dockerfile}             # Dockerfileへの相対パス
      args:                                 # Dockerfile内の環境変数を設定
        WS:           ${WS}
        USER_NAME:    ${USER_NAME}
        PASSWORD:     ${PASSWORD}
        ENTRY_DIR:    ${ENTRY_DIR}
        ENTRY_POINT:  ${ENTRY_POINT}
        LANG:         ${LANG}
    
    # image: ubuntu:25.10                   # Dockerfileが無い場合

    volumes:                                # マウント
      - ${VOLUME}:/home/${USER_NAME}/${WS}  # ホストディレクトリ: コンテナ内ディレクトリ

    restart: no                             # unless-stopped always ...

    environment:                            # コンテナ内の環境変数を設定
      - TZ=${TIME_ZONE}
      - LANG=${LANG}
    
    ports:                                  # ポートを接続
      - "3000:3000"                         # ホストマシンのポート番号:コンテナのポート番号
    
    # depends_on:                           # コンテナ間の依存関係を定義
    #   - db                                # 先にdbコンテナが動いていることを確認する

    command:                                # サービスコンテナが起動したときに実行するコマンド
      - /home/${USER_NAME}/${ENTRY_DIR}/${ENTRY_POINT}
    
    networks:
      - docker_eth

networks:
  default:
    external: true
    name: bridge

  docker_eth:
    name: ${NETWORK_NAME}
    driver: bridge
    ipam:
      driver: default
      config:                               # 物理ネットワークに直接接続したい場合は実環境に合わせる
        - subnet: ${IP_SUBNET_ADDR}/${IP_PREFIX}
          gateway: ${IP_GATEWAY_ADDR}

Dockerfile
# FROM [イメージ] [タグ]
# Docker Hub (https://hub.docker.com/) 参照
FROM ubuntu:25.10

# 環境変数を docker-compose.yml から受け取る
ARG WS
ARG USER_NAME
ARG PASSWORD
ARG ENTRY_DIR
ARG ENTRY_POINT
ARG LANG

# 環境変数を設定
# 1000以上推奨
ENV USER_ID=1001
ENV GROUP_ID=1001

# RUN 命令はなるべく1つにまとめる
# コマンドが長くなる場合は \ で改行すること
RUN apt update && \
    apt upgrade -y && \
    apt install -y \
    sudo nano iproute2 iputils-ping language-pack-ja && \
    useradd -m -s /bin/bash -u ${USER_ID} ${USER_NAME} && \
    usermod -aG sudo ${USER_NAME} && \
    echo "root:${PASSWORD}" | chpasswd && \
    echo "${USER_NAME}:${PASSWORD}" | chpasswd && \
    mkdir -p /home/${USER_NAME}/${ENTRY_DIR} && \
    update-locale LANG=${LANG}

COPY ${ENTRY_POINT} /home/${USER_NAME}/${ENTRY_DIR}/${ENTRY_POINT}
RUN chmod +x /home/${USER_NAME}/${ENTRY_DIR}/${ENTRY_POINT}

USER ${USER_NAME}
WORKDIR /home/${USER_NAME}/${WS}

# 起動したら実行するコマンド
# 環境変数は使えないので注意
# ENTRYPOINT ["/Programs/start.sh"] 

# 起動したら実行するコマンド
# CMD ["/bin/bash", "-c", "while true; do sleep 1000; done"]
# 無限ループでbashを起動し続ける

start.sh
#!/usr/bin/env bash
while true; do
    sleep 1000 
done