프로젝트 소개

Baseimage-docker는 Ubuntu를 기반으로 하며 컨테이너 내부에서 사용하도록 조정된 Docker 베이스 이미지입니다. Docker Hub와 GHCR에 `phusion/baseimage`로 게시되며, 자체 이미지를 만들기 위한 시작점으로 사용됩니다. 이 프로젝트는 기본 Ubuntu가 컨테이너용으로 설계되지 않았다고 주장합니다. Upstart init은 실제 또는 가상화된 하드웨어를 가정하며, 많은 컨테이너 예외 상황은 잘못 처리되기 쉽습니다. Baseimage-docker는 필요하다고 판단한 수정 사항과 관리 도구를 함께 제공합니다. 포함된 내용: - 올바른 init 프로세스인 `/sbin/my_init`은 고아 자식 프로세스를 거두어 좀비 누적을 방지하고, SIGTERM을 자식에게 전달하여 SIGKILL로 종료되지 않고 깔끔하게 종료할 수 있게 합니다. - Upstart를 대체하는 runit은 서비스 감독과 충돌한 데몬의 자동 재시작에 사용됩니다. - syslog-ng는 로에서만 수신하고 메시지를 `docker logs`로 전달하며, logrotate도 포함합니다. - cron, 그리고 기본적으로 비활성화되어 있으며 키 인증만 허용하는 SSH 서버. - 다른 사용자로 명령을 실행할 때 올바른 `$HOME`을 제공하는 `setuser`, 그리고 캐시를 정리하는 apt 설치를 위한 `install_clean`. - Docker와의 APT 비호환성 수정. 사용법: `FROM phusion/baseimage:<VERSION>` 및 `CMD ["/sbin/my_init"]`를 설정합니다. 추가 데몬은 `/etc/service/<NAME>` 아래에 실행 가능한 `run` 스크립트를 만들어 추가합니다. runit이 이를 시작하고 종료 시 재시작합니다. 시작 스크립트는 `/etc/my_init.d`(사전순으로 실행) 또는 `/etc/rc.local`에 둘 수 있으며, 종료 코드 0으로 끝나야 합니다. `docker run --env` 또는 Dockerfile `ENV`를 통해 전달된 환경 변수는 `my_init`이 `/etc/container_environment`에서 가져온 뒤 셸 및 JSON 형식으로 프하여 모든 언어의 서비스와 스크립트가 원래 값을 읽을 수 있게 합니다. 값이 민감할 수 있으므로 이 디렉터리는 기본적으로 root 소유이며 `docker_env` 그룹으로 제한됩니다. 자식 종료 시간 제한은 `KILL_PROCESS_TIMEOUT` 및 `KILL_ALL_PROCESSES_TIMEOUT`으로 조정할 수 있습니다. README에 따르면 이 이미지는 약 8.3MB의 RAM을 사용하며, 프로젝트 자체 기준으로 Busybox나 Alpine보다 가볍습니다. 또한 하나의 컨테이너에서 여러 OS 프로세스를 실행하는 것이 Docker의 단일 논리 서비스 철학과 호환되며, 프로젝트가 어느 한 접근 방식을 강제하지 않는다고 설명합니다. Ubuntu 26.04 LTS는 GNU Coreutils 대신 Rust Coreutils를 제공하며, README는 이를 고려 사항으로 언급합니다.