과거에 개발자가 직면한 과제 중 하나는 애플리케이션이 여러 컴퓨팅 환경에서 안정적으로 실행되도록 하는 것입니다. 종종 응용 프로그램이 예상대로 실행되지 않거나 오류가 발생하여 완전히 실패했습니다. 그리고 그 개념이 containers 태어났다.

컨테이너 이미지란 무엇입니까?

Container 이미지는 격리된 환경에서 실행되는 실행 코드와 함께 제공되는 정적 파일입니다. 컨테이너 이미지는 애플리케이션이 다양한 환경에서 실행하는 데 필요한 시스템 라이브러리, 종속성 및 기타 플랫폼 설정으로 구성됩니다.

Red Hat Linux 필요한 docker 명령을 사용하여 Linux 컨테이너와 직접 작업하는 데 활용할 수 있는 유용한 컨테이너 도구 세트를 제공합니다. 여기에는 다음이 포함됩니다.

  • Podman – 실행 및 관리를 위한 데몬이 없는 컨테이너 엔진입니다. OCI 루트 또는 루트 없는 모드의 컨테이너. Podman 비슷하다 Docker 다음을 제외하고 동일한 명령 옵션이 있습니다. Docker 데몬입니다. 다음을 사용하여 컨테이너 이미지를 가져오고, 실행하고, 관리할 수 있습니다. podman 당신이 하는 것과 거의 같은 방식으로 Docker. Podman 많은 고급 기능이 제공되며 다음과 완전히 통합됩니다. systems, 루트 사용자 없이 컨테이너 실행을 포함하는 사용자 네임스페이스 지원을 제공합니다.
  • Skopeo: 이것은 한 레지스트리에서 다른 레지스트리로 컨테이너 이미지를 복사하는 데 사용되는 명령줄 도구입니다. 당신이 사용할 수있는 Skopeo 특정 호스트에서 이미지를 복사하고 다른 컨테이너 레지스트리 또는 환경으로 이미지를 복사합니다. 이미지 복사 외에도 이를 사용하여 다양한 레지스트리의 이미지를 검사하고 서명을 사용하여 이미지를 만들고 확인할 수 있습니다.
  • Buildah: 컨테이너 생성 및 관리에 사용되는 명령줄 도구 모음입니다. OCI 사용하는 이미지 Docker에스.

이 기사에서는 다음을 사용하여 컨테이너를 관리하는 데 중점을 둘 것입니다. podman 그리고 Skopeo.

원격 레지스트리에서 컨테이너 이미지 검색

그만큼 podman search 컨테이너 이미지에 대해 선택한 원격 레지스트리를 검색할 수 있습니다. 레지스트리의 기본 목록은 registries.conf 에 위치한 /etc/containers/.

레지스트리는 3개의 섹션으로 정의됩니다.

  • [registries.search] – 이 섹션은 다음을 수행하는 기본 레지스트리를 지정합니다. podman 컨테이너 이미지를 검색할 수 있습니다. 에서 요청한 이미지를 검색합니다. registry.access.redhat.com, registry.redhat.io, 그리고 docker.io 레지스트리.
기본 레지스트리
  • [registries.insecure]– 이 섹션은 TLS 암호화를 구현하지 않는 레지스트리, 즉 안전하지 않은 레지스트리를 지정합니다. 기본적으로 항목이 지정되지 않습니다.
안전하지 않은 레지스트리
안전하지 않은 레지스트리
  • [registries.block] – 로컬 시스템에서 지정된 레지스트리에 대한 액세스를 차단하거나 거부합니다. 기본적으로 항목이 지정되지 않습니다.
블록 레지스트리
블록 레지스트리

정규(non-root) 사용자가 podman 명령을 실행하는 경우 사용자 정의할 수 있습니다. registries.conf 홈 디렉토리($HOME/.config/containers/registries.conf) 시스템 전체 설정을 재정의합니다.

레지스트리 지정 시 규칙

레지스트리를 지정할 때 다음 사항에 유의하십시오.

  • 모든 레지스트리는 작은따옴표로 묶어야 합니다.
  • 호스트 이름 또는 IP 주소를 사용하여 레지스트리를 지정할 수 있습니다.
  • 여러 레지스트리가 지정된 경우 쉼표로 구분해야 합니다.
  • 레지스트리가 비표준 포트(보안용 TCP 포트 443 및 비보안용 포트 80)를 사용하는 경우 포트 번호는 레지스트리 이름과 함께 지정되어야 합니다. registry.example.com:5566.

구문을 사용하여 레지스트리에서 컨테이너 이미지를 검색하려면:

# podman search registry/container_image

예를 들어 검색하려면 Redis 이미지 registry.redhat.io 레지스트리에서 다음 명령을 호출합니다.

# podman search registry.redhat.io/redis
컨테이너 이미지에 대한 레지스트리 검색
컨테이너 이미지에 대한 레지스트리 검색

검색하려면 MariaDB 컨테이너 이미지 실행

# podman search registry.redhat.io/mariadb
MariaDB 컨테이너 이미지 검색
MariaDB 컨테이너 이미지 검색

컨테이너 이미지에 대한 자세한 설명을 얻으려면 –no-trunc 얻은 결과에서 컨테이너 이미지의 이름 앞에. 예를 들어 다음과 같이 MariaDB 컨테이너 이미지에 대한 자세한 설명을 얻으려고 합니다.

# podman search --no-trunc registry.redhat.io/rhel8/mariadb-103
MariaDB 컨테이너 이미지 목록 설명
MariaDB 컨테이너 이미지 목록 설명

컨테이너 이미지 가져오기

원격 레지스트리에서 컨테이너 이미지를 가져오거나 검색하려면 먼저 인증해야 합니다. 예를 들어 MariaDB 컨테이너 이미지를 검색하려면 먼저 Redhat 레지스트리에 로그인합니다.

# podman login

사용자 이름과 비밀번호를 입력하고 ‘ENTER‘ 키보드에서. 모든 것이 잘되면 레지스트리 로그인이 성공했다는 확인 메시지를 받아야 합니다.

Login Succeeded!

이제 표시된 구문을 사용하여 이미지를 가져올 수 있습니다.

# podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

그만큼 <registry> TCP에서 컨테이너 이미지의 저장소를 제공하는 원격 호스트 또는 레지스트리를 나타냅니다. <port>. 그만큼 <namespace> 그리고 <name> 기반으로 컨테이너 이미지를 집합적으로 지정 <namespace> 레지스트리에서. 마지막으로, <tag> 컨테이너 이미지의 버전을 지정합니다. 아무 것도 지정하지 않으면 기본 태그인 최신 태그가 사용됩니다.

암호화를 제공하고 익명 사용자가 임의의 이름을 가진 계정을 생성하는 것을 허용하지 않는 신뢰할 수 있는 레지스트리를 추가하는 것이 항상 권장됩니다.

MariaDB 이미지를 가져오려면 다음 명령을 실행합니다.

# podman pull registry.redhat.io/rhel8/mariadb-103
  • 그만큼 <registry> – Registry.redhat.io
  • 그만큼 <namespace> – 렐8
  • 그만큼 <name> – 마리아DB
  • 그만큼 <tag> – 103
MariaDB 이미지 가져오기
MariaDB 이미지 가져오기

후속 컨테이너 이미지 가져오기의 경우 이미 인증되었으므로 추가 로그인이 필요하지 않습니다. 당기다 Redis 컨테이너 이미지에서 다음을 실행하기만 하면 됩니다.

# podman pull registry.redhat.io/rhscl/redis-5-rhel7
Redis 컨테이너 이미지 가져오기
Redis 컨테이너 이미지 가져오기

컨테이너 이미지 나열

이미지 가져오기가 완료되면 podman images 명령을 실행하여 호스트에 현재 존재하는 이미지를 볼 수 있습니다.

# podman images
컨테이너 이미지 나열
컨테이너 이미지 나열

컨테이너 이미지 검사

컨테이너를 실행하기 전에 항상 이미지를 조사하고 이미지가 하는 일을 이해하는 것이 좋습니다. 그만큼 podman inspect OS 및 아키텍처와 같은 컨테이너에 대한 메타데이터의 바다를 인쇄합니다.

이미지를 검사하려면 다음을 실행하십시오. podman inspect 그 뒤에 이미지 ID 또는 저장소가 옵니다.

# podman inspect IMAGE ID
OR
# podman inspect REPOSITORY

아래 예에서는 MariaDB 컨테이너.

# podman inspect registry.redhat.io/rhel8/mariadb-103
MariaDB 컨테이너 이미지 검사
MariaDB 컨테이너 이미지 검사

컨테이너에 대한 특정 메타데이터를 가져오려면 –format 그 뒤에 메타데이터와 컨테이너 ID( 이미지 ID 또는 이름 )가 옵니다.

아래 예에서는 ‘Labels‘ 부분.

# podman inspect --format=’{{.Labels.architecture}}’ image ID
# podman inspect --format=’{{.Labels.description}}’ image ID
컨테이너 아키텍처에 대한 정보 얻기
컨테이너 아키텍처에 대한 정보 얻기

다른 레지스트리에서 원격 이미지를 검사하려면 다음을 사용하십시오. skopeo inspect. 아래 예에서는 다음에서 호스팅되는 RHEL 8 초기화 이미지를 검사하고 있습니다. Docker.

# skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init
Docker 레지스트리에서 원격 이미지 검사
Docker 레지스트리에서 원격 이미지 검사

컨테이너 이미지에 태그 지정

이미 언급했듯이 이미지 이름은 일반적으로 일반적으로 사용됩니다. 예를 들어 redis 이미지의 레이블은 다음과 같습니다.

registry.redhat.io/rhscl/redis-5-rhel7

이미지에 태그를 지정하면 이미지에 포함된 내용을 더 잘 이해할 수 있도록 보다 직관적인 이름을 지정할 수 있습니다. 사용 podman tag본질적으로 다른 부분을 구성하는 이미지 이름의 별칭인 이미지 태그를 만들 수 있습니다.

이것들은:

registry/username/NAME:tag

예를 들어 ID가 인 Redis 이미지의 일반 이름을 변경하려면 646f2730318c 우리는 명령을 실행할 것입니다:

# podman tag 646f2730318c myredis

끝에 태그를 추가하려면 전체 콜론 뒤에 태그 번호를 추가하세요.

# podman tag 646f2730318c myredis:5.0

태그 번호를 추가하지 않으면 최신 속성만 할당됩니다.

Redis 컨테이너 이미지의 이름 설정
Redis 컨테이너 이미지의 이름 설정

컨테이너 이미지 실행

컨테이너를 실행하려면 다음을 사용하십시오. podman run. 예를 들어:

# podman run image_id

백그라운드에서 데몬 서비스로 컨테이너를 자동으로 실행하려면 다음을 사용하십시오. -d 보여진 바와 같이.

# podman run -d image_id

예를 들어, redis 아이디가 있는 이미지 646f2730318c다음 명령을 호출합니다.

# podman run -d 646f2730318c
Redis 컨테이너 이미지 실행
Redis 컨테이너 이미지 실행

다음과 같은 운영 체제를 기반으로 컨테이너를 실행하는 경우 RHEL 8 기본 이미지를 사용하여 쉘에 액세스할 수 있습니다. -it 지령. 그만큼 -i 대화형 세션을 생성하는 동안 -t 터미널 세션을 생성합니다. 그만큼 –name 컨테이너 이름을 다음으로 설정합니다. mybash 동안은 ecbc6f53bba0 기본 이미지의 이미지 ID입니다.

# podman run -it --name=mybash ecbc6f53bba0

그런 다음 모든 셸 명령을 실행할 수 있습니다. 아래 예시에서는 컨테이너 이미지의 OS 버전을 확인하고 있습니다.

# cat /etc/os-release
컨테이너 이미지 OS 버전 확인
컨테이너 이미지 OS 버전 확인

컨테이너를 종료하려면 exit 명령을 호출하기만 하면 됩니다.

# exit

컨테이너가 종료되면 자동으로 중지됩니다. 컨테이너를 다시 시작하려면 podman start 그만큼 -ai 보여진 바와 같이.

# podman start -ai mybash

다시 한 번 이렇게 하면 쉘에 액세스할 수 있습니다.

컨테이너 이미지 시작
컨테이너 이미지 시작

실행 중인 컨테이너 이미지 나열

현재 실행 중인 컨테이너를 나열하려면 podman ps 보여진 바와 같이.

# podman ps
실행 중인 컨테이너 이미지 나열
실행 중인 컨테이너 이미지 나열

실행 후 종료된 컨테이너를 포함하여 모든 컨테이너를 보려면 다음 명령을 사용하십시오.

# podman ps -a
모든 컨테이너 이미지 보기
모든 컨테이너 이미지 보기

시스템 서비스에서 자동 시작되도록 컨테이너 이미지 구성

이 섹션에서는 시스템 서비스로 RHEL 시스템에서 직접 실행되도록 컨테이너를 구성하는 방법에 중점을 둡니다.

먼저 원하는 이미지를 가져옵니다. 이 경우 우리는 Redis 도커 허브의 이미지:

# podman pull docker.io/redis

시스템에서 SELinux를 실행 중인 경우 활성화해야 합니다. container_manage_cgroup 컨테이너를 실행하는 부울 systemd.

# setsebool -p container_manage_cgroup on

그런 다음 백그라운드에서 컨테이너 이미지를 실행하고 원하는 이미지 이름에 할당합니다. 이 예에서는 이미지의 이름을 redis_server 포트 매핑 6379 컨테이너에서 우리의 RHEL 8 주최자

# podman run -d --name redis_server -p 6379:6379 redis
백그라운드에서 컨테이너 이미지 실행
백그라운드에서 컨테이너 이미지 실행

다음으로 우리는 systemd redis의 단위 구성 파일 /etc/systemd/system/.

# vim /etc/systemd/system/redis-container.service

아래 내용을 파일에 붙여넣습니다.

[Unit]
Description=Redis container

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redis_server
ExecStop=/usr/bin/podman stop -t 2 redis_server

[Install]
WantedBy=local.target

파일을 저장하고 종료합니다.

그런 다음 부팅 시 자동으로 시작하도록 컨테이너를 구성합니다.

# systemctl enable redis-container.service

그런 다음 컨테이너를 시작하고 실행 상태를 확인합니다.

# systemctl start redis-container.service
# systemctl status redis-container.service
컨테이너 이미지 상태 확인
컨테이너 이미지 상태 확인

컨테이너 이미지에 대한 영구 저장소 구성

컨테이너를 실행할 때 호스트에 영구 외부 저장소를 구성하는 것이 좋습니다. 이는 컨테이너가 충돌하거나 실수로 제거되는 경우에 대비하여 백업을 제공합니다.

데이터를 유지하기 위해 호스트에 있는 디렉토리를 컨테이너 내부의 디렉토리에 매핑할 것입니다.

$ podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash

그만큼 –privileged 때 통과 SELinux 시행하도록 설정되어 있습니다. 그만큼 -v 호스트에 있는 외부 볼륨을 지정합니다. 여기서 컨테이너 부피는 /mnt.

쉘에 액세스한 후에는 샘플 파일을 만들 것입니다. testing.txt 에서 /mnt 보여진 바와 같이.

$ echo "This tests persistent external storage" > /mnt/testing.txt

그러면 우리는 exit 컨테이너에 파일이 있는지 확인하고 호스트에 있는 외부 저장소에 파일이 있는지 확인합니다.

# exit
# cat /var/lib/containers/backup_storage/testing.txt

출력 ⇒ This tests persistent external storage.

컨테이너에 대한 영구 저장소 구성
컨테이너에 대한 영구 저장소 구성

컨테이너 중지 및 제거

컨테이너 실행이 끝나면 다음을 사용하여 컨테이너를 중지할 수 있습니다. podman stop 뒤이어 container-id 에서 얻을 수 있는 podman ps.

# podman stop container-id
컨테이너 이미지 중지
컨테이너 이미지 중지

더 이상 필요하지 않은 컨테이너를 제거하려면 먼저 컨테이너를 중지한 다음 podman rm 뒤에 옵션으로 컨테이너 ID 또는 이름이 옵니다.

# podman rm container-id

하나의 명령으로 여러 컨테이너를 제거하려면 컨테이너를 지정하십시오. ids 공백으로 구분됩니다.

# podman rm container-id-1 container-id-2 container-id-3
컨테이너 이미지 제거
컨테이너 이미지 제거

모든 컨테이너를 지우려면 다음 명령어를 실행하세요.

# podman rm -a
모든 컨테이너 지우기
모든 컨테이너 지우기

이미지 제거

이미지를 제거하려면 먼저 이전 하위 주제에서 설명한 대로 이미지에서 생성된 모든 컨테이너가 중지되고 제거되었는지 확인합니다.

다음으로 진행하여 podman을 실행합니다. -rmi 다음과 같이 이미지의 ID가 표시됩니다.

# podman -rmi image-id
이미지 제거
이미지 제거

결론

이것으로 컨테이너 관리 및 작업에 대한 이 장을 마무리합니다. RHEL 8. 이 가이드가 컨테이너에 대한 적절한 이해와 컨테이너를 상호 작용하고 관리하는 방법을 제공하기를 바랍니다. RHEL 사용하는 시스템 podman 그리고 Skopeo.