概要
Docker (ドッカー)
- コンテナ仮想化技術を利用したオープンプラットフォーム
- アプリケーションの開発、デプロイ、実行を効率化出来る
メリット
- 仮想環境であるため、隔離されており、実機に影響を及ぼしにくい
- VMよりも軽量
- 起動や動作が速い
- 開発環境の共有や移行が容易
ファイル | 内容 |
---|---|
|
複数コンテナの一括定義・連携 |
|
|
コマンド | 説明 |
---|---|
|
Dockerfileに基づいてサービス用のDockerイメージを更新し、 バックグラウンドで全てのサービスを起動 |
|
バックグラウンドで全てのサービスを起動 |
|
全てのサービスをフォアグラウンドで起動し、ログを表示 |
|
Dockerfileに基づいてサービス用のDockerイメージをビルド |
|
既に実行中のコンテナ内で、新しいコマンドを実行する |
|
一度限りのコマンドを実行 |
|
完全にコンテナを終了させる |
|
コンテナをサスペンドする |
# 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
# 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}
# 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を起動し続ける
#!/usr/bin/env bash
while true; do
sleep 1000
done