on my way

CI/CD-04: Podman을 사용한 컨테이너 관리 및 포트 설정 2 본문

Computer Science/CICD

CI/CD-04: Podman을 사용한 컨테이너 관리 및 포트 설정 2

wingbeat 2024. 7. 23. 17:48
반응형

포드 연습문제

아래 명령어들을 사용하여 포드를 생성하고 컨테이너를 추가하는 연습을 합니다.

podman pod create --publish 18080:80 --publish 28080:8080 --name pod-web-service

 

이 명령어는 pod-web-service라는 이름의 Pod를 생성합니다. 다음과 같은 포트 매핑을 설정합니다:

  • --publish 18080:80: 호스트의 포트 18080을 Pod 내 컨테이너의 포트 80으로 매핑합니다.
  • --publish 28080:8080: 호스트의 포트 28080을 Pod 내 컨테이너의 포트 8080으로 매핑합니다.

이 포트 매핑을 통해 외부에서 호스트의 해당 포트를 통해 Pod 내 컨테이너에 접근할 수 있습니다.

Pod에 컨테이너 추가

MariaDB 컨테이너

podman run -d --rm --pod pod-web-service --name mariadb -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress quay.io/fedora/mariadb-105:latest
  • -d: 컨테이너를 백그라운드에서 실행합니다.
  • --rm: 컨테이너 종료 시 자동으로 제거합니다.
  • --pod pod-web-service: 지정된 Pod (pod-web-service) 내에서 컨테이너를 실행합니다.
  • --name mariadb: 컨테이너 이름을 mariadb로 설정합니다.
  • -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress: 환경 변수를 설정하여 MariaDB 데이터베이스 초기 설정을 구성합니다.

WordPress 컨테이너

podman run -d --rm --pod pod-web-service --name wordpress quay.io/redhattraining/wordpress:5.3.0
  • -d: 컨테이너를 백그라운드에서 실행합니다.
  • --rm: 컨테이너 종료 시 자동으로 제거합니다.
  • --pod pod-web-service: 지정된 Pod (pod-web-service) 내에서 컨테이너를 실행합니다.
  • --name wordpress: 컨테이너 이름을 wordpress로 설정합니다.

HTTPD 컨테이너

podman run -d --rm --pod pod-web-service --name httpd quay.io/fedora/httpd-24
  • -d: 컨테이너를 백그라운드에서 실행합니다.
  • --rm: 컨테이너 종료 시 자동으로 제거합니다.
  • --pod pod-web-service: 지정된 Pod (pod-web-service) 내에서 컨테이너를 실행합니다.
  • --name httpd: 컨테이너 이름을 httpd로 설정합니다.

CentOS 컨테이너

podman run -d --rm --pod pod-web-service --name test-centos quay.io/centos/centos:stream9 sleep 10000
  • -d: 컨테이너를 백그라운드에서 실행합니다.
  • --rm: 컨테이너 종료 시 자동으로 제거합니다.
  • --pod pod-web-service: 지정된 Pod (pod-web-service) 내에서 컨테이너를 실행합니다.
  • --name test-centos: 컨테이너 이름을 test-centos로 설정합니다.
  • sleep 10000: 컨테이너 내에서 sleep 10000 명령어를 실행하여, 컨테이너가 일정 시간 동안 유지되도록 합니다.

CentOS 컨테이너에 접속

podman exec -it test-centos bash
  • podman exec: 실행 중인 컨테이너 내에서 명령어를 실행합니다.
  • -it: 인터랙티브 모드로 터미널을 엽니다.
  • test-centos: 대상 컨테이너 이름입니다.
  • bash: 컨테이너 내에서 bash 셸을 실행합니다.

호스트 파일 확인

cat /etc/hosts

위 명령어는 test-centos 컨테이너 내에서 /etc/hosts 파일을 출력합니다. 이 파일은 컨테이너가 사용하는 호스트네임과 IP 주소 매핑 정보를 포함하고 있어, 네트워크 설정 및 디버깅에 유용합니다.


이러한 과정을 통해, Podman을 사용하여 여러 컨테이너를 하나의 Pod 내에서 효율적으로 관리하고, 네트워크와 포트 설정을 통해 외부와의 통신을 가능하게 합니다. 각 컨테이너는 특정 역할을 수행하며, Pod 내에서 상호작용할 수 있습니다


 

Podman을 이용한 컨테이너 관리 및 포트 설정

Podman을 사용하여 여러 컨테이너를 그룹으로 묶어 관리하는 방법과 포트 설정을 단계별로 설명합니다.

이 과정에서는 Podman Pod 생성, 컨테이너 추가, 포트 설정, Gogs 설정, Maven 프로젝트 빌드 및 배포, 컨테이너 이미지 빌드 및 배포, 그리고 볼륨 관리를 다룹니다.


1. Podman Pod 생성

Pod는 여러 컨테이너를 하나의 그룹으로 묶어주는 Kubernetes의 기본 단위입니다.

Podman을 사용하여 Pod를 생성하고 관리할 수 있습니다. 아래 명령어로 새로운 Pod를 생성합니다.

podman pod create --publish 18080:80 --name pod-web-service
  • --publish 18080:80: 호스트의 포트 18080을 컨테이너의 포트 80으로 매핑합니다. 이를 통해 외부에서 컨테이너의 서비스를 접근할 수 있습니다.

 

2. Pod에 컨테이너 추가

Pod에 WordPress와 MariaDB 컨테이너를 추가합니다. 아래 명령어를 사용하여 컨테이너를 실행하고 Pod에 추가합니다.

podman run -d --rm --pod pod-web-service --name wordpress quay.io/redhattraining/wordpress:5.3.0
podman run -d --rm --pod pod-web-service --name mariadb -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress quay.io/fedora/mariadb-105:latest

컨테이너의 상태를 확인하려면 다음 명령어를 사용하세요:

 

Pod 상태를 확인하려면 다음 명령어를 사용하세요:

podman container inspect wordpress | grep -i -e port -e ipaddress
podman container inspect mariadb | grep -i -e port -e ipaddress

이 명령어를 통해 컨테이너의 IP 주소와 포트를 확인할 수 있습니다.

3. 추가 컨테이너 실행 및 설정

Pod에 CentOS 및 HTTPD 컨테이너를 추가하여 다양한 테스트와 설정을 할 수 있습니다.

podman run -d --rm --pod pod-web-service --name test-centos quay.io/centos/centos:stream9 sleep 10000
podman exec -it test-centos bash

CentOS 컨테이너 내부에서 다양한 명령어를 실행할 수 있습니다. 예를 들어, 호스트 파일을 확인하거나 MariaDB 데이터베이스에 접근할 수 있습니다.


5. Git 서버 설정

Git 서버로 Gogs를 사용하여 코드 저장소를 설정합니다.

podman pull docker.io/gogs/gogs
podman run -d -P --rm --name git-server gogs

 

Gogs 설정

  1. 웹 브라우저를 통해 Gogs에 접속:
    • http://<서버 IP>:3000
  2. Gogs 설정:
    • 도메인: 서버 IP 주소로 설정
    • 데이터베이스: SQLite로 설정
  3. 새 계정 생성 후 GitHub 프로젝트 클론:

 


https://github.com/tangt64/spring-petclinic

 

GitHub - tangt64/spring-petclinic

Contribute to tangt64/spring-petclinic development by creating an account on GitHub.

github.com

넣어주면 생성 완료된다.

 

 

Git 서버 컨테이너의 상태를 확인합니다:

podman container ls
podman inspect <IMG_ID>

 

6. Pod 및 컨테이너 관리

Pod 및 컨테이너의 상태를 확인하고 관리하는 명령어들입니다. 

podman stop <CONTAINER_ID>/<CONTAINER_NAME>
podman pod stop <POD_ID>
podman rm <CONTAINER_ID>/<POD_ID>
podman rm --force <CONTAINER_ID>/<POD_ID>

Pod를 사용할 때는 Pod 내의 컨테이너를 먼저 중지하고 제거해야 합니다.

 

7. 이미지 보안 설정

Podman에서 이미지를 사용할 때 보안 설정을 무시하도록 설정합니다.

nano /etc/containers/registries.conf

# 파일에 아래 내용을 추가
unqualified-search-registries = ["quay.io", "docker.io", "localhost:5000"]
[[registry]]
insecure = true
location="localhost:5000"

 

이미지를 검색하고 태그를 확인하는 명령어들입니다.

skopeo list-tags docker://localhost:5000/tang/docker-registry
podman search docker-registry
skopeo inspect docker://docker.io/library/registry

 

8. Docker Registry 설정

Docker Registry를 설정하고 사용하는 방법입니다.

podman run -d --name docker-registry --rm -p 5000:5000 docker.io/library/registry:latest
podman rmi quay.io/redhattraining/wordpress:latest
podman tag docker.io/library/registry:latest localhost:5000/tang/docker-registry:v1
podman push --tls-verify=false localhost:5000/tang/docker-registry:v1

 

레지스트리에 저장된 이미지의 태그를 확인합니다.

skopeo list-tags --tls-verify=false docker://localhost:5000/tang/docker-registry

 

9. Maven 프로젝트 빌드 및 배포

Spring Petclinic 애플리케이션을 설정하고 빌드하는 과정입니다.

git clone https://github.com/tangt64/spring-petclinic
cd spring-petclinic
./mvnw clean package
java -jar target/*.jar

 

10. 컨테이너 이미지 빌드 및 배포

Podman을 사용한 이미지 빌드

Podman을 사용하여 Spring Petclinic 애플리케이션의 컨테이너 이미지를 빌드합니다.

이 과정은 애플리케이션 코드를 컨테이너 환경에서 실행할 수 있도록 패키징합니다.

 

먼저, 프로젝트 디렉터리로 이동하여 Dockerfile을 작성합니다:

FROM openjdk:11-jre-slim
COPY target/*.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

 

이제 Podman을 사용하여 이미지를 빌드합니다:

podman build -t localhost:5000/tang/spring-petclinic:v1 .

위 명령어는 현재 디렉터리(.)에 있는 Dockerfile을 사용하여 이미지를 빌드하고, localhost:5000/tang/spring-petclinic:v1이라는 태그를 붙입니다.

 

빌드한 이미지를 로컬 Docker 레지스트리로 푸시합니다:

podman push localhost:5000/tang/spring-petclinic:v1

위 명령어는 이미지가 로컬 레지스트리에 저장되도록 합니다.

이제 이 이미지를 사용할 수 있습니다.

 

레지스트리에 저장된 이미지의 태그를 확인하려면 다음 명령어를 사용합니다:

skopeo list-tags --tls-verify=false docker://localhost:5000/tang/spring-petclinic

이 명령어는 레지스트리에서 사용할 수 있는 이미지 태그 목록을 보여줍니다.

 

빌드한 이미지를 기반으로 컨테이너를 실행합니다:

podman run -d -p 8088:8080 --rm --name petclinic localhost:5000/tang/spring-petclinic:v1
  • -d: 백그라운드에서 실행
  • -p 8088:8080: 호스트의 포트 8088을 컨테이너의 포트 8080에 매핑
  • --rm: 컨테이너 종료 시 자동으로 제거
  • --name petclinic: 컨테이너 이름을 petclinic으로 설정

이제 웹 브라우저에서 http://<서버 IP>:8088로 접속하여 Spring Petclinic 애플리케이션에 접근할 수 있습니다.

 

11. 컨테이너와 볼륨 관리

컨테이너에서 데이터를 영구적으로 저장하기 위해 볼륨을 사용합니다.

볼륨을 생성하고 컨테이너와 함께 사용하는 방법은 다음과 같습니다:

 

볼륨 생성:

podman volume create gogs-data
podman volume create gogs-backup

위 명령어는 gogs-data와 gogs-backup이라는 이름의 두 개의 볼륨을 생성합니다.

컨테이너 실행 시 볼륨을 마운트

컨테이너를 실행할 때 생성한 볼륨을 마운트하여 데이터를 저장하고 사용할 수 있습니다. 예를 들어, Gogs 컨테이너를 실행할 때 볼륨을 마운트하려면 다음 명령어를 사용합니다:

 

podman run -d --rm --name test-gogs -v gogs-backup:/backup -v gogs-data:/data gogs/gogs
  • -d: 백그라운드에서 실행합니다.
  • --rm: 컨테이너가 종료되면 자동으로 제거합니다.
  • --name test-gogs: 컨테이너 이름을 test-gogs로 설정합니다.
  • -v gogs-backup:/backup: gogs-backup 볼륨을 컨테이너의 /backup 디렉터리에 마운트합니다.
  • -v gogs-data:/data: gogs-data 볼륨을 컨테이너의 /data 디렉터리에 마운트합니다.
  • gogs/gogs: 사용할 이미지 이름입니다.

볼륨 데이터 확인

볼륨에 저장된 데이터를 확인하려면 다음 명령어를 사용합니다:

ls -l /var/lib/containers/storage/volumes/gogs-backup/_data

위 명령어는 gogs-backup 볼륨에 저장된 데이터의 목록을 보여줍니다. 볼륨의 실제 데이터는 호스트 시스템의 /var/lib/containers/storage/volumes 디렉터리에 저장됩니다.

12. YAML 파일을 통한 Kubernetes 설정

Podman 컨테이너를 Kubernetes YAML 파일로 생성하고 이를 사용하여 Kubernetes 클러스터에서 컨테이너를 실행할 수 있습니다.

Kube YAML 파일 생성

Podman 컨테이너를 Kube YAML 파일로 생성하려면 다음 명령어를 사용합니다: 

podman generate kube petclinic --filename petclinic-v1.yaml

위 명령어는 petclinic이라는 이름의 컨테이너를 기반으로 petclinic-v1.yaml이라는 YAML 파일을 생성합니다.

이 파일은 Kubernetes 클러스터에서 컨테이너를 실행하는 데 사용됩니다.

 

YAML 파일을 사용하여 Podman Kube 실행

생성한 YAML 파일을 사용하여 Podman Kube를 실행하려면 다음 명령어를 사용합니다:

podman kube play petclinic-v1.yaml

위 명령어는 petclinic-v1.yaml 파일을 읽고 해당 설정에 따라 Kubernetes 클러스터에서 컨테이너를 실행합니다.

Kube 중단

실행 중인 Kube를 중단하려면 다음 명령어를 사용합니다:

podman kube down petclinic-v1.yaml

위 명령어는 petclinic-v1.yaml 파일을 기반으로 실행 중인 모든 리소스를 중단합니다.


요약

Podman을 사용하여 컨테이너를 관리하고, 네트워크와 포트 설정을 통해 효율적인 환경을 구성할 수 있습니다.

이 과정에서 Gogs와 Docker Registry를 활용하여 소스 코드 관리와 이미지 배포를 수행하며, 볼륨을 통해 데이터를 영구적으로 저장할 수 있습니다.

YAML 파일을 통해 Kubernetes 설정을 생성하고 실행하여 복잡한 컨테이너 환경을 쉽게 관리할 수 있습니다.

 

 

 

반응형