我在podman中找到了一些可以替换docker -compose的库,但它仍在开发中,所以我的问题是如何一起运行多个容器,目前我正在使用我的 bash 脚本来运行所有容器,但它只是第一次很好不更新容器。
如果在podman中有任何方法,而不是使用其他工具,我首先更喜欢。
我在podman中找到了一些可以替换docker -compose的库,但它仍在开发中,所以我的问题是如何一起运行多个容器,目前我正在使用我的 bash 脚本来运行所有容器,但它只是第一次很好不更新容器。
如果在podman中有任何方法,而不是使用其他工具,我首先更喜欢。
我认为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 服务器。