Docker를 이용한 CentOS 배포 가이드

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 배포가 유용할 수 있습니다:

  1. 기존 시스템 마이그레이션 과도기 동안
  2. 역사 프로젝트 환경 복제 및 검증
  3. 민감 데이터가 없는 임시 개발 환경 구축
  4. 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

태그: CentOS docker RockyLinux AlmaLinux OracleLinux

9월 20일 11:18에 게시됨