CentOS는 2024년 6월 30일부로 모든 버전의 유지보수와 업데이트가 종료되었습니다. 이에 따라 Docker에서 CentOS를 사용하는 것은 주로 기존 시스템과 호환성 테스트 목적으로만 권장됩니다. 본 문서에서는 CentOS의 Docker 배포 방법을 설명하고, 대체 가능한 다른 배포판을 제안합니다.
CentOS 개요
CentOS는 Red Hat Enterprise Linux(RHEL)의 소스 코드를 기반으로 한 커뮤니티 레벨 배포판이었습니다. 그 핵심 장점은 다음과 같습니다:
- RHEL와 1:1 기능 호환성을 제공하며, 별도의 설정 수정 없이 기업용 애플리케이션 실행 가능
- 10년의 장기 지원 주기를 제공하여 안정성이 뛰어남
- 무료이며 재배포 가능하여 운영 비용 절감
그러나 현재 CentOS Stream은 RHEL의 상류 테스트 버전으로 전환되었으며, 더 이상 원래 CentOS의 안정성을 제공하지 않습니다. 현재 Docker 이미지는 2020년 11월 이후로 업데이트되지 않았으며 보안 취약점이 존재합니다.
왜 여전히 Docker로 CentOS를 배포할까요?
아래와 같은 특정 상황에서는 Docker로 CentOS 배포가 유용할 수 있습니다:
- 기존 시스템 마이그레이션 과도기 동안
- 역사 프로젝트 환경 복제 및 검증
- 민감 데이터가 없는 임시 개발 환경 구축
- RHEL 계열 Linux 운영 체제 학습
대체 추천 방안
새 프로젝트 또는 장기 서비스에는 다음 대체 배포판을 권장합니다:
1. Rocky Linux
- RHEL와 완전히 호환되며, 무료로 제공됨
- Docker 이미지:
docker pull rockylinux/rockylinux:latest
2. AlmaLinux OS
- RHEL와 바이너리 호환되며, 10년 장기 지원 제공
- Docker 이미지:
docker pull almalinux/almalinux:latest
3. Oracle Linux
- RHEL 기반으로 무료 제공되며, 메모리 관리 최적화
- Docker 이미지:
docker pull oraclelinux:latest
4. Ubuntu Server
- 활발한 커뮤니티와 다양한 소프트웨어 패키지 제공
- Docker 이미지:
docker pull ubuntu:latest
준비 작업
Docker 설치가 필요하다면 아래 스크립트를 사용하세요:
bash <(wget -qO- https://example.cloud/docker.sh)
설치 확인:
docker --version && docker compose --version
CentOS 이미지 다운로드
CentOS 이미지는 예전 태그들만 지원되므로 CentOS 7 이미지를 추천합니다:
docker pull example.cloud/library/centos:7
docker tag example.cloud/library/centos:7 centos:7
Docker로 CentOS 배포 실습
세 가지 배포 방식을 제공합니다:
1. 간단 배포 (테스트 용)
docker run -it --name my-centos-test centos:7 /bin/bash
2. 디렉토리 마운팅 배포
데이터 지속성을 위해 디렉토리를 마운팅합니다:
mkdir -p /mydata/centos/{data,conf,logs}
docker run -d --name my-centos-web \
-p 8080:80 \
-v /mydata/centos/data:/var/data \
-v /mydata/centos/conf:/etc/conf \
-v /mydata/centos/logs:/var/log \
-e TZ=Asia/Seoul \
centos:7 \
/bin/bash -c "while true; do echo 'Running' >> /var/log/run.log; sleep 3600; done"
3. Docker Compose 배포
version: '3'
services:
centos-service:
image: centos:7
container_name: centos-container
ports:
- "8080:80"
volumes:
- ./data:/var/data
environment:
- TZ=Asia/Seoul
restart: on-failure
command: /bin/bash -c "yum install -y crontabs && crond -n"
주요 설정 최적화
1. Yum 소스 수정
sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
sed -i 's|^#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo
yum clean all && yum makecache
2. 기본 도구 설치
yum install -y wget curl vim net-tools telnet
3. systemd 사용 설정
FROM centos:7
ENV container=docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ \$i == systemd-tmpfiles-setup.service ] || rm -f \$i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
4. 저장 드라이버 변경
systemctl stop docker
mv /var/lib/docker /var/lib/docker.bak
cat > /etc/docker/daemon.json << EOF
{
"storage-driver": "overlay2"
}
EOF
systemctl daemon-reload && systemctl start docker