7장. UBI 컨테이너에 소프트웨어 추가
Red Hat UBI(Universal Base Images)는 RHEL 콘텐츠 서브 세트에서 빌드됩니다. UBI는 또한 UBI와 함께 사용하도록 자유롭게 설치할 수 있는 RHEL 패키지의 하위 집합을 제공합니다. 실행 중인 컨테이너에 소프트웨어를 추가하거나 업데이트하려면 RPM 패키지 및 업데이트를 포함하는 yum 리포지토리를 사용할 수 있습니다. UBI는 Python, Perl, Node.js, Ruby 등과 같은 사전 빌드된 언어 런타임 컨테이너 이미지 세트를 제공합니다.
UBI 리포지토리에서 실행 중인 UBI 컨테이너에 패키지를 추가하려면 다음을 수행합니다.
-
UBI init 및 UBI 표준 이미지에서
yum
명령을 사용합니다. -
UBI 최소 이미지에서
microdnf
명령을 사용하십시오.
실행 중인 컨테이너에서 직접 소프트웨어 패키지를 설치하고 작업하면 패키지가 일시적으로 추가됩니다. 변경 사항은 컨테이너 이미지에 저장되지 않습니다. 패키지를 영구적으로 변경하려면 Buildah를 사용하여 컨테이너 파일에서 이미지 빌드 섹션을 참조하십시오.
UBI 컨테이너에 소프트웨어를 추가하면 서브스크립션된 RHEL 호스트 또는 서브스크립션 취소(또는 RHEL이 아닌) 시스템에서 UBI를 업데이트하는 절차가 다릅니다.
7.1. UBI init 이미지 사용
컨테이너가 호스트 시스템에서 실행될 때 systemd
서비스(/sbin/init
)에 의해 자동으로 시작되도록 웹 서버(httpd
)를 설치하고 구성하는 Containerfile
을 사용하여 컨테이너를 빌드할 수 있습니다. podman build
명령은 하나 이상의 Containerfiles
및 지정된 빌드 컨텍스트 디렉터리에 있는 명령을 사용하여 이미지를 빌드합니다. 컨텍스트 디렉터리는 아카이브, Git 리포지토리 또는 Containerfile
의 URL로 지정할 수 있습니다. 컨텍스트 디렉터리가 지정되지 않은 경우 현재 작업 디렉터리는 빌드 컨텍스트로 간주되며 Containerfile
을 포함해야 합니다. --file
옵션을 사용하여 Containerfile
파일을 지정할 수도 있습니다.
사전 요구 사항
-
container-tools
모듈이 설치되어 있습니다.
절차
새 디렉터리에 다음 콘텐츠를 사용하여
Containerfile
을 생성합니다.FROM registry.access.redhat.com/ubi8/ubi-init RUN yum -y install httpd; yum clean all; systemctl enable httpd; RUN echo "Successful Web Server Test" > /var/www/html/index.html RUN mkdir /etc/systemd/system/httpd.service.d/; echo -e '[Service]\nRestart=always' > /etc/systemd/system/httpd.service.d/httpd.conf EXPOSE 80 CMD [ "/sbin/init" ]
Containerfile
은httpd
패키지를 설치하고, 부팅 시httpd
서비스가 시작되고, 테스트 파일(index.html
)을 생성하고, 웹 서버를 호스트(포트 80)에 노출하며, 컨테이너가 시작될 때systemd
init 서비스(/sbin/init
)를 시작합니다.컨테이너를 빌드합니다.
# podman build --format=docker -t mysysd .
선택 사항: 시스템에서
systemd
를 사용하여 컨테이너를 실행하고 SELinux가 활성화된 경우container_manage_cgroup
부울 변수를 설정해야 합니다.# setsebool -P container_manage_cgroup 1
이름이
mysysd_run
인 컨테이너를 실행합니다.# podman run -d --name=mysysd_run -p 80:80 mysysd
mysysd
이미지는mysysd_run
컨테이너에서 호스트 시스템의 포트 80으로 노출된 컨테이너의 포트 80을 데몬 프로세스로 실행합니다.참고rootless 모드에서는 호스트 포트 번호 >= 1024를 선택해야 합니다. 예를 들면 다음과 같습니다.
$ podman run -d --name=mysysd -p 8081:80 mysysd
포트 번호 < 1024를 사용하려면
net.ipv4.ip_unprivileged_port_start
변수를 수정해야 합니다.# sysctl net.ipv4.ip_unprivileged_port_start=80
컨테이너가 실행 중인지 확인합니다.
# podman ps a282b0c2ad3d localhost/mysysd:latest /sbin/init 15 seconds ago Up 14 seconds ago 0.0.0.0:80->80/tcp mysysd_run
웹 서버를 테스트합니다.
# curl localhost/index.html Successful Web Server Test
추가 리소스