Sign inSign up

mpdba/ubuntu-dev

By mpdba

•Updated 6 months ago

개발자가 즉시 사용할 수 있는 수준으로 구성한 개발 컨테이너입니다.

Image
Developer tools
0

1.9K

mpdba/ubuntu-dev repository overview

⁠ubuntu-dev

Ubuntu 24.04 기반 풀스택 개발환경 — 한글 완벽 지원 · AI 코딩 에이전트 내장 · Docker Scout A등급

ubuntu:24.04의 최소 이미지를 개발자가 즉시 사용할 수 있는 수준으로 구성한 올인원 개발 컨테이너입니다. 한글 로케일, 타임존, 개발 도구, 런타임, 웹 서버, AI 코딩 에이전트까지 설정이 완료되어 있어서 빌드 후 바로 개발을 시작할 수 있습니다.

🛡 Docker Scout Health Score A — Critical 0 · High 0 · 전체 정책 Compliant

🤖 AI 코딩 에이전트 — Claude Code · OpenAI Codex · Google Gemini CLI · CodeCompanion (Neovim 통합)


⁠주요 특징

카테고리포함 내용
🇰🇷 한글ko_KR.UTF-8 로케일, Nanum/Noto CJK 폰트, KST 타임존
🐚 셸Zsh + Oh My Zsh + autosuggestions + syntax-highlighting
☕ JavaOpenJDK 21
🟢 Node.jsv22 LTS (nvm), npm, pnpm, yarn
🐍 Python3.12 + pip + venv + pipx + httpie (PEP 668 대응)
🐹 Go1.25.8 (fzf · git-lfs 소스 빌드 겸용)
🌐 Nginxcharset utf-8 설정 완료, 한글 에러 페이지
🤖 AI 에이전트Claude Code, OpenAI Codex, Google Gemini CLI + Neovim CodeCompanion
✏️ NeovimTier 3 Full — Mason LSP 12개 + blink.cmp + conform + trouble + AI 4종
🔧 도구git, git-lfs, lazygit, vim, nano, curl, httpie, jq, ripgrep, fd, bat, fzf
🗄 DB 클라이언트mysql-client, redis-tools, postgresql-client
👤 사용자비-root dev 사용자 (UID 1000), sudo 지원
🛡 보안Docker Scout A등급 — 취약 패키지 교체 · Go 소스 빌드 · 의존성 패치 · linux-libc-dev 제거

⁠Quick Start

⁠Linux / macOS / WSL2
docker run -it --name dev-box \
  -p 80:80 \
  -v $(pwd)/workspace:/home/dev/workspace \
  -e ANTHROPIC_API_KEY=sk-ant-... \
  -e OPENAI_API_KEY=sk-... \
  -e GEMINI_API_KEY=... \
  mpdba/ubuntu-dev:latest
⁠Windows PowerShell
docker run -it --name dev-box `
  -p 80:80 `
  -v ${PWD}/workspace:/home/dev/workspace `
  -e ANTHROPIC_API_KEY=sk-ant-... `
  -e OPENAI_API_KEY=sk-... `
  -e GEMINI_API_KEY=... `
  mpdba/ubuntu-dev:latest
⁠컨테이너 내부에서 확인
echo "한글 테스트"    # → 정상 출력
java --version        # → openjdk 21.x.x
node --version        # → v22.x.x
python --version      # → Python 3.12.x
go version            # → go1.25.8 linux/amd64
nginx -v              # → nginx/1.24.x
fzf --version         # → 0.70.0
git lfs version       # → git-lfs/3.7.1
lazygit --version     # → 0.61.0
claude --version      # → Claude Code CLI
codex --version       # → OpenAI Codex CLI
gemini --version      # → Google Gemini CLI

⁠태그

태그설명
latest최신 안정 버전
v4.5현재 릴리스 — Neovim Tier 3 + AI 에이전트 + Docker Scout A등급
1.2.1보안 패치 완료 (Critical 0, High 0) — AI 에이전트 미포함

⁠AI 코딩 에이전트

⁠CLI 에이전트 (터미널에서 직접 사용)
에이전트명령설명
Claude CodeclaudeAnthropic의 터미널 AI 코딩 에이전트
OpenAI CodexcodexOpenAI의 터미널 AI 코딩 에이전트
Google GeminigeminiGoogle의 터미널 AI 에이전트
⁠Neovim AI 플러그인
플러그인단축키설명
claudecode.nvimSpace+acNeovim 안에서 Claude Code 토글
codex.nvimSpace+cxNeovim 안에서 Codex 토글
gemini.nvim—코드 완성 + 인라인 지시
CodeCompanionSpace+ai멀티 AI 통합 채팅 (Anthropic/OpenAI/Gemini 선택)
⁠API 키 설정
# 환경변수로 전달 (docker run -e)
export ANTHROPIC_API_KEY=sk-ant-...    # Claude Code + CodeCompanion
export OPENAI_API_KEY=sk-...           # Codex + CodeCompanion
export GEMINI_API_KEY=...              # Gemini CLI + CodeCompanion
⁠AI 외부 파일 변경 자동 감지

AI 에이전트가 외부에서 파일을 수정하면 Neovim이 자동으로 감지하여 버퍼를 갱신합니다. 별도 설정 불필요.


⁠보안 (Docker Scout)

Docker Scout 보안 스캔에서 최고 등급을 달성했습니다.

등급CriticalHighMediumLow
A00~693~42
⁠정책 준수 현황
정책상태
No high-profile vulnerabilities✅ Compliant
No fixable critical or high vulnerabilities✅ Compliant
No unapproved base images✅ Compliant
Supply chain attestations✅ Compliant
No outdated base images✅ Compliant
No AGPL v3 licenses✅ Compliant
Default non-root user✅ Compliant
⁠적용된 보안 패치
패치방법
Python 취약 패키지 교체pip --ignore-installed + dpkg status 정리
fzf 소스 빌드 (Go 1.25.8)apt 대신 go install로 최신 Go 빌드
git-lfs 소스 빌드 + x/crypto 강제 업그레이드소스 클론 → go get x/[email protected] → go build
lazygit 바이너리 설치소스 빌드 시 jsonparser CVE 노출 방지
picomatch 중첩 의존성 패치글로벌 4.0.4 설치 + pnpm 내부 번들 덮어쓰기
linux-libc-dev 제거빌드 후 dpkg -r — 불필요한 커널 헤더 CVE 제거

⁠Neovim Tier 3

Neovim stable이 tarball로 설치되어 있고, Tier 3 Full 설정이 적용되어 있습니다. LSP 서버와 플러그인은 이미지 빌드 시 사전 설치됩니다.

nvim              # 즉시 사용 가능
:Lazy update      # 플러그인 업데이트
:Mason            # LSP 서버 관리
⁠Tier 구조
Tier포함 내용
Tier 1테마 + Treesitter + Telescope + 기본 UI (gitsigns, autopairs, comment, which-key)
Tier 2Tier 1 + Mason LSP + blink.cmp 자동완성 + conform 포매터 + trouble 진단
Tier 3Tier 2 + AI 에이전트 4종 + LazyGit + Diffview
⁠사전 설치 LSP 서버 (Mason)
서버언어
jdtlsJava
ts_lsTypeScript / JavaScript
pyrightPython
goplsGo
lua_lsLua
html, cssls, jsonls, yamlls웹
dockerls, docker_compose_language_serviceDocker
bashlsBash
sqllsSQL
⁠자동완성 (blink.cmp)

LSP, 경로, 스니펫, 버퍼 4가지 소스에서 자동완성을 제공합니다. LuaSnip + friendly-snippets가 포함되어 있습니다.

⁠포매터 (conform.nvim)

저장 시 자동 포맷이 적용됩니다.

언어포매터
JavaScript / TypeScript / JSON / YAML / HTML / CSS / Markdownprettierd
Javagoogle-java-format
Pythonblack
Gogofmt
Luastylua
⁠Git 확장
도구사용법
LazyGitSpace+gg 또는 터미널에서 lazygit
Diffview:DiffviewOpen (diff 보기), :DiffviewFileHistory (파일 히스토리)
Gitsigns변경 라인 자동 표시
⁠전체 단축키 (Space = Leader)
키동작
Space+ff파일 검색
Space+fg텍스트 검색 (live grep)
Space+fb버퍼 목록
Space+fh도움말 검색
Space+e파일 트리 토글
Space+ggLazyGit 열기
Space+acClaude Code 토글
Space+cxCodex 토글
Space+aiCodeCompanion AI 채팅
Space+aaAI 액션 목록
Space+xx진단 목록
Space+xd버퍼 진단
Space+w저장
Space+q종료
Space+rnLSP 이름 변경
Space+ca코드 액션
Space+lf코드 포맷
gd정의로 이동
K호버 정보
C-spaceTreesitter 증분 선택

⁠포함 패키지 상세

⁠시스템 기반

ca-certificates, gnupg, sudo, locales, tzdata, zip/unzip, tar, gzip, bzip2, xz-utils, file, less, tree, procps, htop

⁠한글 / 폰트

fonts-nanum, fonts-nanum-coding, fonts-noto-cjk

⁠편집기

nano, neovim (stable tarball + Tier 3 init.lua + lazy.nvim + 20+ 플러그인)

⁠VCS / 빌드

git, git-lfs (Go 소스 빌드, x/crypto 패치), lazygit 0.61.0, build-essential, cmake, pkg-config

⁠모던 CLI

ripgrep (rg), fd-find (fdfind), bat (batcat), fzf (Go 소스 빌드), jq

⁠네트워크

curl, wget, httpie (pip), dnsutils, iputils-ping, net-tools, iproute2, traceroute, openssh-client, rsync

⁠DB 클라이언트

mysql-client, redis-tools, postgresql-client

⁠웹 서버

nginx (charset utf-8 사전 설정)

⁠AI 코딩 에이전트
에이전트패키지설치 방법
Claude Code@anthropic-ai/claude-codenpm global
OpenAI Codex@openai/codexnpm global
Google Gemini@google/gemini-clinpm global
⁠런타임
런타임버전비고
JavaOpenJDK 21JAVA_HOME 설정됨
Go1.25.8GOROOT=/usr/local/go, GOPATH=$HOME/go
Node.js22 LTSnvm으로 관리, ENV PATH에 등록
npm10.xNode.js와 함께 설치
pnpmlatest글로벌 설치
yarn1.x글로벌 설치
Python3.12시스템 패키지, PEP 668 적용
pip24.xvenv 안에서 사용 권장
pipx1.xCLI 도구 격리 설치용
⁠셸 환경
항목상세
기본 셸Zsh
프레임워크Oh My Zsh
플러그인git, zsh-autosuggestions, zsh-syntax-highlighting, docker, docker-compose
Alias40+ 개발 편의 alias (git, docker, nginx, 모던 CLI 등)

⁠환경변수

변수기본값설명
LANGko_KR.UTF-8시스템 로케일
LC_ALLko_KR.UTF-8로케일 강제
TZAsia/Seoul타임존 (KST)
JAVA_HOME/usr/lib/jvm/java-21-openjdk-amd64Java 홈
GOROOT/usr/local/goGo 설치 경로
GOPATH/home/dev/goGo 모듈/바이너리 경로
NVM_DIR/home/dev/.nvmnvm 설치 경로
ANTHROPIC_API_KEY(사용자 설정)Claude Code + CodeCompanion
OPENAI_API_KEY(사용자 설정)Codex + CodeCompanion
GEMINI_API_KEY(사용자 설정)Gemini CLI + CodeCompanion

⁠빌드 인자 (ARG)

인자기본값설명
USERNAMEdev컨테이너 사용자명
USER_UID1000사용자 UID
USER_GID1000사용자 GID
NODE_VERSION22Node.js 메이저 버전
GO_VERSION1.25.8Go 버전
GIT_LFS_VERSION3.7.1git-lfs 버전
FZF_VERSION0.70.0fzf 버전
LAZYGIT_VERSION0.61.0lazygit 버전
# 보안 스캔 포함 빌드
docker buildx build --provenance=true --sbom=true \
  -t ubuntu-dev:latest .

# Linux: 호스트 UID/GID와 맞추기
docker build \
  --build-arg USER_UID=$(id -u) \
  --build-arg USER_GID=$(id -g) \
  -t ubuntu-dev:latest .

⁠포트

포트서비스비고
80Nginxcharset utf-8 설정 완료
8080Spring Boot리버스 프록시 템플릿 포함 (주석)
3000Node.js리버스 프록시 템플릿 포함 (주석)

⁠볼륨

컨테이너 경로용도
/home/dev/workspace개발 프로젝트 디렉토리 (Nginx 루트)
/home/dev/.gitconfigGit 설정 공유 (읽기 전용 권장)
/etc/nginx/sites-available/defaultNginx 설정 오버라이드 (선택)

⁠Docker Compose

services:
  dev:
    image: mpdba/ubuntu-dev:latest
    container_name: ubuntu-dev
    stdin_open: true
    tty: true
    ports:
      - "80:80"
      - "8080:8080"
      - "3000:3000"
    volumes:
      - ./workspace:/home/dev/workspace
      - ~/.gitconfig:/home/dev/.gitconfig:ro
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - GEMINI_API_KEY=${GEMINI_API_KEY}
    networks:
      - dev-net

  mysql:
    image: mysql:8.0
    container_name: dev-mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: devdb
      MYSQL_USER: dev
      MYSQL_PASSWORD: devpass
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - dev-net

  redis:
    image: redis:7-alpine
    container_name: dev-redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    networks:
      - dev-net

volumes:
  mysql-data:
  redis-data:

networks:
  dev-net:
    driver: bridge

⁠Nginx 사용법

컨테이너 내에서 Nginx를 시작하면 /home/dev/workspace의 파일을 즉시 서빙한다. charset utf-8이 사전 설정되어 한글 HTML, JSON 응답이 깨지지 않는다.

ngstart     # sudo nginx
ngstop      # sudo nginx -s stop
ngreload    # sudo nginx -s reload
ngtest      # sudo nginx -t

⁠Go 개발

Go 1.25.8이 /usr/local/go에 설치되어 있으며, GOPATH=$HOME/go가 설정되어 있다.

go version          # → go1.25.8 linux/amd64
go run main.go      # 즉시 실행
go install ...      # ~/go/bin에 설치 (PATH에 포함)

⁠Python PEP 668 참고

# 가상환경 사용 (권장)
python3 -m venv .venv && source .venv/bin/activate
pip install flask

# CLI 도구 설치 (pipx)
pipx install black && pipx install poetry

# httpie는 이미 설치됨
http GET https://httpbin.org/get

⁠사전 설정된 Alias

⁠시스템
Alias명령
llls -alFh --color=auto
..cd ..
...cd ../..
clsclear
⁠Git
Alias명령
gsgit status
glgit log --oneline --graph --decorate -15
gdgit diff
gagit add
gcgit commit
gpgit push
⁠Docker
Alias명령
dpsdocker ps --format "table ..."
dlogdocker logs -f
dexecdocker exec -it
⁠Nginx
Alias명령
ngstartsudo nginx
ngstopsudo nginx -s stop
ngreloadsudo nginx -s reload
ngtestsudo nginx -t
nglogtail -f /var/log/nginx/access.log
ngerrtail -f /var/log/nginx/error.log
⁠모던 CLI
Alias대상
fdfdfind
batbatcat
⁠개발
Alias명령
portsss -tulnp
myipcurl -s ifconfig.me
pathecho $PATH | tr ":" "\n"
nowdate +"%Y-%m-%d %H:%M:%S %Z"

⁠디렉토리 구조

/home/dev/                    ← 사용자 홈
├── .oh-my-zsh/               ← Oh My Zsh + 플러그인
├── .zshrc                    ← Zsh 설정 (alias, fzf, nvm, Go)
├── .vimrc                    ← Vim 설정 (UTF-8, 줄번호)
├── .config/nvim/
│   └── init.lua              ← Neovim Tier 3 설정 (20+ 플러그인)
├── .local/share/nvim/
│   ├── lazy/                 ← lazy.nvim 플러그인 저장소
│   └── mason/                ← Mason LSP 서버 (12개 사전 설치)
├── .nvm/                     ← nvm + Node.js + AI CLI 에이전트
├── go/                       ← GOPATH
├── .gitconfig                ← Git 설정
└── workspace/                ← 개발 프로젝트 (= Nginx 루트)

/usr/local/go/                ← Go 1.25.8 (GOROOT)
/usr/local/bin/
├── fzf                       ← Go 1.25.8 소스 빌드
├── git-lfs                   ← Go 1.25.8 소스 빌드 (x/crypto 패치)
├── lazygit                   ← 바이너리 릴리스 (0.61.0)
└── nvim                      ← Neovim stable symlink

/opt/nvim/                    ← Neovim 바이너리 (tarball)
└── bin/nvim

⁠플랫폼별 참고

항목Linux / macOS / WSL2Windows PowerShell
줄 이음 문자\` (백틱)
현재 경로$(pwd)${PWD}
홈 디렉토리~$env:USERPROFILE
UID/GID 전달--build-arg USER_UID=$(id -u)불필요 (Docker Desktop 자동 처리)

⁠라이선스

MIT License

Tag summary

Content type

Image

Digest

sha256:9cc69f089…

Size

1.2 GB

Last updated

6 months ago

docker pull mpdba/ubuntu-dev:1.5.0