ota*_*fcs 15 containers docker docker-compose podman
我最近发现了有关Podman(https://podman.io)的信息。我有一种使用Linux fork进程而不是Daemon的方法,而不必使用root运行。
但是我非常习惯使用docker-compose来协调机器上运行的容器(在生产中,我们使用kubernetes)。我真的很喜欢。
所以我正在尝试替换docker-compose。我将尝试保持docker-compose并使用podman作为docker的别名,因为Podman使用与docker相同的语法:
别名docker = podman
能行吗 你能建议其他工具吗?如果可能的话,我真的打算保留docker-compose.yml文件。
Wal*_*lid 15
是的,现在可行,检查podman-compose,这是一种方法,另一种方法是使用Kompose将docker-compose yaml文件转换为kubernetes部署。JérômePetazzoni @jpetazzo上有一篇博客文章:从docker-compose到kubernetes部署
要求:Podman 版本 >= 3.2.1(2021 年 6 月发布)
安装可执行文件docker-compose
curl -sL -o ~/docker-compose https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)
chmod 755 ~/docker-compose
Run Code Online (Sandbox Code Playgroud)
或者,您也可以在容器映像中运行docker-compose(见下文)。
跑
systemctl --user start podman.socket
Run Code Online (Sandbox Code Playgroud)
设置环境变量 DOCKER_HOST
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
Run Code Online (Sandbox Code Playgroud)
跑
~/docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
要求:Podman 版本 >= 3.0(2021 年 2 月发布)
遵循相同的程序,但删除标志 --user
systemctl start podman.socket
Run Code Online (Sandbox Code Playgroud)
使用容器镜像docker.io/docker/compose运行 docker -compose
podman \
run \
--rm \
--detach \
--env DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock \
--security-opt label=disable \
--volume $XDG_RUNTIME_DIR/podman/podman.sock:$XDG_RUNTIME_DIR/podman/podman.sock \
--volume $(pwd):$(pwd) \
--workdir $(pwd) \
docker.io/docker/compose \
--verbose \
up -d
Run Code Online (Sandbox Code Playgroud)
(标志--verbose
是可选的)
在一行上带有短命令行选项的相同命令:
podman run --rm -d -e DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock --security-opt label=disable -v $XDG_RUNTIME_DIR/podman/podman.sock:$XDG_RUNTIME_DIR/podman/podman.sock -v $(pwd):$(pwd) -w $(pwd) docker.io/docker/compose --verbose up -d
Run Code Online (Sandbox Code Playgroud)
关于 SELINUX:从安全角度来看,使用 SELINUX 运行 Podman 更可取,但我没有让它在 Fedora 34 计算机上运行,所以我通过添加命令行选项禁用了 SELINUX
--security-opt label=disable
检查 Docker REST API 是否正常工作的最小检查:
$ curl -H "Content-Type: application/json" \
--unix-socket $XDG_RUNTIME_DIR/podman/podman.sock \
http://localhost/_ping
OK$
Run Code Online (Sandbox Code Playgroud)
例如,如果您的任何docker-compose.yaml或Dockerfile文件包含一个简短的容器映像名称
$ grep image: docker-compose.yaml
image: mysql:8.0.19
$
Run Code Online (Sandbox Code Playgroud)
$ grep FROM Dockerfile
FROM python:3.9
$
Run Code Online (Sandbox Code Playgroud)
编辑文件以使用整个容器映像名称
$ grep image: docker-compose.yaml
image: docker.io/library/mysql:8.0.19
$
Run Code Online (Sandbox Code Playgroud)
$ grep FROM Dockerfile
FROM docker.io/library/python:3.9
$
Run Code Online (Sandbox Code Playgroud)
大多数情况下,短名称已被用于引用DockerHub 官方映像
(目录),因此一个很好的猜测是在容器映像名称前加上docker.io/library/
目前有许多不同的容器镜像注册中心,不仅仅是 DockerHub (docker.io)。因此,编写整个容器映像名称是一个很好的做法。Podman 可能会抱怨,这取决于 Podman 的配置方式。
如果例如
$ grep -A1 ports: docker-compose.yml
ports:
- 80:80
$
Run Code Online (Sandbox Code Playgroud)
编辑docker-compose.yaml使主机端口号 >= 1024,例如8080
$ grep -A1 ports: docker-compose.yml
ports:
- 8080:80
$
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是调整net.ipv4.ip_unprivileged_port_start与sysctl
(参见Rootless Podman 的缺点)
大多数 Linux 发行版使用 Systemd,您最好通过“启动”Podman 套接字来启动 Podman 服务(提供 REST API)
systemctl --user start podman.socket
Run Code Online (Sandbox Code Playgroud)
或者
systemctl start podman.socket
Run Code Online (Sandbox Code Playgroud)
但是如果缺少 Systemd,您也可以直接启动 Podman 服务
podman system service --time 0 unix:/some/path/podman.sock
Run Code Online (Sandbox Code Playgroud)
Systemd 提供了额外的好处,即 Podman 服务通过 Systemd 套接字激活按需启动,并在一段时间不活动后停止。
与 Docker 的不同之处在于,当将 docker-compose 与 Podman 一起使用时,不支持与 Swarm 相关的功能。
参考:
归档时间: |
|
查看次数: |
6283 次 |
最近记录: |