概要
Docker (ドッカー)
- コンテナ仮想化技術を利用したオープンプラットフォーム
- アプリケーションの開発、デプロイ、実行を効率化出来る
メリット
- 仮想環境であるため、隔離されており、実機に影響を及ぼしにくい
- VMよりも軽量
- 起動や動作が速い
- 開発環境の共有や移行が容易
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce containerd.io docker-buildx-plugin docker-ce-cli docker-ce-rootless-extras docker-compose-plugin
sudo systemctl enable docker
sudo systemctl restart docker
sudo docker run hello-world # 確認
sudo usermod -aG docker $USER
newgrp docker
| ファイル | 内容 |
|---|---|
|
複数コンテナの一括定義・連携 |
|
|
| コマンド | 説明 |
|---|---|
|
Dockerfileに基づいてサービス用のDockerイメージを更新し、 バックグラウンドで全てのサービスを起動 |
|
バックグラウンドで全てのサービスを起動 |
|
全てのサービスをフォアグラウンドで起動し、ログを表示 |
|
Dockerfileに基づいてサービス用のDockerイメージをビルド |
|
既に実行中のコンテナ内で、新しいコマンドを実行する |
|
一度限りのコマンドを実行 |
|
完全にコンテナを終了させる |
|
コンテナをサスペンドする |
|
ログの確認 -n [行数] : 最後の[行数]表示 -f : 追従
|
|
最後の10行表示した後、ログを追従する |
|
ログを追従しながらリアルタイムで[検索する言葉]を含む行を表示する |
|
コンテナのIPアドレスを確認 |
|
不要になったイメージを削除 |
# 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
PORT=3000
USER_NAME=PEN
PASSWORD=password
ENTRY_DIR=Programs
ENTRY_POINT=start.sh
WS=WS
# ==========================================
# compose.yml
#
# | 項目 | 内容 | 備考 |
# | --- | --- | --- |
# | name | プロジェクト名 | 全て小文字 |
# | services | 作成したいサービスを列挙 | YAMLはスペース2つ |
# | linux / db | 作成するサービスの名前 | docker composeで管理する際に必要 |
#
# ==========================================
# name: project1
services:
linux:
# ==========================================
# linuxサービスの設定項目
#
# | 項目 | 内容 | 備考 |
# | --- | --- | --- |
# | container_name | コンテナ名 | 外部から見た時の名前 |
# | hostname | ホスト名 | - |
# | build | Dockerfileの設定 | - |
# | image | 使用するコンテナイメージ | Dockerfileが無い場合指定 |
# | volumes | マウントするフォルダ設定(データを永続化) | ホストディレクトリ: コンテナ内ディレクトリ |
# | restart | コンテナの起動設定 | no unless-stopped always ... |
# | environment | コンテナ内の環境変数を設定 | Python の `os.environ.get` 等でも取得可能 |
# | ports | 外部からアクセス可能なポートを設定 | ホストマシンのポート番号:コンテナのポート番号 |
# | depends_on | サービス間の依存関係を定義 | - |
# | command | サービスが起動したときに実行するコマンド | - |
#
# IPアドレスの確認 : docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" [${container_name}の値]
#
# ==========================================
env_file: .env
container_name: ${CONTAINER_NAME}
hostname: ${CONTAINER_NAME}
build:
# ==========================================
# Dockerfileの設定項目
#
# | 項目 | 内容 |
# | --- | --- |
# | context/dockerfile | Dockerfileへの相対パス |
# | args | Dockerfile内の環境変数を設定 |
#
# ==========================================
context: ${Dockerfile_DIR}
dockerfile: ${Dockerfile}
args:
WS: ${WS}
USER_NAME: ${USER_NAME}
PASSWORD: ${PASSWORD}
ENTRY_DIR: ${ENTRY_DIR}
ENTRY_POINT: ${ENTRY_POINT}
LANG: ${LANG}
# image: ubuntu:25.10
volumes:
- ${VOLUME}:/home/${USER_NAME}/${WS}
restart: no
environment:
- TZ=${TIME_ZONE}
- LANG=${LANG}
ports:
- "${PORT}:3000"
# depends_on:
# ==========================================
# サービス間 依存関係の設定項目
#
# | 項目 | 内容 | 備考 |
# | --- | --- | --- |
# | db | 依存サービス名 | dbサービス参照 |
#
# ==========================================
# - 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