on my way

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

Computer Science/CICD

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

wingbeat 2024. 7. 23. 16:37
반응형

사용한 자원 목록

  • 컨테이너 이미지
    • quay.io/fedora/httpd-24: Fedora 기반의 HTTP 서버 이미지
    • quay.io/centos/centos:stream9: CentOS 스트림 9 이미지
    • quay.io/fedora/mariadb-105: Fedora 기반의 MariaDB 데이터베이스 이미지
    • quay.io/openshift-examples/tomcat-example:tomcat: OpenShift 예제 Tomcat 이미지
    • quay.io/redhattraining/wordpress:5.3.0: WordPress 이미지
    • docker.io/library/registry:latest: Docker 레지스트리 이미지
    • docker.io/library/tomcat:9.0: Tomcat 9.0 이미지
  • 소스코드

Podman 기본 명령어

Podman을 사용하면 Docker와 유사한 방식으로 컨테이너를 관리할 수 있습니다. 주요 명령어와 옵션을 설명합니다.

주요 명령어 및 옵션 설명

  • podman run: 새로운 컨테이너를 실행합니다.
    • -d: 컨테이너를 백그라운드에서 실행합니다.
    • --rm: 컨테이너가 중지되면 자동으로 삭제합니다.
    • -p: 포트를 외부:내부로 포워딩합니다.
    • -P: 컨테이너의 모든 노출된 포트를 호스트에 자동으로 매핑합니다.
    • -e: 환경 변수를 설정합니다.

IP 주소와 포트 번호

IP 주소(IP Address):

  • IP 주소는 컴퓨터 네트워크에서 장치를 식별하는 데 사용되는 고유한 숫자입니다.
  • 예를 들어, 192.168.1.1 또는 2001:0db8:85a3:0000:0000:8a2e:0370:7334 같은 형식을 가집니다.
  • IP 주소는 네트워크 상의 장치를 찾고 통신할 수 있도록 합니다.

포트 번호(Port Number):

  • 포트 번호는 네트워크 상에서 특정 애플리케이션이나 서비스와 통신하는 데 사용됩니다.
  • 각 포트 번호는 특정 프로세스나 네트워크 서비스에 할당됩니다.
  • 예를 들어, 웹 서버는 일반적으로 포트 80(HTTP) 또는 443(HTTPS)을 사용합니다.

IP 주소와 포트 번호의 조합:

  • IP 주소와 포트 번호를 함께 사용하여 특정 장치의 특정 서비스에 접근할 수 있습니다.
  • 예를 들어, "192.168.1.1:8080"은 192.168.1.1 주소의 장치에서 8080 포트를 사용하는 서비스에 연결합니다.
  • 이는 네트워크에서 여러 서비스가 동시에 실행될 수 있도록 해줍니다.

포트 번호와 NAT(Network Address Translation)

포트 번호(Port Number):

  • 포트 번호는 컴퓨터 네트워크에서 데이터를 주고받을 때 사용하는 논리적인 접근점입니다.
  • 하나의 IP 주소에서 여러 애플리케이션이나 서비스를 구분하기 위해 사용됩니다.
  • 표준 포트 번호 예시:
    • 80: HTTP 웹 서버
    • 443: HTTPS 웹 서버
    • 22: SSH 원격 접속

iptables-save:

  • iptables-save는 현재 설정된 iptables 규칙을 저장하는 명령어입니다.
  • iptables는 리눅스에서 네트워크 트래픽을 필터링하고 조절하는 방화벽 도구입니다.
  • 이 명령어를 사용하여 설정된 방화벽 규칙을 파일로 저장할 수 있습니다.
sudo iptables-save > /etc/iptables/rules.v4

S/NAT (Source Network Address Translation):

  • S/NAT는 네트워크 트래픽의 출발지 IP 주소를 변경하는 기술입니다.
  • 일반적으로 내부 네트워크의 IP 주소를 공인 IP 주소로 변환하여 인터넷에 접속할 수 있게 합니다.

D/NAT (Destination Network Address Translation):

  • D/NAT는 네트워크 트래픽의 목적지 IP 주소를 변경하는 기술입니다.
  • 외부에서 특정 IP 주소와 포트로 들어오는 트래픽을 내부 네트워크의 다른 IP 주소와 포트로 전달할 때 사용됩니다.
  • 예를 들어, 외부에서 "123.45.67.89:8080"으로 접근하는 트래픽을 내부의 "192.168.1.100:80"으로 리디렉션할 수 있습니다.
# 외부 포트 8080으로 들어오는 트래픽을 내부 포트 80으로 리디렉션
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

 


Docker, Docker Registry, Podman, Buildah, Skopeo의 관계

1. Docker란 무엇인가요?

  • Docker는 애플리케이션을 컨테이너로 묶어주는 도구입니다. 컨테이너는 애플리케이션과 필요한 모든 것을 포함한 패키지로, 어디서나 동일하게 실행될 수 있습니다.
  • 컨테이너는 애플리케이션이 실행되는 작은 가상 환경이라고 생각하면 됩니다. 여러 컨테이너가 한 컴퓨터에서 동시에 실행될 수 있습니다.

2. Docker Registry란 무엇인가요?

  • Docker Registry는 Docker 이미지를 저장하고 배포하는 서버입니다.
  • Docker 이미지는 컨테이너를 만들기 위한 템플릿입니다. 예를 들어, Nginx 웹 서버를 실행하기 위한 이미지가 있습니다.
  • Docker 이미지를 Docker Hub와 같은 공개 레지스트리 또는 사설 레지스트리(Docker Registry)에 저장할 수 있습니다.

3. Podman이란 무엇인가요?

  • Podman은 Docker와 비슷한 컨테이너 관리 도구입니다. Docker와 달리 데몬(daemon) 없이 동작합니다.
  • Podman은 Docker 명령어와 거의 동일하게 사용할 수 있어서 Docker 대신 Podman을 사용하는 데 어려움이 없습니다.
  • Podman은 컨테이너를 개별적으로 실행할 수도 있고, Pod로 묶어 관리할 수도 있습니다. Pod는 여러 컨테이너를 하나의 그룹으로 묶은 것입니다.

4. Buildah란 무엇인가요?

  • Buildah는 Dockerfile을 사용해 컨테이너 이미지를 빌드하는 도구입니다. Docker의 이미지 빌드 기능을 대신합니다.
  • Buildah는 컨테이너 이미지를 빌드하고, 수정하고, 관리하는 데 특화된 도구입니다.

5. Skopeo란 무엇인가요?

  • Skopeo는 컨테이너 이미지를 검색하고, 복사하고, 관리하는 도구입니다.
  • Skopeo는 이미지를 다양한 컨테이너 레지스트리(Docker Hub, Quay, 사설 레지스트리 등) 간에 이동할 수 있도록 도와줍니다.
  • 예를 들어, Docker Hub에서 이미지를 가져와 로컬 레지스트리에 저장할 때 사용합니다.

관계 설명

  1. Docker와 Docker Registry의 관계
    • Docker는 컨테이너를 만들고 실행하는 도구입니다.
    • Docker Registry는 Docker 이미지(컨테이너 템플릿)를 저장하는 곳입니다.
    • Docker는 이미지를 Docker Registry에서 가져와서 컨테이너를 실행합니다.
  2. Podman과 Docker의 관계
    • Podman은 Docker와 비슷한 기능을 제공하지만, 데몬 없이 동작합니다.
    • Podman은 Docker 명령어를 그대로 사용할 수 있어, Docker 대신 Podman을 사용할 수 있습니다.
  3. Buildah와 Docker의 관계
    • Buildah는 Dockerfile을 사용해 이미지를 빌드하는 도구입니다.
    • Docker와 마찬가지로 이미지를 빌드하지만, Buildah는 더 가볍고 유연하게 이미지를 빌드할 수 있습니다.
  4. Skopeo와 Docker의 관계
    • Skopeo는 이미지를 검색하고 복사하는 도구입니다.
    • Docker 이미지뿐만 아니라 다른 컨테이너 이미지도 다룰 수 있습니다.
    • 이미지를 다양한 레지스트리 간에 쉽게 이동할 수 있습니다.
  5. Podman, Buildah, Skopeo의 관계
    • Podman은 컨테이너를 실행하고 관리하는 도구입니다.
    • Buildah는 이미지를 빌드하는 도구입니다.
    • Skopeo는 이미지를 검색하고 복사하는 도구입니다.
    • 이 세 가지 도구는 함께 사용되어 컨테이너 이미지를 빌드, 관리, 배포하는 전체 과정을 지원합니다.

요약

  • Docker: 컨테이너를 만들고 실행하는 도구
  • Docker Registry: Docker 이미지를 저장하고 배포하는 서버
  • Podman: Docker와 비슷한 컨테이너 관리 도구, 데몬 없이 동작
  • Buildah: 컨테이너 이미지를 빌드하는 도구
  • Skopeo: 컨테이너 이미지를 검색하고 복사하는 도구

Podman, Buildah, Skopeo는 함께 사용되어 컨테이너를 만들고 실행하고 이미지를 관리하는 데 사용됩니다. Docker와 Docker Registry는 컨테이너 이미지의 저장 및 배포를 담당합니다. 이 도구들은 각각의 역할을 수행하며, 함께 사용되어 컨테이너 기반 애플리케이션을 효율적으로 관리할 수 있습니다.


네트워크와 볼륨의 의미와 관계 

네트워크

네트워크는 컨테이너들이 서로 통신하고, 외부와 통신할 수 있도록 하는 중요한 요소입니다. 네트워크 설정은 컨테이너의 IP 주소, 포트 포워딩 등을 포함하며, 이를 통해 컨테이너 간의 통신 및 외부 서비스와의 연결을 관리합니다.

  • Pod 네트워크: Kubernetes의 Pod 내에 있는 모든 컨테이너는 동일한 네트워크 네임스페이스를 공유합니다. 이는 동일한 IP 주소를 공유하고, 컨테이너 간의 통신이 로컬 네트워크를 통해 이루어진다는 것을 의미합니다. Pod 내의 컨테이너들은 서로 localhost로 통신할 수 있습니다.
  • 포트 포워딩: Pod 또는 컨테이너에서 외부와 통신하기 위해 특정 포트를 열어주는 기능입니다. 예를 들어, 호스트의 포트 8080을 컨테이너의 포트 80에 연결하면, 외부에서 호스트의 8080 포트를 통해 컨테이너의 웹 서버에 접근할 수 있습니다.

볼륨

볼륨은 컨테이너에서 데이터를 저장하고 공유하기 위한 공간입니다. 컨테이너가 재시작되거나 삭제되더라도 데이터를 유지하기 위해 사용됩니다. 볼륨은 호스트의 파일 시스템과 컨테이너의 파일 시스템 간에 데이터를 공유할 수 있는 방법을 제공합니다.

  • Pod 볼륨: Kubernetes의 Pod 내에서 볼륨은 여러 컨테이너가 데이터를 공유할 수 있게 해줍니다. 예를 들어, 하나의 컨테이너가 로그 파일을 생성하고, 다른 컨테이너가 이를 읽을 수 있습니다.
  • 영구 볼륨(Persistent Volume, PV): Kubernetes에서 사용되는 영구적인 스토리지 자원으로, Pod의 생명주기와 상관없이 데이터를 유지합니다. PV는 다양한 스토리지 시스템(NFS, 클라우드 스토리지 등)과 연동할 수 있습니다.

네트워크와 볼륨의 관계

Pod 내에서 네트워크와 볼륨은 서로 독립적인 기능을 가지면서도, 애플리케이션의 효율적인 배포와 관리를 위해 함께 사용됩니다.

  • 네트워크를 통한 데이터 전송: 네트워크 설정을 통해 컨테이너 간에 데이터를 전송하거나 외부 서비스와 통신할 수 있습니다. 이는 웹 애플리케이션이 데이터베이스와 통신하는 방식과 유사합니다.
  • 볼륨을 통한 데이터 공유: 볼륨을 사용하면 Pod 내의 여러 컨테이너가 동일한 데이터를 공유할 수 있습니다. 예를 들어, 한 컨테이너가 데이터를 생성하고, 다른 컨테이너가 이를 처리하는 구조를 만들 수 있습니다.
  • 데이터 일관성: 네트워크와 볼륨을 함께 사용하여 데이터의 일관성을 유지할 수 있습니다. 예를 들어, 데이터베이스 컨테이너와 애플리케이션 컨테이너가 네트워크를 통해 통신하고, 볼륨을 통해 로그나 설정 파일을 공유할 수 있습니다.

예시

  1. Pod 생성 및 네트워크 설정
podman pod create --name my-pod --publish 8080:80

 

2. 컨테이너 실행 및 네트워크 연결

podman run -d --pod my-pod --name web-server nginx
podman run -d --pod my-pod --name app-server my-app-image

 

3. 볼륨 생성 및 컨테이너 연결

 

 

podman volume create my-volume
podman run -d --pod my-pod --name db-server -v my-volume:/var/lib/mysql mysql
podman run -d --pod my-pod --name log-reader -v my-volume:/logs log-reader-image

위 예시에서 my-pod는 여러 컨테이너(web-server, app-server, db-server, log-reader)를 포함하며, 이들은 동일한 네트워크 네임스페이스를 공유하여 서로 통신할 수 있습니다.

또한 my-volume을 통해 db-server와 log-reader 컨테이너가 데이터를 공유할 수 있습니다.


IP 주소와 포트 번호의 실습 예시: Podman을 사용하여 Nginx 서버 실행

1. Nginx 컨테이너 실행:

podman run -d --name test-nginx -p 8080:80 --rm nginx
  • -d: 컨테이너를 백그라운드에서 실행합니다.
  • --name test-nginx: 컨테이너 이름을 test-nginx로 설정합니다.
  • -p 8080:80: 호스트의 포트 8080을 컨테이너의 포트 80에 매핑합니다.
  • --rm: 컨테이너가 중지되면 자동으로 삭제합니다.
  • nginx: Nginx 이미지를 사용하여 컨테이너를 실행합니다.

2. 웹 브라우저에서 접속:

  • 웹 브라우저를 열고 http://localhost:8080을 입력합니다.
  • Nginx 서버의 기본 페이지가 표시됩니다.

터미널 창 나누기

터미널에서 작업을 더 효율적으로 하기 위해 창을 나누어 사용할 수 있습니다.

  • Alt+Shift+-: 수평으로 화면 나누기
  • Alt+Shift++: 수직으로 화면 나누기
  • Ctrl+Shift+W: 창 닫기

이 포스팅에서는 Podman을 사용하여 컨테이너를 관리하고, 워드프레스와 MariaDB를 설정하는 방법에 대해 설명했습니다. 각 명령어의 사용법과 의미를 이해하면, 효율적으로 컨테이너 환경을 구축하고 관리할 수 있습니다.


설정 파일 편집

컨테이너 이미지의 검색 경로와 모드를 설정합니다.

sudo nano /etc/containers/registries.conf

# unqualified-search-registries = ["quay.io", "docker.io"]
# short-name-mode = "enforcing"

워드프레스와 데이터베이스 생성 및 구성

이번 포스팅에서는 Podman을 사용하여 워드프레스와 MariaDB 데이터베이스를 설치하고 설정하는 방법을 설명하겠습니다. 이 과정은 몇 가지 단계로 나뉩니다. 각 단계를 쉽게 이해할 수 있도록 자세히 설명하겠습니다.

1. 기본 HTTP 서버 실행

먼저, 기본 HTTP 서버를 실행합니다. 이는 나중에 워드프레스 설정을 위해 필요합니다.

podman run -d --rm -P quay.io/fedora/httpd-24
  • -d: 백그라운드에서 실행
  • --rm: 컨테이너가 중지되면 삭제
  • -P: 노출된 모든 포트를 호스트에 자동 매핑.
  • quay.io/fedora/httpd-24: 사용하고자 하는 컨테이너 이미지입니다. 이 경우 Fedora의 HTTPD(웹 서버) 이미지입니다.

2. 특정 포트로 HTTP 서버 실행

podman run -d --rm -p 18080:8080 quay.io/fedora/httpd-24
  • -p 18080:8080: 호스트의 포트 18080을 컨테이너의 포트 8080에 매핑합니다.

3. CentOS 컨테이너 실행 후 Bash 쉘 접속

다음으로, CentOS 컨테이너를 실행하고 bash 쉘로 접속합니다.

podman run -d --rm --name test-centos quay.io/centos/centos:stream9 sleep 10000
  • --name test-centos: 컨테이너 이름을 test-centos로 설정합니다.
  • quay.io/centos/centos:stream9: 사용할 CentOS 컨테이너 이미지입니다.
  • sleep 10000: 컨테이너가 실행된 상태로 유지되도록 합니다.

컨테이너 실행 후 bash 쉘로 접속합니다.

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

3. 워드프레스 컨테이너 실행

워드프레스 컨테이너를 실행합니다.

podman run -d --rm -p18080:89 --name wordpress quay.io/redhattraining/wordpress:5.3.0
  • -p 18080:89: 호스트의 포트 18080을 컨테이너의 포트 89에 매핑합니다.
  • --name wordpress: 컨테이너 이름을 wordpress로 설정합니다.
  • quay.io/redhattraining/wordpress:5.3.0: 워드프레스 컨테이너 이미지입니다.

이 명령어는 모든 노출된 포트를 호스트에 자동으로 매핑합니다.

podman run -d --rm -P --name wordpress quay.io/redhattraining/wordpress:5.3.0

4. MariaDB 데이터베이스 컨테이너 실행

다음으로, MariaDB 데이터베이스를 실행합니다.

podman run -d --rm -p13306:3306 --name mariadb -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress quay.io/fedora/mariadb-105:latest
  • -p 13306:3306: 호스트의 포트 13306을 컨테이너의 포트 3306에 매핑합니다.
  • -e MYSQL_USER=wordpress: MariaDB 사용자 이름을 wordpress로 설정합니다.
  • -e MYSQL_PASSWORD=wordpress: MariaDB 사용자 비밀번호를 wordpress로 설정합니다.
  • -e MYSQL_DATABASE=wordpress: 생성할 MariaDB 데이터베이스 이름을 wordpress로 설정합니다.
  • --name mariadb: 컨테이너 이름을 mariadb로 설정합니다.
  • quay.io/fedora/mariadb-105:latest: MariaDB 컨테이너 이미지입니다.

또한 CentOS 컨테이너를 실행하여 데이터베이스 설정을 도와줍니다.

podman run -d --rm --name test-mariadb quay.io/centos/centos:stream9 sleep 10000

5. 데이터베이스 IP 주소 확인 및 설정

MariaDB 데이터베이스 컨테이너의 IP 주소를 확인합니다.

podman container inspect mariadb | grep -i ipaddress
  • inspect: 컨테이너의 (mariadb) 상세 정보를 확인합니다.
  • grep -i ipaddress: 출력된 정보 중에서 IP 주소를 찾습니다. 예를 들어, 출력 결과가 "IPAddress": "10.88.0.29"라면 이 주소를 사용합니다.
podman exec -it test-mariadb bash

확인된 IP 주소를 사용하여 MariaDB 컨테이너에 접속합니다.

dnf install iputils -y
dnf install mariadb -y

컨테이너 내부에서 필요한 패키지를 설치합니다.

  • dnf install iputils -y: 네트워크 유틸리티 패키지를 설치합니다.
  • dnf install mariadb -y: MariaDB 클라이언트를 설치합니다.
ping 10.88.0.X

데이터베이스 서버로 핑(ping)을 보내 연결 상태를 확인합니다.

mariadb -uwordpress -pwordpress -h 10.88.0.29 -P3306

MariaDB에 접속하여 데이터베이스 설정을 확인합니다.

  • -uwordpress: MariaDB 사용자 이름
  • -pwordpress: MariaDB 사용자 비밀번호
  • -h 10.88.0.29: 데이터베이스 서버 IP 주소
  • -P3306: 데이터베이스 포트
show databases;
use wordpress;
show tables;

접속 후 데이터베이스와 테이블을 확인합니다.

  • show databases;: 데이터베이스 목록을 표시합니다.
  • use wordpress;: wordpress 데이터베이스를 선택합니다.
  • show tables;: 선택된 데이터베이스의 테이블 목록을 표시합니다.

이 과정을 통해 워드프레스와 MariaDB 데이터베이스를 성공적으로 설치하고 구성할 수 있습니다. Podman을 사용하면 이러한 작업을 쉽게 수행할 수 있으며, 컨테이너를 통해 일관된 환경에서 애플리케이션을 실행할 수 있습니다.


컨테이너 및 이미지 정리

모든 작업이 끝나면 사용한 컨테이너와 이미지를 정리합니다.

1. 모든 컨테이너 정지 및 삭제

podman container stop --all
podman container rm --all
  • podman container stop --all: 모든 실행 중인 컨테이너를 정지합니다.
  • podman container rm --all: 모든 컨테이너를 삭제합니다.

2. 모든 이미지 삭제

podman rmi --all
  • podman rmi --all: 모든 이미지를 삭제합니다.

3. 컨테이너 및 이미지 목록 확인

podman container ls --all
podman images
  • podman container ls --all: 모든 컨테이너 목록을 표시합니다.
  • podman images: 이미지 목록을 표시합니다.

WordPress 컨테이너 포트 확인

컨테이너가 사용하는 포트를 확인하려면 다음 명령을 사용합니다:

podman container port wordpress

이 명령은 wordpress 컨테이너가 외부에서 접근할 수 있는 포트를 보여줍니다.

로컬 IP 주소 확인

로컬 머신의 IP 주소를 확인합니다. 일반적으로 ip a 명령어를 통해 확인할 수 있습니다:

ip a

터미널 창 나누기

터미널에서 작업을 더 효율적으로 하기 위해 창을 나누어 사용할 수 있습니다.

  • Alt+Shift+-: 수평으로 화면 나누기
  • Alt+Shift++: 수직으로 화면 나누기
  • Ctrl+Shift+W: 창 닫기

이 포스팅에서는 Podman을 사용하여 컨테이너를 관리하고, 워드프레스와 MariaDB를 설정하는 방법에 대해 설명했습니다. 각 명령어의 사용법과 의미를 이해하면, 효율적으로 컨테이너 환경을 구축하고 관리할 수 있습니다.


이 그림은 두 개의 Pod(dev A와 dev B)와 그 안에 있는 컨테이너, 그리고 외부 사용자와의 상호작용을 나타냅니다.

각 요소와 그 상호작용을 설명하겠습니다.

이 이미지는 두 개의 Pod(POD(dev A)와 POD(dev B))와 각각의 Pod에 포함된 컨테이너들의 네트워크 구성을 보여줍니다. 아래는 이미지의 해석과 설명입니다.

이미지 구성 요소

  1. Pod(dev A):
    • WordPress 컨테이너:
      • 역할: 웹 애플리케이션을 제공하는 컨테이너입니다.
      • 속성: namespace와 cgroup을 사용하여 컨테이너를 격리합니다.
    • MariaDB 컨테이너:
      • 역할: 데이터베이스 서버를 제공하는 컨테이너입니다.
    • 네트워크 연결:
      • 3306 포트: MariaDB 컨테이너의 MySQL 서버가 사용하는 포트입니다.
      • 18080 포트: 외부 액세스용 포트입니다. Actor가 이 포트를 통해 WordPress 웹 애플리케이션에 접속합니다.
  2. Pod(dev B):
    • WordPress 컨테이너:
      • 역할: 웹 애플리케이션을 제공하는 컨테이너입니다.
      • 상태: PAUSE 모드로 표시되어 있습니다.
    • MariaDB 컨테이너:
      • 역할: 데이터베이스 서버를 제공하는 컨테이너입니다.
      • 상태: PAUSE 모드로 표시되어 있습니다.
  3. 네트워크 설정:
    • Pod(dev A)의 WordPress 컨테이너는 3306 포트를 통해 MariaDB 컨테이너와 연결됩니다.
    • 외부 Actor는 18080 포트를 통해 Pod(dev A)의 WordPress 웹 애플리케이션에 접속할 수 있습니다.

주요 개념 및 설명

  • Pod: Kubernetes에서 사용하는 논리적 그룹으로, 하나 이상의 컨테이너를 포함할 수 있습니다. 같은 Pod 내의 컨테이너는 네트워크와 스토리지를 공유합니다.
  • 컨테이너: 애플리케이션과 그 종속성을 함께 패키징하여 독립적으로 실행되는 단위입니다. 여기서는 WordPress와 MariaDB 컨테이너가 사용되었습니다.
  • 네트워크 포트: 컨테이너가 외부와 통신하기 위해 사용하는 네트워크 포트입니다. 3306은 MariaDB, 18080은 외부 액세스용 포트입니다.
  • PAUSE 상태: 컨테이너가 일시 정지된 상태를 나타냅니다.
  1. Pod(dev A)와 Pod(dev B)는 각각 별도의 네임스페이스에서 실행되며, 각 Pod에는 WordPress와 MariaDB 서버가 포함되어 있습니다.
  2. Pod(dev A)에서 WordPress와 MariaDB 서버가 서로 연결되어 있으며, MariaDB 서버는 3306 포트를 사용합니다.
  3. Pod(dev A)는 외부 Actor와 연결되어 있으며, 18080 포트를 통해 WordPress 애플리케이션에 접근합니다.
  4. Pod(dev B)도 유사하게 구성되어 있지만, 이 Pod는 내부 개발자(dev)가 접근합니다.

이 그림은 각각의 Pod가 독립적으로 작동하며, WordPress와 MariaDB 서버가 함께 배포되어 있는 환경을 보여줍니다.

또한, 외부와 내부 사용자가 각각 다른 포트를 통해 접근하는 방법을 시각화하고 있습니다.

 


이 그림은 Podman을 사용하여 여러 컨테이너를 실행하고, 네트워크와 포트 매핑을 통해 서로 연결하는 방법을 시각적으로 설명합니다. 각 구성 요소와 연결을 이해하기 쉽게 설명하겠습니다.

주요 구성 요소

  1. 컨테이너 httpd (Fedora HTTPD 웹 서버) 
podman run -d --rm --pod pod-web-service --name httpd quay.io/fedora/httpd-24
  • 이 컨테이너는 pod-web-service라는 Pod 내에서 실행됩니다.
  • 웹 서버 역할을 하며, Pod 내 다른 컨테이너와 네트워크를 공유합니다.
  1. 컨테이너 mariadb (MariaDB 데이터베이스 서버)
    • MySQL 유저, 패스워드, 데이터베이스 이름을 환경 변수로 설정하여 실행됩니다.
    • 호스트의 포트 13306을 컨테이너의 포트 3306에 매핑합니다. 
podman run -d --rm -p13306:3306 --name mariadb -e MYSQL\_USER=wordpress -e MYSQL\_PASSWORD=wordpress -e MYSQL\_DATABASE=wordpress quay.io/fedora/mariadb-105:latest

 

   3. 컨테이너 wordpress (워드프레스 웹 애플리케이션)

  • 워드프레스 웹 애플리케이션을 실행합니다.
  • 모든 노출된 포트를 호스트에 자동으로 매핑합니다. 
podman run -d --rm -P --name wordpress quay.io/redhattraining/wordpress:5.3.0

 

   4. 컨테이너 test-centos (CentOS)

  • CentOS 컨테이너를 실행하여, 다양한 테스트와 설정을 할 수 있습니다.
podman run -d --rm --name test-centos quay.io/centos/centos:stream9 sleep 10000

 

   5. Pod pod-web-service

  • 이 Pod는 여러 컨테이너를 포함하고 있으며, 모든 컨테이너는 네트워크와 볼륨을 공유합니다.
podman pod create --name pod-web-service

 

네트워크 및 포트 매핑

  1. 포트 매핑
    • 8080/TCP: 웹 서버(httpd)와 워드프레스(wordpress)가 이 포트를 통해 외부와 통신합니다.
    • 80/TCP: 호스트의 포트 80이 컨테이너의 포트 80으로 매핑되어 외부 트래픽을 처리합니다.
    • 13306/TCP: MariaDB 데이터베이스가 이 포트를 통해 외부와 통신합니다.
  2. 루프백 네트워크
    • Pod 내의 모든 컨테이너는 동일한 IP 주소(127.0.0.1)를 사용하여 서로 통신합니다.
    • 예를 들어, test-centos 컨테이너는 /etc/hosts 파일에 다른 컨테이너들의 IP 주소를 정의하여 wordpress, mariadb, httpd와 통신합니다.

데이터 흐름

  1. 사용자
    • 사용자는 웹 브라우저를 통해 호스트의 IP 주소와 포트를 사용하여 웹 애플리케이션에 접근합니다.
    • 예를 들어, http://HOST\_IP:18080을 통해 워드프레스에 접속할 수 있습니다.
  2. 개발자
    • 개발자는 CentOS 컨테이너에 접속하여 다양한 설정을 수행합니다.
    • 예를 들어, podman exec -it test-centos bash 명령어로 컨테이너에 접속합니다.

명령어 및 설정 설명

  1. Pod 생성
podman pod create --name pod-web-service
  1. 컨테이너 실행
  • HTTPD 웹 서버
podman run -d --rm --pod pod-web-service --name httpd quay.io/fedora/httpd-24
  • 워드프레스
podman run -d --rm -P --name wordpress quay.io/redhattraining/wordpress:5.3.0
  • MariaDB 데이터베이스
podman run -d --rm -p13306:3306 --name mariadb -e MYSQL\_USER=wordpress -e MYSQL\_PASSWORD=wordpress -e MYSQL\_DATABASE=wordpress quay.io/fedora/mariadb-105:latest
  • CentOS
podman run -d --rm --name test-centos quay.io/centos/centos:stream9 sleep 10000

 

이 그림과 설명을 통해 Podman을 사용하여 다양한 컨테이너를 실행하고, 네트워크와 포트를 설정하는 방법을 이해할 수 있습니다.

 


podman pod부터 정리하기

~

 

이 그림은 Podman을 사용하여 두 개의 컨테이너(Gogs와 Docker Registry)를 포함하는 Pod를 구성하는 방법을 설명하는 다이어그램입니다.  


주요 구성 요소

  1. 컨테이너 gogs (Git 서비스)
    • Gogs는 경량화된 Git 서비스입니다.
    • 이 컨테이너는 소스 코드 관리와 관련된 작업을 처리합니다.
    • 실행 명령어는 명시되어 있지 않지만 일반적으로 다음과 같은 명령어로 실행할 수 있습니다
podman run -d --name gogs gogs/gogs

 

2. 컨테이너 docker-registry (Docker 이미지 레지스트리)

  • Docker Registry는 Docker 이미지를 저장하고 배포하는 서비스입니다.
  • 이 컨테이너는 이미지 관리와 관련된 작업을 처리합니다.
  • 실행 명령어는 명시되어 있지 않지만 일반적으로 다음과 같은 명령어로 실행할 수 있습니다: 
podman run -d --name docker-registry registry:latest

 

3. Pod

  • Pod는 여러 컨테이너를 하나의 논리적 그룹으로 묶는 Kubernetes의 기본 단위입니다.
  • 이 Pod는 gogs와 docker-registry 컨테이너를 포함하고 있으며, 이 컨테이너들은 동일한 네트워크와 스토리지를 공유합니다.
  • 실행 명령어는 명시되어 있지 않지만 일반적으로 다음과 같은 명령어로 생성할 수 있습니다 
podman pod create --name my-pod

 

4. YOU!! (사용자)

  • 사용자는 이 Pod와 상호작용하는 엔터티로, Git 서비스와 Docker Registry를 사용하여 소스 코드를 관리하고 Docker 이미지를 저장하고 배포합니다.

5. GitHub Repository

  • 이 레포지토리는 Spring Petclinic 프로젝트를 포함하고 있으며, 사용자는 Gogs를 통해 이 소스 코드를 관리할 수 있습니다.
tangt64/spring-petclinic

 


연결 및 데이터 흐름

  1. Pod 내 컨테이너 간의 연결
    • Pod 내의 컨테이너들은 같은 네트워크와 스토리지를 공유하므로, gogs와 docker-registry 컨테이너 간의 통신이 가능합니다.
    • 예를 들어, Gogs 컨테이너에서 Docker Registry에 이미지를 푸시할 수 있습니다.
  2. 사용자와 Pod 간의 상호작용
    • 사용자는 Gogs 웹 인터페이스를 통해 소스 코드를 관리하고, Docker Registry를 통해 Docker 이미지를 저장하고 배포할 수 있습니다.
    • 사용자는 웹 브라우저를 통해 Gogs와 Docker Registry의 웹 인터페이스에 접근할 수 있습니다.
  3. GitHub 레포지토리와 Gogs 간의 연동
    • GitHub에 있는 tangt64/spring-petclinic 레포지토리를 Gogs에 복제하여 관리할 수 있습니다.
    • 이를 통해 사용자는 로컬 Git 서비스를 통해 소스 코드를 버전 관리하고 협업할 수 있습니다.

실행 예시

Pod와 컨테이너를 생성하고 실행하는 예시는 다음과 같습니다:

  1. Pod 생성
podman pod create --name my-pod

 

2. Gogs 컨테이너 실행 

podman run -d --pod my-pod --name gogs gogs/gogs

 

 

3. Docker Registry 컨테이너 실행이 그림과 설명을 통해 Podman을 사용하여 Gogs와 Docker Registry 컨테이너를 하나의 Pod로 묶어 관리하는 방법을 이해할 수 있습니다. 각 구성 요소가 어떻게 상호작용하며, 네트워크와 스토리지를 공유하는지 시각적으로 표현되어 있어 이해하기 쉽습니다.

podman run -d --pod my-pod --name docker-registry registry:latest

 

 

 


SSH 로그인 문제 해결

문제:

SSH 로그인이 안 될 때

해결 방법:

  1. 하이퍼바이저 콘솔에 로그인합니다.
  2. IP 주소가 변경되었는지 확인합니다.
  3. IP 주소가 변경되었으면 새 IP 주소로 접속합니다.
  4. 네트워크 연결을 재설정합니다:
nmcli con up eth0
반응형