Въведение в Подман

1. Въведение

В този урок ще разгледаме Podman (съкратено от „Pod Manager“), неговите характеристики и употреба.

2. Подман

Podman е инструмент за управление на контейнери с отворен код за разработване, управление и стартиране на OCI контейнери. Нека да разгледаме някои от предимствата на Podman в сравнение с други инструменти за управление на контейнери:

  • Изображенията, създадени от Podman, са съвместими с други инструменти за управление на контейнери . Изображенията, създадени от Podman, се придържат към OCI стандарта и следователно могат да бъдат изпратени към други регистри на контейнери като Docker Hub
  • Може да се изпълнява като нормален потребител, без да се изискват права на root. Когато работи като не-root потребител, Podman създава потребителско пространство от имена, вътре в което придобива root разрешение. Това му позволява да монтира файлови системи и да настройва необходимите контейнери
  • Осигурява възможност за управление на шушулки. За разлика от другите инструменти за изпълнение на контейнери, Podman позволява на потребителя да управлява шушулки (група от един или повече контейнери, които работят заедно). Потребителите могат да извършват операции като създаване, изброяване, проверка на шушулките

Има обаче определени ограничения за Podman:

  • Той работи само на базирани на Linux системи. Понастоящем Podman работи само на операционни системи, базирани на Linux, и няма обвивка за Windows и macOS.
  • Няма алтернатива на Docker Compose. Podman няма поддръжка за управление на множество контейнери локално, подобно на това, което прави Docker Compose. Внедряването на Docker Compose с помощта на беккенда на Podman се разработва като част от проекта podman-compose , но това все още работи.

3. Сравнение с Docker

Сега, след като разбрахме какво е Podman и какви са неговите предимства и ограничения, нека го сравним с Docker, един от най-често използваните инструменти за управление на контейнери.

3.1. Интерфейс на командния ред (CLI)

Podman предлага същия набор от команди, изложени от клиента на Docker. С други думи, има едно към едно съпоставяне между командите на тези две помощни програми.

Командите като podman ps и podman изображения обаче няма да показват контейнерите или изображенията, създадени с помощта на Docker. Това е така, защото локалното хранилище на Podman е / var / lib / контейнери, за разлика от / var / lib / docker, поддържано от Docker.

3.2. Модел на контейнера

Docker използва архитектура клиент-сървър за контейнерите, докато Podman използва традиционния fork-exec модел, разпространен в Linux процесите. Контейнерите, създадени с помощта на Podman, са дъщерни процеси на родителския процес Podman. Това е причината, че когато се изпълнява командата за версия както за Docker, така и за Podman, Docker изброява версиите както на клиент, така и на сървър, докато Podman изброява само своята версия.

Примерен изход за версия на докер :

Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:11:19 2017 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:09:53 2017 OS/Arch: linux/amd64 Experimental: false

Примерен изход за версия на podman :

Version: 0.3.2-dev Go Version: go1.9.4 Git Commit: "4f4a78abb40fa0e8407e8a55d5a67a2650d8fd96" Built: Mon Mar 5 11:10:35 2018 OS/Arch: linux/amd64

Тъй като самият Podman работи като процес, той не изисква никакви демонови процеси във фонов режим. За разлика от Podman, Docker изисква демонен процес, Docker daemon, за да координира заявките за API между клиента и сървъра .

3.3. Режим без корени

Както бе споменато по-рано, Podman не се нуждае от root достъп за изпълнение на своите команди. Docker, от друга страна, като зависи от процеса на демона, изисква root права или изисква потребителят да бъде част от групата на docker, за да може да изпълнява командите на Docker без права на root .

$ sudo usermod -aG docker $USER

4. Инсталиране и използване

Нека започнем с инсталирането на Podman. Командата podman info показва системната информация за Podman и помага да се провери състоянието на инсталацията.

$ podman info

Тази команда показва информацията, свързана с хоста, като версията на ядрото, използваното и налично място за суап, както и информацията, свързана с Podman, като регистри, до които има достъп за изтегляне и изпращане на изображения, драйвер за съхранение, който използва, място за съхранение и други:

host: MemFree: 546578432 MemTotal: 1040318464 SwapFree: 4216320000 SwapTotal: 4216320000 arch: amd64 cpus: 2 hostname: base-xenial kernel: 4.4.0-116-generic os: linux uptime: 1m 2.64s insecure registries: registries: [] registries: registries: - docker.io - registry.fedoraproject.org - registry.access.redhat.com store: ContainerStore: number: 0 GraphDriverName: overlay GraphOptions: null GraphRoot: /var/lib/containers/storage GraphStatus: Backing Filesystem: extfs Native Overlay Diff: "true" Supports d_type: "true" ImageStore: number: 0 RunRoot: /var/run/containers/storage

Нека да разгледаме някои от основните команди на Podman.

4.1. Създаване на изображение

Първо ще разгледаме създаването на изображение с помощта на Podman. Нека започнем със създаването на Dockerfile със следното съдържание:

FROM centos:latest RUN yum -y install httpd CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] EXPOSE 80 

Сега нека създадем изображението с помощта на командата build :

$ podman build .

Тук първо издърпваме основното изображение на CentOS, инсталираме Apache върху него и след това го изпълняваме като процес на преден план с изложен порт 80. Можем да осъществим достъп до сървъра на Apache, като стартираме това изображение и картографираме изложения порт към хост порт.

Командата за изграждане рекурсивно предава всички папки, налични в контекстната директория. Текущата работна директория по подразбиране става контекст на компилация, когато не е посочена директория. Следователно е препоръчително да нямате файлове и папки, които не са необходими за създаването на изображение, в контекстната директория.

4.2. Списък с наличните изображения

Командата podman images изброява всички налични изображения. Той също така поддържа различни опции за филтриране на изображенията.

$ podman images

This command lists all the images available in the local repository. It contains the information on which repository the image was pulled from, the tag, its image id, created time and size.

REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/centos latest 0f3e07c0138f 2 months ago 227MB  
    

4.3. Running Images

The run command creates a container of a given image and then runs it. Let's run the CentOS image we have created earlier

$ podman run -p 80:80 -dit centos

This command first checks if there is a local image available for CentOS. If the image isn't present locally, it tries to pull the image from the registries that were configured. If the image isn't present in the registries, it shows an error about unable to find the image.

The above run command specifies to map the exposed 80 port of the container to the port 80 of the host and the dit flag specifies to run the container in detached and interactive mode. The id of the container created will be the output.

4.4. Deleting Images

The rmi command removes the images present in the local repository. Multiple images can be removed by providing their ids as space-separated in the input. Specifying the -a flag removes all the images

$ podman rmi 785188cd988c

4.5. Listing the Containers

All the available containers including the ones which aren't running can be listed using the ps -a command. Similar to the images command, this can also be used with various options.

$ podman ps -a

The output for the above command lists all the containers with the information such as image it was created from, the command used to launch it, it's status, ports it's running on and the name assigned to it.

CONTAINER ID IMAGE COMMAND CREATED AT STATUS PORTS NAMES eed30719cd37 centos /bin/bash 2019-12-09 02:57:37 +0000 UTC Up 14 minutes ago 0.0.0.0:80->80/udp, 0.0.0.0:80->80/tcp reverent_liskov

4.6. Deleting Containers

The rm command removes the containers. This command does not remove the containers in running or paused state. They need to be first stopped and then removed.

$ podman stop eed30719cd37 $ podman rm eed30719cd37

4.7. Creating Pods

The pod create command creates a pod. The create command supports different options.

$ podman pod create

The pod create command creates a pod with an infra container by default associated with it unless explicitly set with infra flag as false.

$ podman pod create --infra = false

Infra container allows Podman to connect various containers in the pod.

4.8. Listing Pods

The pod list command displays all the available pods

$ podman pod list

The output of this command displays the information such as the pod id, its name, number of associated containers, the id of the infra container if available:

POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 7e0a68528aed gallant_raman Running 5 seconds ago 1 c6d06673c667

All the available Podman commands and their usage can be found in the official documentation.

5. Conclusion

In this tutorial, we've looked at the basics of Podman and its features, its comparison to Docker and a few of the commands available.

As usual, the code sample used in this article is available over GitHub.