타닥타닥 개발자의 일상

podman 명령어로 linux에 contianer 설치하기 본문

카테고리 없음

podman 명령어로 linux에 contianer 설치하기

NomadHaven 2023. 5. 19. 17:38

1.설치

dnf install podman -y
adduser user3
echo 1111 | passwd --stdin user3
ssh user3@localhost

-dnf 명령어로 podmad 설치

-컨테이너 사용할 유저 user3 생성

-user3의 비밀번호 1111으로 변경

-user3의 계정으로 접속

 

#user3으로 로그인한 상태
podman pull quay.io/centos7/httpd-24-centos7:latest
podman run -d -p8080:8080 --name container-web quay.io/centos7/httpd-24-centos7:latest
podman ps
curl localhost:8080

-podman pull 명령어로 컨테이너 이미지 불러오기

*컨테이너 이미지는 컨테이너화된 애플리케이션을 실행하기 위한 실행 환경과 애플리케이션 코드 및 종속성을 포함하는 패키지. 이미지는 애플리케이션을 실행하는 데 필요한 모든 파일 시스템, 라이브러리, 실행 파일, 환경 변수 등을 하나의 단위로 묶어놓은 것.

 

 

-podman run  명령어 이용해서 컨테이너 실행.

-d 옵션으로 컨테이너 백그라운드에서 실행

-p 옵션으로 호스트의 8080 포트와 컨테이너 8080포트 연결. 이를 통해 호스트 8080 포트로 들어오는 요청이 컨테이너 8080포트로 전달.

--name 으로 실행중인 컨테이너에 "container-web" 이름 지정.

quay.io/centos7/httpd-24-centos7:latest 실행할 컨테이너 이미지 이름

 

-podman ps로 상태 확인하기

이렇게 컨테이너 이름이 보여아지 잘 구성된것

-8080 포트와 잘 연결되는지 확인하기

이런식으로 인덱스 파일 같은게 출력되어야지 잘 연결되는 것

 

2. 컨테이너를 사용자 최적화

#user3으로 로그인한 상태
podman generate systemd --new --files --name container-web
mkdir -p ~/.config/systemd/user
cp container-web.service ~/.config/systemd/user
systemctl daemon-reload --user
systemctl enable --now container-web --user

-podman generate systemd ~ 명령어로  Podman 컨테이너를 시스템 서비스로 실행하기 위한 systemd 유닛 파일을 생성.

Podman은 컨테이너를 실행하는 동안 시스템 서비스로 관리할 수 있도록 systemd 유닛 파일을 생성하는 기능을 제공. 이를 통해 컨테이너가 시스템 부팅 시 자동으로 시작되거나, 장애가 발생했을 때 재시작되는 등의 이점을 얻는다.

 

해당 명령어를 실행하면 container-web이라는 이름의 새로운 유닛파일이 생성되고 해당 파일은 /etc/systemd/system

디렉토리에 저장.

 

systemd를 사용해서 컨테이너 시작, 중지, 재시작 가능.

 

-mkdir 명령어로 ~/.config/systemd/user의 디렉토리 생성. 생성되니 디렉토리는 특정한 사용자에서(user3) systemd 서비스 파일 관리하기 위해 사용.

 

-cp~ 명령어로 container-web.service 파일을 위에서 생성한 디렉토리  ~/.config/systemd/user 에 복사. 이 역시  container-web.service 파일을 특정한 사용자(user3) systemd 서비스로 등록하기 위한 작업.

 

-systemctl deamon-reload~ 명령어로 현재 사용자(user3)의 systemd  인스턴스에 대한 구성파일 변경사항을 다시 로드. 이 명령어 실행시 변경된 유닛파일 내용 적용된다. systemd가 수정된 구성을 인식하고 해당 유닛 사용할 수 있게 된다.

 

-systemctl enable~  명령어로 contaienr-web 서비스를 사용자 레벨에서 활성화 하고, 즉시 시작해도록 하는 명렁어. 이를 통해 container-web 서비스가 사용자 세션에서 자동으로 시작되도록 설정.

 

 

 

#root계정으로 다시 로그인 한뒤, 아래의 명령문 실행

loginctl enable-linger user3

loginctl enable-linger containeruser 명령어는 특정 사용자인 user3이 로그아웃 상태일 때에도 시스템에 로그인된 상태를 유지하도록 설정하는 명령어.

 

linger 옵션은 사용자의 로그인 세션을 유지하는 기능을 활성화.

일반적으로 로그아웃한 사용자는 시스템이 재부팅되거나 로그아웃된 상태에서 실행 중인 서비스 또는 프로세스가 종료됨. 그러나 linger를 사용하면 사용자가 로그아웃한 후에도 해당 사용자의 서비스 또는 프로세스가 계속 실행될수 있다.

 

위의 명령어를 통해 user3이라는 사용자 계정에 대해, linger를 활성화하겠다는 의미.

이를 통해 해당 사용자가 로그아웃된 상태에서도 설정된 서비스나 프로세스가 계속 실행될 수 있다.

 

 

3. container 서비스 잘 작동하는지 확인하기

systemctl status container-web --user
curl localhost:8080

systemctl staus 명령어로 contianer-web 서비스의 상태 확인.

Active 상태를 확인하니 잘 작동되는게 확인 된다.

curl 명령문으로 포트 8080에 잘 연결되는 것도 확인하면

컨테이너 구성 완료!

 

 


 

다른 방법으로 구성하기

 

#user3 로그인 한 상태에서 구성

#wget 명령어는 주어진 URL에서 파일을 다운로드하는 명령어
dnf install wget

wget https://raw.githubusercontent.com/tangt64/training_memos/main/opensource/linux-101/materials/Containerfile


#현재 디렉토리(.)에 위치한 Dockerfile을 사용하여 컨테이너 이미지를 빌드. 
#-t 옵션은 이미지에 태그를 지정하는 옵션으로, web-container라는 이름으로 이미지를 태그.
#빌드된 이미지는 로컬 컨테이너 이미지 저장소에 저장, web-container라는 태그로 해당 이미지를 참조.
podman build . -t web-container

#현재 시스템에 저장된 컨테이너 이미지 목록을 보여주는 명령어
podman images

mkdir htdocs/

echo "hello systemd service container" > htdocs/index.html

#"new-web-container"라는 이름으로 "localhost/web-container" 이미지를 기반으로 컨테이너를 생성,실행. 
#컨테이너 내부의 "/var/www/html/" 디렉토리는 호스트의 "/home/user3/htdocs/" 디렉토리와 연결. 
#웹 서비스를 호스트에서 컨테이너로 전달. 
#호스트의 8081 포트는 컨테이너의 80 포트와 연결되어 웹 서비스에 접근.
podman run -d --name new-web-container -v /home/user3/htdocs/:/var/www/html/:Z -p 8081:80 localhost/web-container

curl http://localhost:8081

curl 명령어 실행시  hello systemd service container 가 잘 출력되어야 한다.

 

* 다운 받은 파일 링크 

https://raw.githubusercontent.com/tangt64/training_memos/main/opensource/linux-101/materials/Containerfile

Comments