on my way
CI/CD-04: Podman을 사용한 컨테이너 관리 및 포트 설정 2 본문
포드 연습문제
아래 명령어들을 사용하여 포드를 생성하고 컨테이너를 추가하는 연습을 합니다.
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 설정
- 웹 브라우저를 통해 Gogs에 접속:
- http://<서버 IP>:3000
- Gogs 설정:
- 도메인: 서버 IP 주소로 설정
- 데이터베이스: SQLite로 설정
- 새 계정 생성 후 GitHub 프로젝트 클론:
# https://github.com/tangt64/spring-petclinic
넣어주면 생성 완료된다.
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 설정을 생성하고 실행하여 복잡한 컨테이너 환경을 쉽게 관리할 수 있습니다.
'Computer Science > CICD' 카테고리의 다른 글
CI/CD-06: Podman을 이용한 컨테이너 관리 4 및 Kubernetes 서비스 전환 (0) | 2024.07.26 |
---|---|
CI/CD-05: Podman을 사용한 컨테이너 관리 및 포트 설정 3 (1) | 2024.07.25 |
CI/CD-03: Podman을 사용한 컨테이너 관리 및 포트 설정 1 (13) | 2024.07.23 |
CI/CD-02: Podman과 Docker를 활용한 Kubernetes 클러스터 구성 및 컨테이너 관리 (0) | 2024.07.18 |
네트워크 기초 이해하기: 소켓과 TCP, UDP, TLS/SSL, 포트 번호, NAT (0) | 2024.07.18 |