Запускать несколько контейнеров podman, например, docker-compose
Я нашел некоторую библиотеку, которая может заменить docker-compose в podman, но она все еще находится в стадии разработки, поэтому мой вопрос в том, как я могу запустить несколько контейнеров вместе, в настоящее время я использую свой скрипт bash для запуска всего, но это хорошо только в первый раз не обновляет контейнер.
Сначала я бы предпочел, чтобы в podman был какой-то способ, чем использовать какой-либо другой инструмент.
библиотека (в разработке) -> https://github.com/muayyad-alsadi/podman-compose
1 ответ
Я думаю, что концепция Kubernetes Pod — это то, что вы ищете, или, по крайней мере, она позволяет вам запускать несколько контейнеров вместе , следуя устоявшемуся стандарту.
Мой первый подход был похож на ваш: делать все как команду, чтобы увидеть, как она работает, что-то вроде:
# Create a pod, publishing port 8080/TCP from internal 80/TCP
$ podman pod create \
--name my-pod \
--publish 8080:80/TCP \
--publish 8113:113/TCP
# Create a first container inside the pod
$ podman run --detach \
--pod my-pod \
--name cont1-name \
--env MY_VAR="my val" \
nginxdemos/hello
# Create a second container inside the pod
$ podman run --detach \
--pod my-pod \
--name cont2-name \
--env MY_VAR="my val" \
greboid/nullidentd
# Check by
$ podman container ls; podman pod ls
Теперь, когда у вас есть модуль, вы можете экспортировать его как манифест модуля, используя
podman generate kube my-pod > my-pod.yaml
.
Как только вы попробуете свои собственные примеры, вы увидите, что не все экспортируется так, как вы ожидаете (например, сети или тома), но, по крайней мере, это служит вам базой, на которой вы можете продолжать работу.
Предполагая тот же пример, в манифесте YAML Pod это выглядит так:
my-pod.yaml
:
# Created with podman-2.2.1
apiVersion: v1
kind: Pod
metadata:
labels:
app: my-pod
name: my-pod
spec:
containers:
# Create the first container: Dummy identd server on 113/TCP
- name: cont2-name
image: docker.io/greboid/nullidentd:latest
command: [ "/usr/sbin/inetd", "-i" ]
env:
- name: MY_VAR
value: my val
# Ensure not to overlap other 'containerPort' values within this pod
ports:
- containerPort: 113
hostPort: 8113
protocol: TCP
workingDir: /
# Create a second container.
- name: cont1-name
image: docker.io/nginxdemos/hello:latest
command: [ "nginx", "-g", "daemon off;" ]
env:
- name: MY_VAR
value: my val
# Ensure not to overlap other 'containerPort' values within this pod
ports:
- containerPort: 80
hostPort: 8080
protocol: TCP
workingDir: /
restartPolicy: Never
status: {}
Когда этот файл используется следующим образом:
# Use a Kubernetes-compatible Pod manifest to create and run a pod
$ podman play kube my-pod.yaml
# Check
$ podman container ls; podman pod ls
# Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a53a5c0f076 docker.io/nginxdemos/hello:latest nginx -g daemon o... 8 seconds ago Up 6 seconds ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8113->113/tcp my-pod-cont1-name
351065b66b55 docker.io/greboid/nullidentd:latest /usr/sbin/inetd -... 10 seconds ago Up 6 seconds ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8113->113/tcp my-pod-cont2-name
e61c68752e35 k8s.gcr.io/pause:3.2 14 seconds ago Up 7 seconds ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8113->113/tcp b586ca581129-infra
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
b586ca581129 my-pod Running 14 seconds ago e61c68752e35 3
Вы сможете получить доступ к «Hello World», обслуживаемому nginx по адресу 8080, и к фиктивному серверу identd по адресу 8113.