1. 개요

podman 을 이용한 Container 생성과 비-루트 계정으로 서비스를 등록해본다.



2. 컨테이너 생성

2.1 이미지 검색

# podman search docker.io/httpd
INDEX       NAME                                              DESCRIPTION                                       STARS   OFFICIAL   AUTOMATED
docker.io   docker.io/library/httpd                           The Apache HTTP Server Project                    3802    [OK]
docker.io   docker.io/centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or bui...   40
docker.io   docker.io/manageiq/httpd                          Container with httpd, built on CentOS for Ma...   1                  [OK]
docker.io   docker.io/clearlinux/httpd                        httpd HyperText Transfer Protocol (HTTP) ser...   1
... skip ...

사용할(띄울) 이미지를 검색한다.

여기서는 httpd 에서 가장 낮은 버전(아무거나) 을 활용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# skopeo inspect docker://docker.io/library/httpd
{
    "Name": "docker.io/library/httpd",
    "Digest": "sha256:0c8dd1d9f90f0da8a29a25dcc092aed76b09a1c9e5e6e93c8db3903c8ce6ef29",
    "RepoTags": [
        "2",
        "2-alpine",
        "2-alpine3.13",
        "2-alpine3.14",
        "2-alpine3.15",
        "2-bullseye",
        "2-buster",
... skip ...

inspect 명령을 사용하여 찾은 이미지에서 포함된 릴리즈들을 모두 확인할 수 있다.

우리는 2-alpine3.15 를 아래에서 사용하기로 하자.


2.2 이미지 다운로드

1
# podman pull docker.io/library/httpd:"2-alpine3.14"


2.3 컨테이너 실행

1
2
# mkdir /html
# echo "Hello World" > /html/index.html

옵션으로, 호스트 디렉토리를 컨테이너에게 전달하기 위한 환경

1
# podman run --detach --name "myweb" -p "8080:80" -v "/html:/usr/local/apache2/htdocs:Z" -e "BLOGGER=DHKIM" -e "GIT=dhkim900331" docker.io/library/httpd

_–detach : 백그라운드 실행

–name : 컨테이너 명

-p : 호스트 8080 port를 컨테이너 80 port로 forwarding

-v : 호스트 /html 디렉토리를 컨테이너의 /usr/…/htdocs 디렉토리로 연결

_ ㄴ Z 옵션은 SELinux 옵션. 주지 않으면 SELinux policy 다를 경우 권한 문제 발생_

_-e : 환경 변수를 key:value pair로 전달__

마지막 argument는 아까 받은 이미지

1
2
3
# podman ps -a
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS                 NAMES
3c6ad1ea13e3  docker.io/library/httpd:latest  httpd-foreground  3 minutes ago  Up 3 minutes ago  0.0.0.0:8080->80/tcp  myweb

컨테이너 실행 중인 상태(STATUS를 보고 판단)

1
2
3
# podman exec -it myweb /bin/bash
root@3c6ad1ea13e3:/usr/local/apache2# hostname
3c6ad1ea13e3

컨테이너 내부로 접속하여 hostname 명령을 쳐보았다.


3. 비-루트 계정 서비스 등록

  • 여기서부터는 비-루트 계정으로 로그인하면서 진행한다.

    • 앞서 컨테이너 생성 시 아래에서 사용할 계정과 다르면 컨테이너를 지우고 여기 계정으로 다시 생성한다.
  • systemctl –user 옵션을 사용한다.

    • 반드시 ssh @ 방식으로 로그인 해야한다.

    • 그렇지 않으면 다음 처럼 bus에 연결하지 못한다.

      1
      2
      
      # systemctl --user
      Failed to connect to bus: 그런 파일이나 디렉터리가 없습니다
      


1
# ssh test@localhost

컨테이너를 일반계정 test 에 서비스 등록하기 위하여 ssh 로그인

1
2
# mkdir -p ~/.config/systemd/user
# podman generate systemd myweb --new > ~/.config/systemd/user/container-myweb.service

현재 실행중인 myweb 컨테이너를 service 파일로 생성

1
2
3
# podman stop myweb
# podman rm myweb
# systemctl --user enable --now container-myweb.service

myweb 컨테이너를 정지/삭제 하고,

user 서비스를 재부팅 시 자동 시작되도록 및 지금 당장 시작하도록 설정한다.