Docker - Alternatives to Docker

INHEES·2025년 1월 15일

금일은 Docker의 runtime, registry를 대체할 수 있는 기술에 대해 알아보겠습니다.

목차

  • Docker runtime
  • Podman
  • Docker Registry

Docker Runtime (CRI-O)

Container Runtime은 컨테이너의 생명주기를 관리하고 실행하는 소프트웨어를 의미합니다

간단히 말해, Container Runtime은 컨테이너를 실제로 실행시키고 관리하는 핵심 소프트웨어라고 이해할 수 있습니다.

Docker 의 한계점으로는 다음과 같습니다.

  • Docker Server 에 너무 많은 기능이 집중 (SPOF)
  • Docker 명령어는 root 권한이 필요

CROI - O 특징

  • Contrainer Runtime Interfae - Open container Initiative
  • Contrainer 간 이식성 표준화를 위해 OCI 구성
  • Kubernetes 1.24 버전 부터 docker runtime 제거
    • Container Runtime 구성을 위해 CRI 사용
  • Container Runtime 만 가능
    • 이미지 빌드, CLI, Registry 기능은 없습니다.
  • Container 를 fork/exec. 방식으로 구동
  • Podman(Conatiner 실행), Buildah(이미지 생성), Skopeo (이미지 저장소 관리)

Podman

Docker cli와 같은 Tool 입니다. 서버의 구동 없이(daemon 구동없이) 컨테이너를 실행할 수 있습니다.

  • Container 생성, 유지 및 관리 도구
  • Container 를 fork/exec. 방식으로 구동
    • daemon-less
  • root 권한이 필요 없습니다.


Podman (windows) 실습

windows 10 환경에서 실습을 진행해 보겠습니다.

아래의 github docs 를 통해 설치 가이드를 따라 가면 됩니다.

글을 쓰는 기준 최신 버전인 5.3.1 버전을 설치해 보겠습니다.
(https://github.com/containers/podman/blob/main/docs/tutorials/podman-for-windows.md)

powershell 을 이용하였고 podman info 명령어를 통해 설치 확인을 가능합니다.

그런다음 가이드에 나와있는 순서대로 커맨드를 입력해주면 됩니다. 자세한 설명은 위의 docs 를 참고해 주세요

PS C:\Users\User> podman machine init
PS C:\Users\User> podman machine start
PS C:\Users\whdls> podman run --rm -d -p 8080:80 --name httpd docker.io/library/httpd
PS C:\Users\whdls>Invoke-WebRequest -Uri http://localhost:8080
PS C:\Users\whdls> podman ps -a
PS C:\Users\whdls> podman stop httpd

PS C:\Users\whdls> podman run --rm -it centos


PS C:\Users\whdls> podman machine list
PS C:\Users\whdls> podman machine stop
PS C:\Users\whdls> podman machine rm

podman 에서도 docker 의 image 를 그대로 사용가능합니다.

이밖에도 다양한 명령어는 podman --help 명령어를 통해 가능하며 docker 명령어와 거의 유사하다는 것을 알 수 있습니다.

podman machine list 명령어는 해당 hostpc 의 podman machine 이 차지하고 있는 리소스를 알려줍니다.


Harbor

harbor 는 Docker registry 를 대신하는 기술입니다. 해당 실습은 다음 포스팅에 별도로 작성하겠습니다.

Harbor Installation and Configuration

harbor 가 요구하는 docker engine 은 20.10.10 버전 이상이며 docker compose 는 필수입니다.

harbor 는 인증 시스템을 사용해야 합니다. 즉 https 를 사용해야 하며 harbor 가 상요하는 인증서 설치 과정을 설명하겠습니다.

linux 환경에서 진행해보겠습니다.

  1. CA Certificates 생성

    • Root CA 비밀키 생성 -> 공개키 생성
    openssl genrsa -out ca.key 4096
    oepnssl req -x509 -new -nodes -ssha512 -dats 365 -key ca.key -out ca.crt
  2. Server Certificates 생성

    • 서버의 인증서를 위핸 비밀키 생성 -> CSR 파일 생성
    • 인증기관에 비밀키를 가지고 공개키를 만들어달라고 요청을 하기 위해 CSR 파일이 필요합니다.
    openssl genrsa -out server.key 4096
    oepnssl req -new -sha512 -key server.key -out server.csr
  3. SAN(Subject Alternative Name) 등록

    • CSR을 이용하여 SAN에 도메인 정보 추가 서버의 인증키 생성
    • 부가적인 x509 기능들을 텍스트 파일로 v3ext.cnf 파일로 생성해야 합니다. 해당 내용에는 harbor 를 설치하게 될 host pc ip address 적어야 합니다.
    vi v3ext.cnf
    openssl x509 -req -sha512 -days 365 \
    -extfile v3ext.cnf \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in server.csr \
    -out server.crt
  4. Docker Engine Certificate 업데이트

    • Docker Engine에서 사용 될 cert 파일 생성
    openssl x509 -inform PEM -in server.crt -out server.cert
    

    docker 에서는 crt 자체를 인증기관서라고 간주하기 때문에 cert 로 변경해주어야합니다.

    • Docker Engine에 인증서 파일 등록
    $ mkdir -p /etc/docker/certs.d/server
    $ cp server.cert /etc/docker/certs.d/server/
    $ cp server.key /etc/docker/certs.d/server/
    $ cp ca.crt /etc/docker/certs.d/server/

harbor 설치

harbor install

  1. harbor package 다운로드
  2. harbor.yml 파일 생성
    • hostname 과 인증 공개 및 비밀키를 등록
  3. deploy
    ./prepare
    ./install.sh (docker compose up 명령어가 포함 되어 있음)
    • ip address 가 바뀐다면 위의 명령어를 재실행 해주어야 합니다.

다음시간에 진행하 harbor 실습에 대해 간단히 설명해보겠습니다.

1) Project 생성

2) Container#1] docker login –u admin

3) Container#1] docker push <_Image>

4) Container#2] docker login –u user1

5) Container#2] docker pull <_IMAGE>

admin 은 user 가 이미지를 가져오기 위해서 harbor 에서 members 설정에서 user 를 선택해주어야 합니다.


참고자료

inflearn

profile
이유를 찾아보자

0개의 댓글