3

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

如果在podman中有任何方法,而不是使用其他工具,我首先更喜欢。

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

4

1 回答 1

2

我认为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

现在您有了一个 pod,您可以使用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

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

于 2021-02-27T06:17:27.797 回答