Запускать несколько контейнеров 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.

Другие вопросы по тегам