Docker迁移至Podman及与Systemd和Kubernetes交互指南
立即解锁
发布时间: 2025-08-14 00:33:28 阅读量: 8 订阅数: 14 


Podman for DevOps: 使用容器化技术革新
### Docker迁移技巧及与systemd和Kubernetes交互指南
#### 1. Docker迁移至Podman
在从Docker迁移到Podman时,`podman-compose` 是一个有用的工具。使用以下命令可以从包含必要配置和 `docker-compose.yaml` 文件的目录创建一个栈:
```bash
$ podman-compose up
```
该命令的输出与 `docker-compose` 提供的输出非常相似。若要关闭栈,只需运行:
```bash
$ podman-compose down
```
不过,`podman-compose` 项目尚未完全实现与 `docker-compose` 的功能对等,但它是一个值得关注和贡献的项目,有助于未来实现独立发展的Podman原生实用工具。
#### 2. 与systemd和Kubernetes交互的准备
在深入了解与systemd和Kubernetes的交互之前,需要满足一些技术要求:
- 一台已安装并正常运行Podman的机器。示例虽在Fedora 34或更高版本系统上执行,但也可在其他操作系统上重现。
- 对容器管理、存储实现和镜像推送等相关知识有较好的理解。
- 具备系统管理和Kubernetes容器编排的基础知识。
- 在涉及Kubernetes的示例中,需要使用Podman 4.0.0版本,因为3.4.z版本存在阻止容器环境变量创建的bug。
#### 3. 主机操作系统的先决条件设置
容器的诞生是为了简化和创建可分布在独立主机上的系统服务。我们将学习如何在容器中运行MariaDB和GIT服务,并通过Systemd和 `systemctl` 命令来管理这些容器。
Systemd是Linux的系统和服务管理器,作为启动时的第一个进程(PID为1)运行,充当初始化系统,负责启动和维护用户空间服务。Fedora 34及更高版本默认启用并运行Systemd,可使用以下命令检查其运行状态:
```bash
# systemctl is-system-running
running
```
#### 4. 创建systemd单元文件
Systemd单元文件定义了服务的启动和运行方式。单元文件以简单的文本文件形式存在,描述了服务的行为、前置和后置依赖等信息。系统中单元文件的存储位置及Systemd查找顺序如下:
1. `/etc/systemd/system`
2. `/run/systemd/system`
3. `/usr/lib/systemd/system`
较早目录中的单元文件会覆盖较晚目录中的文件,这使得我们可以在 `/etc` 目录中进行必要的配置更改,同时保留 `/usr` 目录中的默认配置文件。
可以通过以下命令获取默认单元文件的位置:
```bash
# systemctl status sshd
○ sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service;
disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:sshd(8)
man:sshd_config(5)
```
也可以查看默认单元文件的内容:
```bash
# cat /usr/lib/systemd/system/sshd.service
```
Podman提供了专门的子命令来简化与Systemd的集成:
```bash
# podman generate systemd -h
Generate systemd units.
Description:
Generate systemd units for a pod or container.
The generated units can later be controlled via systemctl(1).
Usage:
podman generate systemd [options] {CONTAINER|POD}
```
`podman generate systemd` 命令将输出一个表示创建的单元文件的文本文件,我们可以设置多个选项来调整配置。生成的文件应保存并放置在正确的路径上。
#### 5. 管理基于容器的systemd服务
下面通过一个实际示例来学习如何使用 `podman generate systemd` 命令,创建基于容器的GIT仓库系统服务。我们将借助两个知名的开源项目:Gitea(GIT仓库,提供代码管理的Web界面)和MariaDB(用于存储Gitea服务产生的数据的SQL数据库)。
##### 5.1 生成数据库用户密码
```bash
# export MARIADB_PASSWORD=my-secret-pw
# podman secret create --env MARIADB_PASSWORD
53149b678d0dbd34fb56800cc
```
可以使用以下命令检查和查看秘密信息:
```bash
# podman secret ls
ID NAME DRIVER
CREATED UPDATED
53149b678d0dbd34fb56800cc MARIADB_PASSWORD file 10
hours ago 10 hours ago
# podman secret inspect 53149b678d0dbd34fb56800cc
[
{
"ID": "53149b678d0dbd34fb56800cc",
"CreatedAt": "2022-02-16T00:54:21.01087091+01:00",
"UpdatedAt": "2022-02-16T00:54:21.01087091+01:00",
"Spec": {
"Name": "MARIADB_PASSWORD",
"Driver": {
"Name": "file",
"Options": {
"path": "/var/lib/containers/storage/
secrets/filedriver"
}
}
}
}
]
# cat /var/lib/containers/storage/secrets/filedriver/
secretsdata.json
{
"53149b678d0dbd34fb56800cc": "bXktc2VjcmV0LXB3"
}
# ls -l /var/lib/containers/storage/secrets/filedriver/
secretsdata.json
-rw-------. 1 root root 53 16 feb 00.54 /v
```
0
0
复制全文
相关推荐










