Запустите несколько контейнеров podman, например docker-compose

Я нашел некоторую библиотеку, которая может заменить docker-compose в podman, но она все еще находится в стадии разработки, поэтому мой вопрос в том, как я могу запустить несколько контейнеров вместе, в настоящее время я использую свой bash скрипт для запуска всех, но это хорошо, если впервые не обновлять контейнер.

Я бы предпочел сначала, если есть какой-либо способ в podman, а не использовать какой-либо другой инструмент.

библиотека (в разработке) -> https://github.com/muayyad-alsadi/podman-compose


person GeoCom    schedule 05.07.2019    source источник
comment
Возможный дубликат Есть ли Podman Compose?   -  person tgogos    schedule 05.07.2019
comment
на самом деле это не так, поскольку я уже упоминал, что библиотека находится в стадии разработки. либо мне нужна замена, либо официальный способ сделать это.   -  person GeoCom    schedule 05.07.2019


Ответы (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, и фиктивному серверу identityd по адресу 8113.

person CieNTi    schedule 27.02.2021