Joo's
반응형

상황

  • 회사 내부망에서 Docker 이미지를 빌드해야 함
  • 보안 정책 상 HTTP(80번 포트) 접근이 차단
  • 기본 Ubuntu 미러(http://archive.ubuntu.com)는 HTTP를 사용 → 접근 불가

해결 방법

  • HTTPS(443번 포트) 미러 사용
  • Dockerfile에서 sources.list와 .sources 파일 모두 HTTPS 주소로 변경
  • 초기 빌드 시 CA 인증서가 없으면 SSL 검증 오류 발생 → 임시로 검증 OFF
  • 이후 CA 설치 후 SSL 검증 정상화

Docker로 Ubuntu 24.04 이미지를 빌드할 때, apt 패키지 서버 연결 문제로 빌드가 실패하는 경우가 있습니다.
특히 HTTPS 미러를 사용하려고 하면 SSL 인증서가 없어 apt-get update가 오류를 내는 상황이 자주 발생합니다.

이 글에서는 Dockerfile에서 apt repository를 안전하게 우회하고 필수 패키지를 설치하는 방법을 단계별로 소개합니다.


문제 상황

기본 Ubuntu 24.04 Docker 이미지는 http://archive.ubuntu.comhttp://security.ubuntu.com을 사용합니다.

  • HTTPS 미러로 전환 시 SSL 인증서가 없으면 apt-get update 실패
  • 필수 패키지 설치 후 캐시를 정리하지 않으면 이미지가 불필요하게 커짐
  • Deb822 스타일 .sources 파일도 있어 단순 sources.list 변경만으로는 충분하지 않음

해결 전략

Dockerfile에서 다음 순서로 처리하면 안정적입니다.

  1. HTTP → HTTPS 미러 전환
    • /etc/apt/sources.list 및 Deb822 .sources 파일 모두 수정
  2. 초기 SSL 검증 비활성화
    • CA 인증서가 없을 때 첫 apt-get update 실패 방지
  3. CA 인증서 설치 및 갱신
    • ca-certificates 설치 후 update-ca-certificates
  4. 필수 패키지 설치
    • SSH, Supervisor, sudo 등
  5. 캐시 정리
    • 이미지 용량 최적화

 

FROM ubuntu:24.04

RUN set -eux; \
    # 1️⃣ HTTPS 미러 전환
    for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.sources; do \
        [ -f "$f" ] && sed -i \
        's|http://archive.ubuntu.com|https://archive.ubuntu.com|g; s|http://security.ubuntu.com|https://security.ubuntu.com|g' "$f"; \
    done; \
    \
    # 2️⃣ 초기 SSL 검증 OFF로 apt 업데이트
    apt-get update -o Acquire::https::Verify-Peer=false -o Acquire::https::Verify-Host=false; \
    \
    # 3️⃣ CA 인증서 설치
    DEBIAN_FRONTEND=noninteractive apt-get install -y \
        -o Acquire::https::Verify-Peer=false \
        -o Acquire::https::Verify-Host=false \
        ca-certificates; \
    update-ca-certificates; \
    \
    # 4️⃣ 필수 패키지 설치
    apt-get update; \
    DEBIAN_FRONTEND=noninteractive apt-get install -y \
        openssh-server \
        supervisor \
        sudo; \
    \
    # 5️⃣ 캐시 정리
    apt-get clean; \
    rm -rf /var/lib/apt/lists/*

Tip

  • set -eux : 빌드 과정에서 에러가 나면 바로 확인 가능
  • Deb822 .sources 파일 처리 필수 : Ubuntu 24.04 이후부터 일부 소스가 이 방식으로 관리됨
  • DEBIAN_FRONTEND=noninteractive : Docker 빌드 시 설치 질문 없이 자동 진행
  • rm -rf /var/lib/apt/lists/* : 이미지 최적화

정리

  • Docker 빌드 초기 apt repository 우회와 CA 설치를 처리하면 패키지 설치 실패를 예방할 수 있습니다.
  • 한 RUN 명령에서 처리하면 Docker 레이어 최소화 및 이미지 최적화가 가능합니다.
  • Ubuntu 24.04에서 Deb822 소스까지 대응하면 안정적으로 최신 패키지 서버를 사용할 수 있습니다.
반응형
profile

Joo's

@JooJY

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!