【问题标题】:Run multiple podman containers, like docker-compose运行多个 podman 容器,例如 docker-compose
【发布时间】:2019-11-15 18:52:28
【问题描述】:

我在 podman 中找到了一些可以替换 docker-compose 的库,但它仍在开发中,所以我的问题是如何同时运行多个容器,目前我我正在使用我的 bash 脚本来运行所有脚本,但第一次不更新容器就很好。

如果在 podman 中有任何方法,我一开始更喜欢使用其他工具。

库(正在开发中)--> https://github.com/muayyad-alsadi/podman-compose

【问题讨论】:

  • 实际上并非如此,正如我提到的图书馆正在开发中。要么我需要更换或官方的方式来做。

标签: docker docker-compose containers podman


【解决方案1】:

我认为Kubernetes Pod concept 是您正在寻找的东西,或者至少它允许您按照完善的标准一起运行多个容器

我的第一个方法和你一样,把所有事情都作为一个命令来查看它的工作,比如:

# 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

现在您有了一个 pod,您可以使用 podman generate kube my-pod > my-pod.yaml 将其导出为 Pod 清单。

当您尝试自己的示例时,您会发现并非所有内容都按照您的预期导出(例如网络或卷),但至少它为您提供了一个可以继续工作的基础。

假设相同的示例,在 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

您将能够在 8080 访问由 nginx 提供的“Hello World”,在 8113 访问虚拟 identd 服务器。

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2021-12-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多