This commit is contained in:
2025-07-05 13:48:50 +09:00
parent 00c9af330b
commit 9758126225
26 changed files with 3134 additions and 0 deletions

26
docker/Dockerfile Normal file
View File

@ -0,0 +1,26 @@
FROM ubuntu:22.04
# 基本的なツールをインストール
RUN apt-get update && apt-get install -y \
curl \
git \
python3 \
nodejs \
npm \
sudo \
&& rm -rf /var/lib/apt/lists/*
# 非rootユーザーを作成
RUN useradd -m -s /bin/bash claude-user && \
echo 'claude-user ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
# 作業ディレクトリを設定
WORKDIR /workspace
# ユーザーを切り替え
USER claude-user
# Claude Codeをインストール実際のインストールコマンドに置き換え
# RUN curl -fsSL https://... | sh
CMD ["/bin/bash"]

View File

@ -0,0 +1,30 @@
# Git
.git
.gitignore
# Documentation
*.md
docs/
# Temporary files
*.tmp
*.temp
*.log
# Cache
.cache/
__pycache__/
*.pyc
# IDE
.vscode/
.idea/
# Node.js
node_modules/
npm-debug.log*
# Build artifacts
build/
dist/
target/

View File

@ -0,0 +1,56 @@
FROM archlinux:latest
# ミラーリストを更新して高速化
RUN pacman -Sy --noconfirm reflector && \
reflector --country Japan --latest 5 --sort rate --save /etc/pacman.d/mirrorlist
# システム更新と基本パッケージのインストール
RUN pacman -Syu --noconfirm && \
pacman -S --noconfirm \
base-devel \
git \
vim \
neovim \
nodejs \
npm \
python \
python-pip \
go \
rust \
docker \
wget \
curl \
jq \
ripgrep \
fd \
bat \
exa \
zsh \
openssh \
sudo \
&& pacman -Scc --noconfirm
# 非rootユーザーを作成wheel グループに追加)
RUN useradd -m -G wheel -s /bin/zsh claude && \
echo 'claude ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
# AURヘルパー (yay) をインストール
USER claude
WORKDIR /home/claude
RUN git clone https://aur.archlinux.org/yay.git && \
cd yay && \
makepkg -si --noconfirm && \
cd .. && \
rm -rf yay
# 作業ディレクトリの設定
WORKDIR /workspace
# 必要に応じてClaude Codeをインストール
# RUN curl -fsSL https://... | sh
# デフォルトシェルをzshに
SHELL ["/bin/zsh", "-c"]
# コンテナ起動時のコマンド
CMD ["/bin/zsh"]

115
docker/archlinux/README.md Normal file
View File

@ -0,0 +1,115 @@
# Claude Code Arch Linux Docker環境
安全なClaude Code実行環境をArch LinuxベースのDockerコンテナで提供します。
## クイックスタート
```bash
# イメージのビルド
./run.sh build
# コンテナの起動
./run.sh start
# シェルに接続
./run.sh shell
```
## 機能
- **最新のArch Linux**ベース
- **非rootユーザー** (claude) での実行
- **開発ツール**プリインストール
- Node.js, Python, Go, Rust
- Git, Neovim, ripgrep, fd
- yay (AURヘルパー)
- **リソース制限**設定済み
- **ボリューム永続化**
- pacmanキャッシュ
- yayキャッシュ
## セキュリティ機能
- 非特権コンテナ
- リソース制限 (CPU: 2コア, メモリ: 4GB上限)
- ネットワーク分離
- 読み取り専用オプション対応
## 使い方
### 基本コマンド
```bash
# ビルド
./run.sh build
# 起動
./run.sh start
# 接続
./run.sh shell
# 停止
./run.sh stop
# 完全削除
./run.sh clean
```
### Docker Compose直接使用
```bash
# バックグラウンドで起動
docker-compose up -d
# ログ確認
docker-compose logs -f
# コンテナに入る
docker-compose exec -u claude claude-arch /bin/zsh
# 停止
docker-compose down
```
## カスタマイズ
### より厳格なセキュリティ
`docker-compose.yml`で以下のコメントを解除:
```yaml
read_only: true
tmpfs:
- /tmp
- /run
- /home/claude/.cache
```
### Docker in Docker
Dockerソケットのマウントを有効化
```yaml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
```
## トラブルシューティング
### pacmanエラー
```bash
# コンテナ内で実行
sudo pacman -Sy archlinux-keyring
sudo pacman-key --refresh-keys
```
### 権限エラー
ホストのファイルの所有者を確認:
```bash
# UID/GIDの確認
docker-compose exec claude-arch id
```

View File

@ -0,0 +1,104 @@
version: '3.8'
services:
claude-arch:
build:
context: .
dockerfile: Dockerfile
image: claude-archlinux:latest
container_name: claude-arch-sandbox
hostname: claude-arch
# ボリュームマウント
volumes:
# プロジェクトディレクトリをマウント
- ../../:/workspace:rw
# ホームディレクトリの設定ファイルを共有(オプション)
- ~/.config/nvim:/home/claude/.config/nvim:ro
- ~/.zshrc:/home/claude/.zshrc:ro
# DockerソケットDocker in Dockerを使う場合
# - /var/run/docker.sock:/var/run/docker.sock
# pacmanキャッシュを永続化ダウンロード時間短縮
- pacman-cache:/var/cache/pacman/pkg
# yayキャッシュを永続化
- yay-cache:/home/claude/.cache/yay
# 環境変数
environment:
- LANG=ja_JP.UTF-8
- TZ=Asia/Tokyo
- TERM=xterm-256color
# Claude Code用の環境変数
- CLAUDE_SAFE_MODE=true
- CLAUDE_CONTAINER=true
# リソース制限
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '1'
memory: 2G
# セキュリティオプション
security_opt:
- no-new-privileges:true
# AppArmorプロファイル利用可能な場合
# - apparmor:docker-default
# ネットワーク設定
networks:
- claude-net
# 対話型シェルの有効化
stdin_open: true
tty: true
# 読み取り専用ルートファイルシステム(より安全だが制限的)
# read_only: true
# tmpfs:
# - /tmp
# - /run
# - /home/claude/.cache
# ユーザー指定
user: claude
# ヘルスチェック
healthcheck:
test: ["CMD", "echo", "healthy"]
interval: 30s
timeout: 3s
retries: 3
# 開発用データベース(必要に応じて)
# postgres:
# image: postgres:15-alpine
# container_name: claude-postgres
# environment:
# POSTGRES_DB: dev
# POSTGRES_USER: claude
# POSTGRES_PASSWORD: claude-dev-pass
# volumes:
# - postgres-data:/var/lib/postgresql/data
# networks:
# - claude-net
# ボリューム定義
volumes:
pacman-cache:
driver: local
yay-cache:
driver: local
# postgres-data:
# driver: local
# ネットワーク定義
networks:
claude-net:
driver: bridge
ipam:
config:
- subnet: 172.25.0.0/24

94
docker/archlinux/run.sh Executable file
View File

@ -0,0 +1,94 @@
#!/bin/bash
# Claude Code Arch Linux Docker環境の起動スクリプト
set -e
# カラー出力の定義
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# 使用方法の表示
usage() {
echo "使用方法: $0 [オプション]"
echo "オプション:"
echo " build - Dockerイメージをビルド"
echo " start - コンテナを起動"
echo " stop - コンテナを停止"
echo " shell - コンテナ内でシェルを起動"
echo " clean - コンテナとボリュームを削除"
echo " logs - コンテナのログを表示"
exit 1
}
# Dockerイメージのビルド
build() {
echo -e "${GREEN}Arch Linux Dockerイメージをビルドしています...${NC}"
docker-compose build --no-cache
echo -e "${GREEN}ビルド完了!${NC}"
}
# コンテナの起動
start() {
echo -e "${GREEN}コンテナを起動しています...${NC}"
docker-compose up -d
echo -e "${GREEN}起動完了!${NC}"
echo -e "${YELLOW}シェルに接続するには: $0 shell${NC}"
}
# コンテナの停止
stop() {
echo -e "${YELLOW}コンテナを停止しています...${NC}"
docker-compose down
echo -e "${GREEN}停止完了!${NC}"
}
# シェルへの接続
shell() {
echo -e "${GREEN}Arch Linuxコンテナに接続しています...${NC}"
docker-compose exec -u claude claude-arch /bin/zsh
}
# クリーンアップ
clean() {
echo -e "${RED}警告: この操作はコンテナとボリュームを削除します!${NC}"
read -p "続行しますか? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
docker-compose down -v
echo -e "${GREEN}クリーンアップ完了!${NC}"
else
echo -e "${YELLOW}キャンセルしました${NC}"
fi
}
# ログの表示
logs() {
docker-compose logs -f claude-arch
}
# メイン処理
case "$1" in
build)
build
;;
start)
start
;;
stop)
stop
;;
shell)
shell
;;
clean)
clean
;;
logs)
logs
;;
*)
usage
;;
esac