[컴] windows 에서 podman desktop 사용

 

도커 / 파드맨 /

windows 에서 podman desktop 사용

podman desktop 도 docker desktop 과 같다. wsl 로 linux vm image 를 하나 만들고, 그 안에서 container image들을 설치하고 실행시켜 준다.

좀더 사용해봐야 겠지만, 현재로선 podman desktop 을 사용하는 것이 podman-compose 를 사용하기는 조금 불편한 부분이 있지만, 충분히 docker desktop 을 대체할 수 있지 않을까 싶다.

설치

podman 이 windows 에 설치되면, CLI 와 guest Linux system 을 제공하게 된다. 이 guest Linux system 이 podman machine 이다. 이 podman machine 하나가 WSLv2 의 distribution 중 하나이다.(wsl -l 하면 볼 수 있다.)

그래서 이 podman 배포판에 접근하려면, wsl command 를 사용해도 되고, podman machine ssh 를 사용해도 된다.

  1. 설치
  2. podman machine init
  3. podman machine start

for rootful images

기본으로 만들어진 podman machine (wsl image) 은 root 권한이 아닌 상태로 동작한다. 그래서 새롭게 podman machine 을 만들면, 그 때 root 권한을 사용하도록 설정해서 만들수 있다.

Settings --> Resources --> Create new Podman Machine --> Machine with root privileges(Enabled)

그냥 root 권한이 아닌 podman machine 에서도 sudo 를 사용해서 image 를 만들고 사용할 수 있으나, podman desktop 에서 볼 수는 없다.

podman info

podman info 를 하면 아래처럼 보인다.

c:\Program Files\RedHat\Podman>podman info
host:
  arch: amd64
  buildahVersion: 1.30.0
  cgroupControllers: []
  cgroupManager: cgroupfs
  cgroupVersion: v1
  conmon:
    package: conmon-2.1.7-2.fc37.x86_64
    path: /usr/bin/conmon
    version: 'conmon version 2.1.7, commit: '
  cpuUtilization:
    idlePercent: 99.87
    systemPercent: 0.1
    userPercent: 0.02
  cpus: 16
  databaseBackend: boltdb
  distribution:
    distribution: fedora
    variant: container
    version: "37"
  eventLogger: journald
  hostname: DESKTOP-TEST
  idMappings:
    gidmap:
    - container_id: 0
      host_id: 1000
      size: 1
    - container_id: 1
      host_id: 524288
      size: 65536
    uidmap:
    - container_id: 0
      host_id: 1000
      size: 1
    - container_id: 1
      host_id: 524288
      size: 65536
  kernel: 5.10.102.1-microsoft-standard-WSL2
  linkmode: dynamic
  logDriver: journald
  memFree: 26482446336
  memTotal: 26834403328
  networkBackend: netavark
  ociRuntime:
    name: crun
    package: crun-1.8.5-1.fc37.x86_64
    path: /usr/bin/crun
    version: |-
      crun version 1.8.5
      commit: b6f80f766c9a89eb7b1440c0a70ab287434b17ed
      rundir: /run/user/1000/crun
      spec: 1.0.0
      +SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +LIBKRUN +WASM:wasmedge +YAJL
  os: linux
  remoteSocket:
    exists: true
    path: /run/user/1000/podman/podman.sock
  security:
    apparmorEnabled: false
    capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
    rootless: true
    seccompEnabled: true
    seccompProfilePath: /usr/share/containers/seccomp.json
    selinuxEnabled: false
  serviceIsRemote: true
  slirp4netns:
    executable: /usr/bin/slirp4netns
    package: slirp4netns-1.2.0-8.fc37.x86_64
    version: |-
      slirp4netns version 1.2.0
      commit: 656041d45cfca7a4176f6b7eed9e4fe6c11e8383
      libslirp: 4.7.0
      SLIRP_CONFIG_VERSION_MAX: 4
      libseccomp: 2.5.3
  swapFree: 7516192768
  swapTotal: 7516192768
  uptime: 0h 3m 41.00s
plugins:
  authorization: null
  log:
  - k8s-file
  - none
  - passthrough
  - journald
  network:
  - bridge
  - macvlan
  - ipvlan
  volume:
  - local
registries:
  search:
  - docker.io
store:
  configFile: /home/user/.config/containers/storage.conf
  containerStore:
    number: 0
    paused: 0
    running: 0
    stopped: 0
  graphDriverName: overlay
  graphOptions: {}
  graphRoot: /home/user/.local/share/containers/storage
  graphRootAllocated: 269490393088
  graphRootUsed: 703053824
  graphStatus:
    Backing Filesystem: extfs
    Native Overlay Diff: "false"
    Supports d_type: "true"
    Using metacopy: "false"
  imageCopyTmpDir: /var/tmp
  imageStore:
    number: 0
  runRoot: /run/user/1000/containers
  transientStore: false
  volumePath: /home/user/.local/share/containers/storage/volumes
version:
  APIVersion: 4.5.0
  Built: 1681486976
  BuiltTime: Sat Apr 15 00:42:56 2023
  GitCommit: ""
  GoVersion: go1.19.7
  Os: linux
  OsArch: linux/amd64
  Version: 4.5.0


c:\Program Files\RedHat\Podman>

환경설정

아래 경로에서 configuration file 을 확인할 수 있다.

  • c:\Users\<user>\.config\containers\podman\machine\wsl\podman-machine-default.json

값의 변경은 다음처럼 podman machine을 이용해서 할 수 있다.

podman machine set --rootful=false

distro image path 변경

podman image 의 path 만 변경하면 된다. 이 안에 image 들이 저장되기 때문이다.

set tarFile=d:\a\vms\podman\podman-desktop-data.tar
set distro=podman-machine-default
set newPath=d:\a\vms\podman\data

wsl --export %distro% %tarFile%
wsl --unregister %distro%
wsl --import %distro% %newPath% %tarFile% --version 2

del %tarFile%

wsl --distribution %distro%

podman-compose

docker-compose대신에 podman-compose 를 사용할 수 있다. image 에 접속해서 podman-compose up 을 사용하면 된다. 그러면 podman desktop 에도 알아서 잡힌다. 일단 한번 잡히면, 계속 desktop 을 사용해서 실행할 수 있다.

podman machine ssh
sudo dnf install podman-compose

podman-compose -f compose.yaml up -d

See Also

  1. Run Docker in WSL (Windows 10/11) without Docker Desktop | by Sung Kim | Geek Culture | Medium

Reference

  1. 쿠…sal: [컴] docker 의 image path 변경하기
  2. 쿠…sal: [컴] wsl command
  3. podman-machine-set — Podman documentation

댓글 없음:

댓글 쓰기